针对单索引 属性 的数据存储查询非常慢
Datastore query VERY slow against single indexed property
我有一个针对单个索引 属性 的简单查询,它通常需要 20 多秒,有时长达 45 秒。 Kind 只有 10k 个实体,查询返回大约 110 个。这是查询:
SELECT * FROM MyKind WHERE MyProperty = 'xyz'
通常这只需要几秒钟(感觉还是太长了),但偶尔会花费很长时间,如上所述。
返回的实体不在一个实体组中,都是自己的根实体。如果我将它们放在同一个实体组中,这会有帮助吗?它们彼此非常相关,因此以这种方式更改数据模型是有意义的。
只是想知道实体的物理位置是否像今天这样分散,将它们放入一个实体组将使它们保持在一起并消除大量的 rpc 开销。
我邀请您使用 Cloud Datastore 查看 best practices。 Cloud Datastore 中出现热点的原因有很多:
- 使用单调递增的值(例如
作为 NOW() 时间戳。
- 按字典顺序关闭文档的高读取或写入率
- 不存在实体的高读取率会导致热点
为了监控和检查热点,我建议您使用 custom metrics in Stackdriver. Here are the available Datastore metrics. 如果您需要更多帮助,请联系我。
我有一个针对单个索引 属性 的简单查询,它通常需要 20 多秒,有时长达 45 秒。 Kind 只有 10k 个实体,查询返回大约 110 个。这是查询:
SELECT * FROM MyKind WHERE MyProperty = 'xyz'
通常这只需要几秒钟(感觉还是太长了),但偶尔会花费很长时间,如上所述。
返回的实体不在一个实体组中,都是自己的根实体。如果我将它们放在同一个实体组中,这会有帮助吗?它们彼此非常相关,因此以这种方式更改数据模型是有意义的。
只是想知道实体的物理位置是否像今天这样分散,将它们放入一个实体组将使它们保持在一起并消除大量的 rpc 开销。
我邀请您使用 Cloud Datastore 查看 best practices。 Cloud Datastore 中出现热点的原因有很多:
- 使用单调递增的值(例如 作为 NOW() 时间戳。
- 按字典顺序关闭文档的高读取或写入率
- 不存在实体的高读取率会导致热点
为了监控和检查热点,我建议您使用 custom metrics in Stackdriver. Here are the available Datastore metrics. 如果您需要更多帮助,请联系我。