用量和限制

您可以使用本指南了解 Cloud Firestore 限制。如需了解 Cloud Firestore 费用的完整详细说明(包括需要注意的事项),请参阅 Cloud Firestore 价格

监控您的用量

如需监控 Cloud Firestore 用量,请打开 Firebase 控制台中的 Cloud Firestore 用量标签页。您可以使用信息中心测量您在不同时间段的用量。

Google Cloud 控制台中的详细用量

创建 Firebase 项目的同时也会创建 Google Cloud 项目。Google Cloud 控制台中的 Cloud Firestore API 配额App Engine 配额页面会跟踪 Cloud Firestore 用量和配额信息。

免费配额

Cloud Firestore 提供了一定的免费配额,让您可以免费开始使用 (default) 数据库。免费配额数量如下所示。 如果您需要更多配额,则必须Google Cloud 项目启用结算功能

配额按日计算,并会在美国太平洋时间零点重置。

只有 (default) 数据库有资格使用免费配额。

免费层级 配额
数据存储 1 GiB
文档读取 每天 50000 次
文档写入 每天 20000 次
文档删除 每天 20000 次
出站数据传输 每月 10 GiB

以下操作和功能不包括免费使用量。您必须启用结算功能才能使用这些功能:

  • 使用命名(非默认)数据库
  • TTL 删除
  • PITR 数据
  • 备份数据
  • 恢复操作

如需详细了解这些功能的结算方式,请参阅存储价格

标准限制

下表显示了适用于 Cloud Firestore 的限制。除非另有说明,否则这些属于硬性限额。

数据库

限制 详细信息
每个项目的数据库数上限

100

您可以与支持团队联系,申请提高此限制。

集合、文档和字段

限制 详情
对于集合 ID 的限制
  • 必须是有效的 UTF-8 字符
  • 长度不能超过 1500 字节
  • 不能包含正斜杠 (/)
  • 不能只包含单个英文句点 (.) 或两个英文句点 (..)
  • 不能匹配正则表达式 __.*__
子集合的最大深度 100
对于文档 ID 的限制
  • 必须是有效的 UTF-8 字符
  • 长度不能超过 1500 字节
  • 不能包含正斜杠 (/)
  • 不能只包含单个英文句点 (.) 或两个英文句点 (..)
  • 不能匹配正则表达式 __.*__
  • 如果您将 Datastore 实体导入 Firestore 数据库,数字实体 ID 会显示为 __id[0-9]+__
文档名称的大小上限 6 KiB
文档的大小上限 1 MiB(1048576 字节)
对于字段名称的限制
  • 必须是有效的 UTF-8 字符
  • 不能匹配正则表达式 __.*__
字段名称的大小上限 1500 字节
对于字段路径的限制
  • 必须使用单个英文句点 (.) 来分隔字段名称
  • 可以作为点 (.) 分隔的段字符串传递,其中每个段要么是简单的字段名称,要么是带引号的字段名称(定义如下)。
简单的字段名称是指名称符合以下所有条件:
  • 仅包含字符 a-zA-Z0-9 和下划线 (_)
  • 开头不是 0-9
引用的字段名称以反引号字符 (`) 开头和结尾。例如,foo.`x&y` 是指嵌套在 foo 字段下的 x&y 字段。要使用反引号字符构造字段名称,请使用反斜杠字符 (\) 转义反引号字符。为方便起见,您可以将字段路径作为 FieldPath 对象进行传递以避免使用引号的字段名称(如需查看示例,请参阅 JavaScript FieldPath)。
字段路径的大小上限 1500 字节
字段值的大小上限 1 MiB - 89 字节(1048487 字节)
映射 (map) 或数组中字段的最大深度

20

映射和数组字段会向对象的总深度额外添加一层深度。例如,以下对象的总深度为三层:


{
  nested_map: {         #depth 1
    nested_array: [     #depth 2
      {
        foo: "bar"      #depth 3
      }
    ]
  }
}
      

写入和事务

除了这些限制之外,您还应该参阅规模化设计最佳实践

限制 详细信息
API 请求的大小上限 10 MiB
事务的时间限制 270 秒,并具有 60 秒的空闲到期时间
在一项 Commit 操作或一项事务中,可以对单个文档执行的字段转换操作最大数量 500

索引

以下限制适用于单字段索引复合索引

限制 详情
一个数据库的复合索引数量上限
数据库单字段配置的数量上限
  • 200(如果尚未为 Google Cloud 项目启用结算功能)。

    如果您需要更多配额,则必须Google Cloud 项目启用结算功能

  • 500(如果您为 Google Cloud 项目启用了结算功能)。

一个字段级配置可以包含同一字段的多个配置。例如,单字段索引例外项和针对同一字段的 TTL 政策将被视为一个字段配置计入限额。

每个文档的索引条目数量上限

40000

索引条目的数量是文档的以下各项数量的总和:

  • 单字段索引条目的数量
  • 复合索引条目的数量

如需了解 Cloud Firestore 如何将一个文档和一组索引转变为索引条目,请参阅此索引条目数示例

复合索引中的字段数上限 100
索引条目的大小上限

7.5 KiB

如需了解 Cloud Firestore 如何计算索引条目大小,请参阅索引条目大小

一个文档的索引条目的大小总和上限

8 MiB

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

  • 文档的单字段索引条目的大小总和
  • 文档的复合索引条目的大小总和
  • 编入索引的字段值的大小上限

    1500 字节

    超出 1500 字节的字段值会被截断。包含被截断的字段值的查询可能会返回不一致的结果。

    存留时间 (TTL)

    限制 详情
    数据库单字段配置的数量上限
    • 200(如果尚未为 Google Cloud 项目启用结算功能)。

      如果您需要更多配额,则必须Google Cloud 项目启用结算功能

    • 500(如果您为 Google Cloud 项目启用了结算功能)。

    一个字段级配置可以包含同一字段的多个配置。例如,单字段索引例外项和针对同一字段的 TTL 政策将被视为一个字段配置计入限额。

    导出/导入

    以下限制适用于代管式导入和导出操作

    限制 详情
    一个项目每分钟允许的导出和导入请求总数上限 20
    并发导出和导入的数量上限 50
    导出和导入请求的集合 ID 过滤条件的数量上限 100

    安全规则

    限制 详细信息
    每个请求调用 exists()get()getAfter() 的最大次数
    • 10 - 对于单文档请求和查询请求。
    • 20 - 对于多文档读取、事务和批量写入。前面的 10 次限制也适用于每个操作。

      例如,假设您创建了一个包含 3 次写入操作的批量写入请求,并且您的安全规则使用 2 次文档访问调用来验证每次写入。在此情况下,每次写入会使用 10 次访问调用限额中的 2 次调用,而批量写入请求则会使用 20 次访问调用限额中的 6 次调用。

    超过任一限制都会导致权限被拒绝的错误。

    某些文档访问调用可能会被缓存,缓存的调用不会计入限额。

    嵌套 match 语句深度上限 10
    在路径段中,可在一组嵌套 match 语句中使用的路径长度上限 100
    可在一组嵌套 match 语句中使用的路径捕获变量数上限 20
    函数调用深度上限 20
    函数参数的数量上限 7
    每个函数的 let 变量绑定数上限 10
    递归或循环函数调用次数上限 0(不允许)
    每个请求中评估的表达式数量上限 1000
    规则集的大小上限 规则集必须符合以下两种大小限制:
    • 对于从 Firebase 控制台或使用 firebase deploy 从 CLI 发布的规则集文本源,其大小不得超过 256 KB。
    • 对于 Firebase 处理该源并在后端将其激活时生成的编译规则集,其大小不得超过 250 KB。

    管理支出

    为了避免您的账单上出现超支的费用,您可以设置每月预算和提醒。

    设置每月预算

    如需跟踪 Cloud Firestore 费用,请在 Google Cloud 控制台中创建每月预算。该预算并不会限制您的用量,而是让您设置提醒,以便在接近或超过当月计划的费用时向您发出通知。

    如需设置预算,请进入 Google Cloud 控制台中的结算部分,然后为您的 Cloud Billing 账号创建预算。您可以使用默认的提醒设置,也可以修改提醒,在费用达到每月预算的不同百分比时发送通知。

    详细了解如何设置预算和预算提醒