本页面介绍 Datastore 模式 Firestore 中的实体、键、属性和索引条目所占用的存储空间大小。您可以参阅 Datastore 模式价格,了解此类存储服务的费用。
字符串大小
字符串大小的计算方式为 UTF-8 编码字节数 + 1。
以下各项以字符串形式存储:
- 键
- 种类名称
- 命名空间名称(默认命名空间的大小为 0)
- 属性名称
- 字符串属性值
例如:
Task
这个种类名称使用了 4 个字节 + 1 个字节,总计 5 个字节。description
这个属性名称使用了 11 个字节 + 1 个字节,总计 12 个字节。my_name_space
这个命名空间名称使用了 13 个字节 + 1 个字节,总计 14 个字节。
键大小
键的大小是以下各项相加的总和:
- 命名空间字符串的大小(如果不在默认命名空间中)
- 完整的键路径字符串大小(每个整数 ID 为 8 个字节)
- 16 个字节
对于默认命名空间中具有数字 ID 且无祖先实体的 Task
种类的键:
Task id:5730082031140864
键大小为 5 + 8 + 16 = 29 个字节:
Task
种类名称为 5 个字节- 数字 ID 为 8 个字节
- 键为 16 个字节
对于默认命名空间中具有字符串 ID 且无祖先实体的 Task
种类的键:
Task name:my_task_id
键大小为 5 + 11 + 16 = 32 个字节:
Task
种类名称为 5 个字节my_task_id
字符串 ID 为 11 个字节- 键为 16 个字节
对于默认命名空间中具有 TaskList
祖先实体的 Task
实体:
TaskList id:5654313976201216 > Task id:5629499534213120
祖先实体使用 9 + 8 = 17 个字节:
TaskList
种类名称为 9 个字节- 数字 ID 为 8 个字节
因此,具有 TaskList
祖先实体的 Task
实体的键大小使用 17 + 5 + 8 + 16 = 46 个字节:
- 祖先实体为 17 个字节
Task
种类名称为 5 个字节- 数字 ID 为 8 个字节
- 键为 16 个字节
如果此实体位于 my_name_space
命名空间中,则键大小为 14 + 46 = 60 个字节,因为 my_name_space
名称使用 14 个字节。
属性大小
属性的大小是以下各项相加的总和:
- 属性名称字符串大小
- 属性值的大小
下面按类型显示了各属性值的大小。
类型 | 大小 |
---|---|
数组 | 数组中各个值的大小总和 |
Blob | 字节长度 |
布尔值 | 1 个字节 |
双精度浮点数 | 8 个字节 |
嵌入式实体 | 实体大小 |
地理位置点 | 16 个字节 |
整数 | 8 个字节 |
键 | 键大小 |
Null | 1 个字节 |
字符串 | UTF-8 编码字节数 + 1 |
时间戳 | 8 个字节 |
例如,名为 done
的布尔型属性将使用 6 个字节:
done
属性名称为 5 个字节- 布尔值为 1 个字节
实体大小
实体的大小是以下各项相加的总和:
此示例针对默认命名空间中具有数字 ID 且无祖先实体的 Task
种类的实体:
Task id:5730082031140864 - "type": "Personal" - "done": false - "priority": 1 - "description": "Learn Google Cloud Datastore"
属性的总大小为 78 个字节:
属性名称和值 | 属性大小(以字节为单位) |
---|---|
"type": "Personal" |
14 5(属性名称)+ 9(属性的字符串值) |
"done": false |
6 5(属性名称)+ 1(属性的布尔值) |
"priority": 1 |
17 9(属性名称)+ 8(属性的整数值) |
"description": "Learn Google Cloud Datastore" |
41 12(属性名称)+ 29(属性的字符串值) |
因此,实体大小为 29 + 78 + 32 = 139 个字节:
- 键为 29 个字节
- 属性为 78 个字节
- 实体为 32 个字节
索引条目大小
对于内置索引和复合索引,索引条目大小的计算方式如下。
内置索引
内置索引条目的大小是以下各项相加的总和:
以默认命名空间中具有数字 ID 且无祖先实体的 Task
种类的实体为例:
Task id:5730082031140864 - "type": "Personal" - "done": false - "priority": 1 - "description": "Learn Google Cloud Datastore"
如果 done
是已编入索引的属性,则单个属性 done
索引的内置索引条目由键、done
属性名称和值、Task
种类名称以及索引条目的 32 个字节组成。此索引条目的总大小为 72 个字节:
- 键为 29 个字节
done
属性名称和布尔值为 6 个字节Task
种类名称为 5 个字节- 索引条目为 32 个字节
默认情况下,Datastore 模式数据库会自动为每个实体种类的各属性预定义两个单属性索引:一个按升序排列,另一个按降序排列。因此,该实体在按升序排列的单属性 done
索引中有一个大小为 72 个字节的索引条目,并且在按降序排列的单属性 done
索引中也有一个大小为 72 个字节的索引条目。
复合索引
复合索引条目的大小是以下各项相加的总和:
以默认命名空间中具有数字 ID 且无祖先实体的 Task
种类的实体为例:
indexes: - kind: Task properties: - name: done direction: asc - name: priority direction: asc
假设一个复合索引使用 done
和 priority
属性(均按升序排列):
此索引中索引条目的总大小为 70 个字节:
- 键为 29 个字节
done
属性的布尔值为 1 个字节priority
属性的整数值为 8 个字节- 索引条目为 32 个字节
如果您不希望 Datastore 模式 Firestore 保留某个属性的索引,请将该属性从索引中排除。请注意,排除属性会将其从所有复合索引中移除。
后续步骤
- 了解 Datastore 模式的价格。
- 了解 Datastore 模式的索引。