database - Firestore 每秒向一个集合写入 500 多次

标签 database firebase google-cloud-platform google-cloud-firestore autoscaling

Firestore 的限制是每秒 500 次写入

"a collection in which documents contain sequential values in an indexed field"

https://cloud.google.com/firestore/quotas#writes_and_transactions

在什么情况下我可以将 ONE 集合中的写入限制提高到每秒 10,000 次?

假设我使用 Best Practices使文档 ID 在整个键范围内相对均匀地分布。

A) 如果文档不包含任何顺序值怎么办?

例如我在每个文档中拥有的唯一字段如下。

  • 字段A:随机字符串
  • 字段B:随机字符串

B) 如果文档包含顺序字段,但我从来没有按该字段进行查询怎么办?

  • 字段A:随机字符串
  • 字段 B(顺序):日期

C) 如果文档包含顺序字段 but I turn off indexing 怎么办?到字段 B 中的日期?

  • 字段A:随机字符串
  • 字段 B(顺序):日期(关闭自动索引)

C) 第 2 部分 - 如果我关闭对该日期字段的索引(这消除了每秒 500 次的限制),如果我将字段 C 随机添加到集合中的单个文档会怎样? 将这个带有字段 C 的文档破坏每秒 10,000 次写入集合的限制吗?因为现在 Firestore 必须担心任何新字段 C 的自动索引?

(然后每次您向该集合中的任何文档添加随机字段时是否都会发生这种情况,因此必须关闭对集合中每个可能字段的索引以消除 500ps 限制?)

最佳答案

每秒 500 次写入是对单个服务器可以处理的保守估计。由于 Cloud Firestore 对文档和索引存储进行水平行分片;这意味着使用顺序 ID 编写的文档或顺序添加的索引条目将由单个服务器处理。将这些放在一起(每台服务器 500 次写入 + 由 1 台服务器处理的顺序更新)就是给你的限制。

当您拥有分布良好的数据时,我们的水平行分片可以将工作负载拆分到许多服务器中。对于原生模式下的 Cloud Firestore,这将一直有效,直到您达到我们实时系统的上限,即大约 10K 写入/秒。 Cloud Firestore in Datastore mode,没有实际限制,只要你提个醒(客户可以超过1M writes/second)

简而言之,A) 和 C) 将受到模式上限(10K 或可用容量)的限制。 B) 将受到单个服务器可以处理的负载的限制。

对于 C2),如果您只是将其添加到单个文档,则不会有任何影响。该限制完全基于传入负载及其分配到的服务器。

关于database - Firestore 每秒向一个集合写入 500 多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55818648/

相关文章:

android - 如何将 Android 应用程序数据持久保存到 Heroku 兼容的数据库中?

sql - 在 SQL 查询中使用数字时为 "Could not convert variant of type (Null) into type (OleStr)"

google-cloud-platform - 使用用户帐户凭据访问私有(private) Cloud Run/Cloud Functions

google-cloud-platform - 带有列表抛出错误的 Terraform 多级 map

python-3.x - 在 Google App Engine 上按计划运行 python 脚本

database - 在PostgreSQL容器启动时创建多个数据库

mysql - 如何将数据从 csv 导入到 SequelPro?

javascript - 从 Web 应用程序中删除 firebase 数据

android - Google 登录产生 "Developer_Error"的 statusCode

node.js - 没有身份验证的 Firebase 初始化 - firebase.auth 不是函数