存储空间大小的计算

本页面介绍了 Firestore 中文档、文档名称、字段和索引条目所占的存储空间大小。

您可以参阅 Firestore 价格,了解此类存储的费用。

字符串大小

字符串大小的计算方式为 UTF-8 编码字节数 + 1。

以下各项以字符串形式存储:

  • 集合 ID
  • 字符串文档 ID
  • 文档名称
  • 字段名称
  • 字符串字段的值

例如:

  • 集合 ID tasks 使用 5 个字节 + 1 个字节,总计 6 个字节。
  • 字段名称 description 使用 11 个字节 + 1 个字节,总计 12 个字节。

文档 ID 大小

文档 ID 如果是字符串 ID,则其大小为字符串大小;如果是整数 ID,则为 8 个字节。

文档名称大小

文档名称的大小是以下各项相加的总和:

  • 文档的路径中每个集合 ID 和文档 ID 的大小
  • 额外 16 个字节

对于子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档,文档名称大小为 6 + 5 + 6 + 11 + 16 = 44 个字节:

  • users 集合 ID 为 6 个字节
  • jeff 文档 ID 为 5 个字节
  • tasks 集合 ID 为 6 个字节
  • my_task_id 文档 ID 为 11 个字节
  • 额外 16 个字节

字段值大小

下表显示了各种类型的字段值的大小。

类型 大小
数组 数组中各个值所占存储空间大小的总和
布尔值 1 个字节
字节 字节长度
日期和时间 8 个字节
浮点数 8 个字节
地理位置点 16 个字节
整数 8 个字节
Map map 大小的计算方式与文档大小相同
Null 1 个字节
引用 文档名称大小
文本字符串 UTF-8 编码字节数 + 1

例如,名称为 done 的布尔值字段将使用 6 个字节:

  • done 字段名称为 5 个字节
  • 布尔值为 1 个字节

文档大小

文档的大小是以下各项相加的总和:

以下示例针对的是子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档:

 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Cloud Firestore"

这些字段的总大小是 71 个字节:

字段名称和值 字段大小(以字节为单位)
"type": "Personal" 14
5(字段名称)+ 9(字段的字符串值)
"done": false 6
5(字段名称)+ 1(字段的布尔值)
"priority": 1 17
9(字段名称)+ 8(字段的整数值)
"description": "Learn Cloud Firestore" 34
12(字段名称)+ 22(字段的字符串值)

所以文档大小是 44 + 71 + 32 = 147 个字节:

  • 文档名称为 44 个字节
  • 所有字段一共 71 个字节
  • 额外 32 个字节

索引条目大小

对于单字段索引和复合索引,索引条目大小的计算方式如下。

单字段索引条目大小

单字段索引条目的大小取决于索引是限定为集合还是集合组。

集合范围

采用集合范围的单字段索引条目的大小是以下各项相加的总和:

考虑子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档:

 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Cloud Firestore"

对于将 done 字段编入索引的采用集合范围的单字段索引,其中条目的总大小为 109 个字节:

  • 文档名称 users/jeff/tasks/my_task_id 为 44 个字节
  • 父文档的文档名称 users/jeff 为 27 个字节
  • done 字段名称为 5 个字节
  • 布尔字段值为 1 个字节
  • 额外 32 个字节

集合组范围

采用集合组范围的单字段索引条目的大小是以下各项相加的总和:

考虑子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档:

 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Cloud Firestore"

对于将 done 字段编入索引的采用集合组范围的单字段索引,其中条目的总大小为 98 个字节:

  • 文档名称 users/jeff/tasks/my_task_id 为 44 个字节
  • done 字段名称为 5 个字节
  • 布尔字段值为 1 个字节
  • 额外 48 个字节

复合索引条目大小

复合索引中条目的大小取决于索引是限定于集合范围还是集合组范围。

集合范围

采用集合范围的复合索引中的索引条目的大小是以下各项相加的总和:

考虑子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档:

 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Cloud Firestore"

对于将 donepriority 字段(均按升序排列)编入索引的采用集合范围的复合索引,其中条目的总大小为 112 个字节:

  • 文档名称 users/jeff/tasks/my_task_id 为 44 个字节
  • 父文档的文档名称 users/jeff 为 27 个字节
  • 布尔字段值为 1 个字节
  • 整数字段值为 8 个字节
  • 额外 32 个字节

集合组范围

采用集合组范围的复合索引中的索引条目的大小是以下各项相加的总和:

考虑子集合 users/jeff/tasks 中字符串文档 ID 为 my_task_id 的文档:

 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Cloud Firestore"

对于将 donepriority 字段(均按升序排列)编入索引的采用集合组范围的复合索引,其中条目的总大小为 85 个字节:

  • 文档名称 users/jeff/tasks/my_task_id 为 44 个字节
  • 布尔字段值为 1 个字节
  • 整数字段值为 8 个字节
  • 额外 32 个字节

后续步骤

了解 Firestore 价格