首页 > 解决方案 > Google Firestore 可扩展性限制

问题描述

根据 Google Firebase 文档,Firestore 将支持多达 1,000,000 个同时连接和每个数据库每秒 10,000 次写入。我们进行了可扩展性测试以检查 Firestore 是否适用于我们的解决方案,并且在 40K 样本的写入操作期间遇到诸如“连接到 firebase.googleapis.com:443:Connection timed out”之类的错误,“firestore.googleapis.com:443 :failed to respond”在 GET 操作期间写入 40K 样本。想了解 Firestore 限制及其可扩展性

运行 JMeter 脚本将数据写入连接到有线网络的多个 VM 和 PC 上的 Firebase(购买用于测试的 Firestore Blaze 计划)以检查可扩展性。JMeter 脚本使用 REST API PATCH 将数据写入 Firebase,PC/VM 上的每个脚本在 5 分钟内写入 5K 数据。共有 8 台 PC/VM 向 Firebase 写入 40K 数据。在此期间,我们还每天 2 次在 5 分钟内获取 500 条记录。在此测试期间,我们正在解决 Firebase 故障

在 40K 样本的写入操作期间,错误是“连接到 firebase.googleapis.com:443:Connection timed out”、“firestore.googleapis.com:443:failed to respond”和连接重置。

标签: google-cloud-firestore

解决方案


您是否正在考虑针对您的特定操作的其他限制?

根据https://firebase.google.com/docs/firestore/quotas

例如,对于写操作:

  • 每个数据库每秒的最大写入次数 = 10,000(每秒最多 10 MiB)
  • 文档的最大写入速率 = 每秒 1
  • 文档在索引字段中包含顺序值的集合的最大写入速率 = 每秒 500
  • 可以传递给提交操作或在事务中执行的最大写入数 = 500

在 GET 操作期间,您有以下限制:每个请求的 exists()、get() 和 getAfter() 调用的最大数量:

10 用于单文档请求和查询请求。20 用于多文档读取、事务和批量写入。之前的 10 个限制也适用于每个操作。

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

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

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

我认为某些参数可能导致这些连接中止。


推荐阅读