Cloud Firestore实现最高每秒写入量需要配置多少个分片?
你的理解完全正确,默认配置下配置20个分片即可将该集合的写入吞吐量拉到Cloud Firestore的全局最高上限,新增更多分片不会带来额外的写入性能提升,核心逻辑如下:
若集合中文档的索引字段包含顺序值,该集合的最高写入速率为每秒500次
- Cloud Firestore的这一限制来自有序索引的热点问题:带顺序值的索引字段会把写入请求集中到索引存储的同一个分片上,单个分片的处理上限就是500次/秒。你新增的shard字段本质是把写入请求打散到不同的索引分片上,每个分片独立扛500次/秒的写入,所以总吞吐量是
分片数 * 500次/秒。 - 而Cloud Firestore默认的项目级全局写入上限是10000次/秒,属于硬配额限制,当你整个项目的写入总QPS达到这个阈值后,哪怕你给集合配置更多分片,请求也会被全局限流规则拦截,所以超过20个的分片属于多余配置。
你提到的初期就配置20个分片的方案是可行的,只要你已经确认可以规避分片带来的查询复杂度问题,这个方案几乎没有额外负担,还能避免后续用户量上涨时遇到索引热点导致的写入限流。可以额外注意两个细节:
- 要保证shard字段的取值足够均匀,比如用随机数取模20、用户ID哈希取模等方式生成shard值,避免流量集中到少数几个分片上,否则就算配置了20个分片,依然可能触发单分片500次/秒的限流。
- 如果你后续申请上调了项目级的全局写入配额,再对应增加分片数量即可,不需要提前预留过多分片。
另外你提到的计数器分片场景和当前场景完全独立:计数器分片是为了规避单文档每秒1次的写入限制,和你当前解决索引热点的分片逻辑没有关联,你的理解没有问题。
内容的提问来源于stack exchange,提问作者barbrady
相关产品推荐
相关产品推荐

