2010-06-11 26 views
2

我有一個查詢,這是非常最近開始拋出:Appengine反向引用 - 需要複合索引嗎?

"The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query." 

我檢查其上被拋出該異常的線路,問題查詢,這是一個:

count = self.vote_set.filter("direction =", 1).count() 

這是實際上是一個使用appengine的內置反向引用的單過濾操作。我不知道如何優化這個查詢...任何人有任何建議?我試圖添加此索引:

- kind: Vote 
    properties: 
    - name: direction 
    direction: desc 

- kind: Vote 
    properties: 
    - name: direction 

而且我收到一條消息(顯然)說這是一個不必要的索引。

感謝您的幫助提前。

回答

3

如果您在當地的SDK運行的所有相關查詢,應該生成所有需要的指標(在index.yaml)和推薦的政策是不編輯index.yaml自己而是讓本地SDK爲你做。如果SDK沒有生成所有需要的索引,只要您在本地測試中使用所有相關的代碼路徑!您應該在App Engine跟蹤器here中打開它的一個錯誤(在檢查還沒有當然是一個關於這個問題的錯誤報告)。

+0

請參閱我確實已完成此操作,因此它使我認爲我的數據存儲的大小與它有關。我目前正在等待一些新的索引建立,但在此之後,我可能需要打開一個錯誤報告。很奇怪。 – 2010-06-11 19:56:52

+0

SDK不會爲可通過合併連接算法執行的查詢生成索引。但是,查詢對於合併連接來說可能不切實際 - 這是我們在這裏看到的。 – 2010-06-11 22:25:30

+0

So Nick:除了重新設計我的模式之外,還有什麼可以做的嗎? – 2010-06-14 17:42:56

3

反向引用實際上只是構造一個在引用屬性上過濾的查詢,因此通過添加另一個過濾器,您可以使用2過濾器查詢。

你compsite指數會看起來像:

- kind: Vote 
    properties: 
    - name: your_reference_property_name 
    - name: direction 
    direction: desc 
+1

在等待這個索引建立兩天後,它似乎根本沒有任何效果。檢出這個網頁後: http://www.allbuttonspressed.com/blog/django/2010/01/An-App-Engine-limitation-you-didn-t-know-about 我在想我可能無法堅持這個模式。哎呀。 看到,痛苦的部分是,這是一個正在使用的現場,它不只是一個業餘愛好項目。這是賺錢,所以現在我必須解決這個限制和浪費時間。我正在考慮將它移植到我自己的普通服務器上運行。 – 2010-06-14 17:36:38