2011-09-13 51 views
1

在我的一個App Engine應用程序中,我需要編譯所有實體類型的鍵列表,並將它們放入列表中。我以前只是通過這種方式運行查詢,但它根本無法擴展,而且我遇到了堆錯誤。我已經考慮使用分片密鑰列表來解決這個問題,當我更新數據集時添加和刪除密鑰,但是我遇到了幾個讓它工作的問題。Google App Engine中的分片列表

  • 是否可以在應用引擎中使用分片列表?
  • 是否有更好的方法從分片列表中移除對象而不是搜索每個分片?
  • 有沒有更好的方法來獲得所有的鑰匙?
+0

根據提供的信息很難回答這個問題。你能解釋你實際想要達到的目標嗎?那麼我們可以更容易地建議如何做到這一點。 –

+0

用戶需要獲取某種實體的所有密鑰的列表。他們目前通過一個只包含所有關鍵字的XML文件來獲取它,但是效率非常低,因爲查詢太慢了。 –

+0

他們需要什麼名單?如果你確實需要給他們發送一個所有密鑰的列表,那麼不管怎樣都不需要檢索所有的密鑰。 –

回答

0

你內存不足說明你要麼不只是查詢鍵,要麼你有很多這樣的實體。無論哪種方式,你可能有太多無法顯示,所以我假設你會做某種形式的分頁。

這是遊標的理想用例。發出查詢,讀取鍵值(或整個實體)的頁面,以HTML格式呈現它,然後向查詢請求遊標。保存遊標。當用戶頁面時,重新發出相同的查詢,並告訴它從保存的光標處開始。遊標不依賴於索引,因此刪除已經從查詢中獲得的任何實體都不會造成混亂。如果用戶在一頁之後失去興趣,那麼您不會爲閱讀整個密鑰列表付出沉重的代價。

http://code.google.com/appengine/docs/java/datastore/queries.html#Query_Cursors