解决延迟问题

本页面介绍如何解决 Firestore 的延迟问题。

延迟时间

下表介绍了可能导致延迟时间增加的原因:

延迟原因 受影响的操作类型 解决方法
超出 500-50-5 规则的持续流量。 读取、写入

对于流量快速增加,Firestore 会尝试自动扩缩以满足增加的需求。当 Firestore 扩缩时,延迟时间会开始缩短。

热点(窄文档范围的高读取、写入和删除速率)限制了 Firestore 扩缩的能力。查看可扩缩设计,并确定应用中的热点。

由于更新单个文档过于频繁或由于事务导致争用。 读取、写入

降低单个文档的写入速率。

查看事务中的数据争用以及您如何使用事务。

合并联接查询速度缓慢。 read 例如,使用多个等式过滤条件 (==) 但不受复合索引支持的查询可能会导致合并联接查询速度缓慢。如需提升性能,请为这些查询添加复合索引,请参阅为什么我的 Firestore 查询速度缓慢?中的原因 3。
返回许多文档的大批量读取操作。 read 使用分页拆分大批量读取操作。
最近的删除操作过多。 读取
这大大影响了列出数据库中集合的操作。
如果延迟是由最近的删除操作过多导致的,则问题应会在一段时间后自动解决。如果问题未解决,请与支持团队联系
添加和移除侦听器的速度过快。 实时侦听器查询 请参阅实时更新的最佳做法
侦听大型文档或查询包含多个结果的查询。 实时侦听器查询 请参阅实时更新的最佳做法
索引扇出,特别是对于数组字段和映射字段。 write 查看数组字段和映射字段的使用情况。对于映射字段,您可以禁止将子字段编入索引。您还可以使用集合级例外项
大批量写入和批量写入操作。 write

尝试减少各批量写入操作的写入次数。批量写入是以原子操作方式完成的,因此单个批量中的多次写入可能会增加延迟时间和争用。例如,一批 10 次写入操作性能优于一批 500 次写入操作。

对于不需要原子性的批量数据输入,请使用可并行执行单个写入操作的服务器客户端库。批量写入的性能优于串行写入,但不及并行写入。