0

我偶然發現App Engine數據存儲區的這個功能,您實際上不必擁有一個持久化的根實體與GAE一起使用強一致的行爲。您可以使用計算密鑰來存儲和加載子實體。 我的問題是:這是一個很好的做法還是這太依賴於數據存儲的實現怪癖?GAE祖先查詢Hack:這是一個很好的做法嗎?

下面是一個使用Python的例子。我敢肯定,這個習慣用法也適用於Java。

假設你有一個孩子的實體:

CustomerReport(ndb.Model): 
    foo=ndb.StringProperty 
    bar=ndb.FloatProperty 
    #... 

CustomerReports是基於一個真正的實體類型,客戶產生的。

ReportRoot(ndb.Model): 
    pass 

像這樣::但是你可以通過計算祖先鍵這樣一個不存在的母公司具有較強的一致性,保存這份報告實體

CustomerReport(parent=ndb.Key(ReportRoot, customer.key.id()), ...).put() 

這可以再次通過簡單的計算來檢索關鍵:

CustomerReport.query(ancestor=ndb.Key(ReportRoot, customer.key.id())).fetch() 

謝謝。

回答

2

使用一個鍵作爲沒有相應的保存實體的父母是非常好的。你甚至都不需要創建一個Python類,只是使用的字符串名字:

parent=ndb.Key('ReportRoot', some_id) 

你舉的例子,不過,似乎混淆。您認爲您只是將客戶的密鑰用作報告的父母,您會得到什麼?

+0

我可以使用這種技術來避免在生成和讀取報告時鎖定客戶實體組。 – Nikolai 2014-09-01 19:53:01

相關問題