解决延迟问题
本页面介绍如何解决 Firestore 的延迟问题。
延迟时间
下表介绍了可能导致延迟时间增加的原因:
延迟原因 | 受影响的操作类型 | 解决方法 |
---|---|---|
超出 500-50-5 规则的持续流量。 | 读取、写入 |
对于流量快速增加,Firestore 会尝试自动扩缩以满足增加的需求。当 Firestore 扩缩时,延迟时间会开始缩短。 热点(窄文档范围的高读取、写入和删除速率)限制了 Firestore 扩缩的能力。查看可扩缩设计,并确定应用中的热点。 |
由于更新单个文档过于频繁或由于事务导致争用。 | 读取、写入 |
降低单个文档的写入速率。 查看事务中的数据争用以及您如何使用事务。 |
合并联接查询速度缓慢。 | read |
例如,使用多个等式过滤条件 (== ) 但不受复合索引支持的查询可能会导致合并联接查询速度缓慢。如需提升性能,请为这些查询添加复合索引,请参阅为什么我的 Firestore 查询速度缓慢?中的原因 3。 |
返回许多文档的大批量读取操作。 | read | 使用分页拆分大批量读取操作。 |
最近的删除操作过多。 | 读取 这大大影响了列出数据库中集合的操作。 |
如果延迟是由最近的删除操作过多导致的,则问题应会在一段时间后自动解决。如果问题未解决,请与支持团队联系。 |
添加和移除侦听器的速度过快。 | 实时侦听器查询 | 请参阅实时更新的最佳做法。 |
侦听大型文档或查询包含多个结果的查询。 | 实时侦听器查询 | 请参阅实时更新的最佳做法 |
索引扇出,特别是对于数组字段和映射字段。 | write | 查看数组字段和映射字段的使用情况。对于映射字段,您可以禁止将子字段编入索引。您还可以使用集合级例外项。 |
大批量写入和批量写入操作。 | write |
尝试减少各批量写入操作的写入次数。批量写入是以原子操作方式完成的,因此单个批量中的多次写入可能会增加延迟时间和争用。例如,一批 10 次写入操作性能优于一批 500 次写入操作。 对于不需要原子性的批量数据输入,请使用可并行执行单个写入操作的服务器客户端库。批量写入的性能优于串行写入,但不及并行写入。 |