下面給出entity
在谷歌應用程序引擎數據存儲區,是能夠更好地對reportingIds
定義索引或定義僅具有personId
和reportingIds
字段一個單獨的實體?
根據我瞭解的文檔,定義索引會導致針對數據存儲區配額的操作數增加。GAE數據存儲索引VS正常化
以下是在GAE轉到實體。我的代碼需要經常掃描Person實體。它需要將其掃描限制爲具有至少一個報告人的Person實體。我看到兩種方法。
- 通過指定過濾器來定義reportingIds和
Query
的索引。 - 創建/更新PersonWithReporters實體,當有人獲得新的報告人時。
PersonWithReporters
中的所有實體,並且不需要構造任何索引/查詢。我可以迭代使用密鑰,始終保證有最新的數據。考慮到數據存儲操作違反配額限制,不確定哪種方法是有益的。
type Person struct {
Id string //unique person id
//many other personal details, his personal settings etc
reportingIds []string //ids of the Person this guy manages
}
type PersonWithReporters struct {
Id string //Person managing reportees
reportingIds []string //ids of the Person this guy manages
}
有兩種可能的缺點這種方法根據要求:由於它使用你必須注意每個實體組和第二限制1個寫祖先。雖然您可以查詢所有的人報告的人是無法查詢的人有人向因關鍵結構。如果這兩個不是問題,我也會採用這種方法。 – konqi
也許有幾個人報告,但絕對沒有超過「1每秒」 :)至於第二個限制,如果這樣的查詢是必要的,ID爲索引屬性是必要的,而不是使其成爲一個子實體。儘管如此,讓每個「關係」由一個單獨的實體代表更有效率。 –