针对单索引 属性 的数据存储查询非常慢

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. 如果您需要更多帮助,请联系我。