2013-01-07 64 views
0

我有以下2個實體。谷歌應用引擎,查詢多個實體

class Photo(db.Model): 
    name=db.StringProperty() 
    registerdate=db.DateTimeProperty() 
    iso=db.StringProperty() 
    exposure=db.StringProperty() 

class PhotoRatings(db.Model): 
    ratings=db.IntegerProperty() 

我需要執行以下操作。 獲取iso = 800所有照片(照片)按照評分(照片評級)排序。 我無法在照片中添加評分,因爲評分一直在變化,我不得不每次都寫完整的照片實體。這會花費我更多的時間和金錢,應用程序會帶來性能上的影響。 我看了這個, https://developers.google.com/appengine/articles/modeling 但是無法從中得到很多信息。

編輯:我想避免提取太多的項目,並手動執行匹配。我需要快速高效的解決方案。

回答

1

您正試圖使用​​顯式非關係數據存儲進行關係數據庫查詢。

正如你可能想象的那樣,這帶來了問題。如果您希望數據存儲爲您排序結果,則必須能夠索引您想要排序的內容。指數不能跨越多個實體類型,因此您無法獲得按PhotoRatings排序的Photo的索引。

對不起。


但是,考慮一下,哪種情況會更頻繁?查詢這張照片的排序,或者某人對照片進行評分?有機會,你會有更多的觀點比行動,所以存儲評級作爲Photo實體的一部分可能不會像你擔心的那樣大受打擊。

+0

謝謝!所以這是一個限制,沒有辦法繞過它。我想我將不得不使用它。 – specialscope

1

如果你看billing docs你會注意到一個實體寫是收取每改變屬性數量。

因此,您試圖做的事情不會降低寫入成本,但肯定會增加讀取成本,因爲您將讀取實體數量的兩倍。

+0

哦,對,我的印象是,無論變化的次數如何,每次寫入都要爲整個實體收費。如果沒有好的結果,優化這似乎是太多的努力。感謝您指出了這一點。不,我會測試它會帶來多少性能,因爲我的實體已經很大。 – specialscope

相關問題