在 Datastore 中索引布尔值或类似枚举的 属性 对于快速写入来说是个坏主意吗?

Is indexing a boolean or enum-like property in Datastore a bad idea for fast writes?

well documented 快速写入具有单调递增的值作为键或索引属性的实体类型对于性能来说不是一个好主意。

如何为布尔属性或具有类似枚举值(例如性别)的属性索引实体?

我的猜测是在低基数上建立索引 属性 可能会遇到同样的问题,因为此类属性没有内置类型。但也许对布尔属性有特殊处理?

Cloud Datastore 针对布尔值和枚举等低基数数据进行了优化。每个索引条目还包含实体键,然后可以让我们的底层 Bigtable tablet 有效地拆分,从而处理更大的负载。这是可行的,因为我们不需要考虑相同值的排序顺序,因此让它们随机分布在自己的键 space 中对查询没有影响,并且实体键保证是唯一的,因此我们避免了冲突.

当我们索引一个值时,我们还会在末尾添加一个'scatter key' 属性,这本质上是一个随机整数。此分散键随后可用于稍后的查询拆分,从而允许诸如 Cloud Dataflow 之类的东西有效地并行化针对此数据集的查询。