谷歌应用引擎所需的每个查询的两个索引

时间:2011-03-05 18:47:28

标签: google-app-engine

对于每个查询,即使是简单的查询,例如SELECT * FROM Entity,app引擎也会维护两个索引,一个按升序排列,另一个按降序排列。然后它找到第一个匹配的行,向下工作直到找到不匹配的行并返回结果。

但为什么呢?我不明白为什么谷歌使用的机制不能仅仅因为降序而被逆转,特别是考虑到索引数量加倍导致的空间损失。必须有一个很好的理由。

1 个答案:

答案 0 :(得分:2)

我不能肯定地说,但我的猜测是因为GAE数据存储区运行在Bigtable之上(想想“Sharded Sorted Array”)。

当完成扫描(认为返回大量行的查询)时,从磁盘执行连续读取可能会更快,这可能是Bigtable优化的。反方向将需要许多磁盘搜索,这会减慢速度。

Ryan Barrett对Bigtable和Datastore有一个很好的谈话;他谈到扫描at around 7m 50s