存储空间大小的计算

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

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

字符串大小

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

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

  • 集合名称
  • 字段名称
  • 字符串字段值(包括 _id

例如:

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

字段值大小

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

类型 大小
数组 数组中各个值所占存储空间大小的总和
布尔值 1 个字节
二进制数据 非通用(非 0)子类型的字节长度 + 1
日期 8 个字节
双精度型 8 个字节
Double128 16 个字节
32 位整数 4 个字节
64 位整数 (long) 8 个字节
对象 每个字段名称的字符串大小总和以及嵌入式对象中每个字段值大小的总和
最小值键 1 个字节
最大值键 1 个字节
1 个字节
正则表达式 (模式长度 + 1)+(选项长度 + 1)
时间戳 8 个字节
字符串 UTF-8 编码字节数 + 1

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

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

文档大小

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

以下示例针对的是集合 tasks 中的文档:

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

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

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

所以文档大小是 6 + 78 + 48 = 132 个字节:

  • 集合名称为 6 个字节
  • 字段为 78 个字节
  • 额外 48 个字节

索引条目大小

索引中索引条目的大小是以下各项相加的总和:

假设 tasks 集合中有一个文档:

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

对于 donepriority 字段(均按升序排序)上的索引,该索引中索引条目的总大小为 70 个字节:

  • 集合名称 tasks 为 6 个字节
  • _id 字段值为 11 个字节
  • 布尔字段值为 1 个字节
  • 32 位整数字段值为 4 个字节
  • 额外 48 个字节

对于稀疏索引,如果文档不包含任何字段,则系统不会创建任何索引条目。如果文档至少包含一个编入索引的字段,则系统会创建一个索引条目,缺少的编入索引的字段设置为 NULL

更改流事件条目大小

更改流事件的大小是以下各项的总和:

  • 集合名称的字符串大小总和 (x2)。
  • 对于文档的插入和更新事件:
    • 字符串大小的总和,其中每个字段名称位于 fullDocumentupdateDescription中(不包括_id)。
    • 字段值fullDocumentupdateDescription 中的大小总和。 (包括 _id)。
  • 如果适用于多文档事务,则 lsidtxnNumber 额外占用 24 个字节。
  • 额外 92 个字节

以 tasks 集合中文档的插入事件为例:

{
  "_id": { <Resume Token> },
  "operationType": "insert",
  "clusterTime": <Timestamp>,
  "wallTime": <ISODate>,
  "ns": {
     "db": "db",
     "coll": "tasks"
  },
  "documentKey": {
     "_id": "my_task_id"
  },
  "fullDocument": {
     "_id": "my_task_id",
     "description": "Learn Cloud Firestore"
  },
}

更改流事件的总大小为 149 个字节:

  • 一般元数据为 92 个字节
  • 根据集合名称 tasks (6 字节) * 2,为 12 个字节
  • _id 字段值为 11 个字节
  • description 字段名称为 12 个字节
  • description 字段值为 22 个字节

文本搜索索引条目大小

索引中文本搜索索引条目的大小是以下各项相加的总和:

  • 集合名称的字符串大小
  • _id 值的大小
  • 编入索引的字段值的字节总和 (x2)
  • 一般元数据额外占用 48 个字节

tasks 集合中 _id my_task_id 的文档的插入事件为例:

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

根据以下各项,description 的文本搜索索引条目的总大小为 105 个字节:

  • 集合名称 tasks 为 6 个字节
  • _id 值为 11 个字节
  • 44 个字节,根据 description 字段 x2 为 22 个字节
  • 一般元数据额外占用 48 个字节

地理空间索引条目大小

索引中地理空间索引条目的大小是以下各项相加的总和:

  • 集合名称的字符串大小
  • _id 值的大小
  • 每个编入索引的地理点占用 128 个字节
  • 一般元数据额外占用 48 个字节

places 集合中 _idmy_place 的文档的插入事件为例:

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

根据以下各项,location 的地理空间索引条目的总大小为 192 个字节:

  • 集合名称 places 为 7 个字节
  • 文档 ID 为 9 个字节
  • location 字段为 128 个字节
  • 一般元数据额外占用 48 个字节

后续步骤

了解价格