Cloud Firestore 事务的限制

Posted

技术标签:

【中文标题】Cloud Firestore 事务的限制【英文标题】:Limitations on Cloud Firestore transactions 【发布时间】:2018-03-17 01:20:11 【问题描述】:

我已阅读有关 transactional update operations on Firestore 的文档。根据Quotas and Limits,关于交易只有两个限制:

事务的最大大小:10 MiB 事务时间限制:270 秒,空闲过期时间为 60 秒

没有明确提及与事务相关的限制,在事务期间可以读取和/或修改多少文档或集合,或者对发生事务更新的集合是否有任何其他限制。

    这是否意味着,只要更新保持在这些和其他一般限制范围内,客户端最多可以对 500 个文档进行事务更新,每个文档位于不同的集合中?

    如果客户端读取事务中的多个文档,但只更新其中一个 - Firestore 是否仍然(静默)写入未修改的文档(用于序列化左右)...所以我必须考虑写入- 每个文档每秒最多写入 1 次,即使对于客户端未明确修改的文档也是如此。

P.S.:我问的原因是 Datastore 在事务中限制为 25 个实体组,并且还在许多写入事务中看到只读实体(“文档”)中的热点。例如,请参阅this answer by Dan McGrath。我只是想知道 Datastore 的哪些特性会延续到 Firestore,并且在设计 Firestore 数据库时必须考虑。

【问题讨论】:

【参考方案1】:

请参阅“可以传递给提交操作的最大文档数”行,该行定义了 500 个文档的限制。这是您的事务限制,因为我们需要使用单个提交来应用事务中的所有内容。

我认为不再需要静默写入来确定事务中的文档是否已更改。

没有相当于 25 个实体组限制的相关限制。

【讨论】:

如果我们想要进行超过 500 次更新,我们应该使用多个批次吗?或者我们如何才能做到这一点?我有一个案例,我需要为User Feed 动态更新reference。我在集合中添加了我关注的用户创建的每个Post 的 ID + 一些信息,如果我取消关注用户,我需要删除这些参考。现在一切正常,但如果将来我的应用程序增长并且用户有超过 500 个帖子,我的cloud function 将在尝试更新此数据时崩溃。 @FranciscoDurdinGarcia 老实说,如果您将用户 X 关注的每个用户的每个帖子的引用存储在用户 X 内部的集合中,那么您会遇到比事务限制更大的可伸缩性问题。

以上是关于Cloud Firestore 事务的限制的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Firestore REST API createDocument 自动生成 ID

Android java:如何创建 POJO 并将其转换为 Cloud Firestore REST API 可接受的 JSON

限制通过VPC网络访问Google Cloud Firestore。

如何限制用户仅从 Cloud Firestore 检索他们的数据?

Cloud Firestore 文档锁定

使用规则禁用 Firebase Cloud Firestore 中的查询集合