数据存储区索引中属性的顺序有何不同?

时间:2015-06-24 19:40:23

标签: google-app-engine google-cloud-datastore

我正在尝试使用数据存储区索引,我注意到我可以通过多种方式在索引中对属性进行排序:

IsItemActive ▲ + Rating ▲
- or -
Rating ▲ + IsItemActive ▲

上述两个指标有什么区别?一个允许我查询SELECT * FROM Items WHERE Rating > 3 AND IsItemActive = FALSE但另一个不查询。

1 个答案:

答案 0 :(得分:3)

数据存储在很大程度上依赖于索引属性的排序,以强制执行其规则,即每个查询都必须根据结果集的大小进行缩放。

要回答查询,该查询的所有结果必须在索引中按顺序显示。

所以,考虑两个指标:

指数(IsItemActive,评级)

Item(Rating=3, IsItemActive=False)   <----
Item(Rating=4, IsItemActive=False)   <----
Item(Rating=3, IsItemActive=True)
Item(Rating=4, IsItemActive=True)
Item(Rating=5, IsItemActive=True)

指数(评级,IsItemActive)

Item(Rating=3, IsItemActive=False)   <----
Item(Rating=3, IsItemActive=True)
Item(Rating=4, IsItemActive=False)   <----
Item(Rating=4, IsItemActive=True)
Item(Rating=5, IsItemActive=True)

为了使您的查询SELECT * FROM Items WHERE Rating > 3 AND IsItemActive = FALSE能够将所有结果彼此相邻,它必须使用Index(IsItemActive, Rating)索引。另一个索引没有你需要的所有结果。

Here是一篇关于索引选择如何工作的文章。此外,我强烈推荐Google I/O talk (2008)关于数据存储如何在幕后工作。