2011-03-05 43 views
1

對於每個查詢,即使是簡單的查詢,如SELECT * FROM Entity,應用引擎都會維護兩個索引,一個索引按升序排列,另一個按降序排列。然後它找到第一個匹配的行,向下查找,直到找到一個不匹配的行並返回結果。谷歌應用引擎需要的每個查詢的兩個索引

但是爲什麼?我不明白爲什麼谷歌使用的機制不能僅僅因爲下降的情況而被逆轉,特別是考慮到索引數量翻倍導致的空間損失。這一定有很好的理由。

回答

2

我不能肯定地說,但我的猜測是因爲GAE數據存儲在Bigtable之上運行(認爲是「Sharded Sorted Array」)。

當掃描(認爲返回大量行的查詢)完成時,從磁盤執行連續讀取操作可能會更快,而這可能是Bigtable最適合執行的操作。相反的方向將需要很多磁盤搜索,這會降低速度。

Ryan Barrett對Bigtable和Datastore進行了很好的討論;他談到掃描at around 7m 50s

+0

準確地說 - 在磁盤上向後讀取很昂貴。 – 2011-03-08 00:54:08