配额和限制

本页介绍 Firestore 的请求配额和限制。

免费配额

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

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

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

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

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

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

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

标准限制

下表显示了适用于 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 字节)
映射或数组中字段的最大深度

20

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


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

写入和事务

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

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

索引

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

本页介绍 Firestore 的请求配额和限制。

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

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

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

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

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

40000

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

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

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

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

7.5 KiB

如需了解 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 API 配额App Engine 配额页面中查看 Firestore 用量。