本页介绍了如何解决 Datastore 模式 Firestore 的问题。
延迟时间
下表介绍可能导致延迟时间增加的原因:
延迟原因 | 受影响的操作类型 | 解决方法 |
---|---|---|
超出 500-50-5 规则的持续流量。 | 读取、写入 |
对于流量快速增加,Datastore 模式会尝试自动扩缩以满足增加的需求。当 Datastore 模式扩缩时,延迟时间会开始缩短。 热点(窄实体范围的高读取、写入和删除速率)限制了 Datastore 模式的扩缩能力。查看可扩缩设计,并确定应用中的热点。 |
由于更新单个实体过于频繁或由于事务导致争用。 | 读取、写入 |
降低对各个实体的写入速率。 查看事务隔离和一致性以及您如何使用事务。 |
合并联接查询速度缓慢。 | read |
例如,使用多个等式过滤条件 (== ) 但不受复合索引支持的查询可能会导致合并联接查询速度缓慢。如需提升性能,请为这些查询添加复合索引,请参阅优化索引。
|
返回许多实体的大批量读取操作。 | read | 使用查询光标拆分大批量读取操作。 |
最近删除的项目过多。 | 读取 这大大影响了列出数据库中种类的操作。 |
如果延迟是由最近的删除操作过多导致的,则问题应会在一段时间后自动解决。如果问题未解决,请与支持团队联系。 |
索引扇出,特别是对于数组属性。 | write | 查看 展开索引以及您对数组属性的使用方式。 |
错误代码
本部分列出了您可能遇到的问题,并提供了有关如何解决这些问题的建议。
DEADLINE_EXCEEDED
DEADLINE_EXCEEDED A deadline was exceeded on the server.
如需解决此问题,请参阅有关排查延迟时间问题的指南。
ABORTED
以下情况可能会增加 ABORTED
错误:
- 实体每秒收到的更新过多。
- 由于事务重叠导致争用。
- 流量增加超过 500-50-5 规则或遇到热点。
ABORTED Too much contention on these datastore entities. Please try again.
或
ABORTED Aborted due to cross-transaction contention. This occurs when multiple transactions attempt to access the same data, requiring Datastore mode to abort at least one in order to enforce serializability.
要解决此问题,请执行以下操作:
- 对于流量快速增加,Datastore 模式会尝试自动扩缩以满足增加的需求。当 Datastore 模式扩缩时,延迟时间会开始缩短。
- 热点会限制 Datastore 模式的扩容能力,请查看可扩缩设计来确定热点。
- 查看事务中的数据争用以及您对事务的使用情况。
- 降低对各个实体的写入速率。
RESOURCE_EXHAUSTED
以下情况可能会导致 RESOURCE_EXHAUSTED
错误:
您已超出免费层级配额,并且没有为您的项目启用结算功能。
RESOURCE_EXHAUSTED Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.
要解决此问题,请执行以下操作:
- 等待重置每日免费层级配额或为您的项目启用结算功能。
INVALID_ARGUMENT
以下情况可能会导致 INVALID_ARGUMENT
错误:
- 尝试提交已编入索引的属性值超过 1500 字节的实体。此限制适用于媒体资源价值的 UTF-8 编码。
- 尝试提交未编入索引的属性值大于 1048487 字节(1 MiB - 89 字节)的实体。此限制适用于实体中属性值的总和。例如,如果有四个大小均为 256 KiB 的媒体资源,则会超出此限制。
1,500 个字节(已编入索引)和 1,048,487 个字节(未编入索引)是属性值的限制。您不得超出这些限制,并且这些限制不是可调整的配额。
INVALID_ARGUMENT: The value of property property-name is longer than 1500 bytes
或
INVALID_ARGUMENT: The value of property property_name is longer than 1048487 bytes
要解决此问题,请执行以下操作:
- 对于已编入索引的属性值,请将该属性拆分为多个属性。如果可能,请创建不编入索引的媒体资源,并将不需要编入索引的数据移至该媒体资源。
- 对于未编入索引的属性值,请将该属性拆分为多个属性,或对属性值实现压缩。