对于每个查询,即使是简单的查询,例如SELECT * FROM Entity,app引擎也会维护两个索引,一个按升序排列,另一个按降序排列。然后它找到第一个匹配的行,向下工作直到找到不匹配的行并返回结果。
但为什么呢?我不明白为什么谷歌使用的机制不能仅仅因为降序而被逆转,特别是考虑到索引数量加倍导致的空间损失。必须有一个很好的理由。
答案 0 :(得分:2)
我不能肯定地说,但我的猜测是因为GAE数据存储区运行在Bigtable之上(想想“Sharded Sorted Array”)。
当完成扫描(认为返回大量行的查询)时,从磁盘执行连续读取可能会更快,这可能是Bigtable优化的。反方向将需要许多磁盘搜索,这会减慢速度。
Ryan Barrett对Bigtable和Datastore有一个很好的谈话;他谈到扫描at around 7m 50s。