2013-11-15 109 views
1

衆所周知,AppEngine數據存儲是建立在Bigtable之上的,Bigtable是按鍵內在排序的。還知道(somewhat)密鑰是如何由AppEngine數據存儲生成的:通過「組合」應用ID,實體種類,實例路徑和唯一實例標識(可能通過串聯,參見here)。是否保存/排序AppEngine數據存儲區key_names?

什麼是不明確的是,是否在存儲之前對該唯一實例標識符進行轉換,以便使存儲順序鍵不連續(例如,如果我指定key_name =「Test」,僅是「Test」 )當然,保留app-id,實體種類和路徑是合理的,以利用Bigtable中的局部性/鍵排序(Google的其他主存儲技術, F1,與分層鍵相似),但我不知道唯一的實例標識符。

我可以依賴key_name保存在AppEngine的數據存儲中嗎?

回答

4

密鑰由一個特殊的協議緩衝區序列化組成,保留了它編碼的字段的自然順序。這意味着是的,兩個具有相同類型和父類的實體將按鍵名排列它們的鍵。儘管如此,請注意,排序順序首先具有實體類型和父鍵,因此即使鍵的順序不同,不同類型或相同類型但具有不同父實體的兩個實體也不會順序出現。

+0

尼克,你回來了!好極了! –

+0

@PeterKnego我仍然留意,所以我很少有時間回答。無論如何,其他人做得比我最近能寫出更好的答案更好! –

0

除了什麼@Nick解釋說:

如果使用自動生成的數字ID,以前是半增加(IDS增加塊被分配)的legacy system,但隨着新的系統,他們都相當疏散。

相關問題