2011-09-15 16 views
0

我正面臨着一些可擴展性問題。我正在使用JDO來查詢我的數據存儲。 我需要檢索給定實體的所有鍵(這些鍵的類型爲Long)。鑑於在我的數據存儲中,這樣的實體擁有1.000.000條記錄,我需要以非常有效的方式獲取它們,以便在後臺任務中遍歷該集合。GoogleAppEngine上的JDO:如何高效地從大量記錄中檢索字段的子集

這是最有效的方法嗎?

如果我不僅需要鑰匙,而且需要另一個領域呢?假設我有一個名爲TPImage的實體:

Long idPic; //this is my key 
    String title; //this is the field I want to retrieve together with the key 
    ... // other properties 

如何在單個有效查詢中檢索idPic和標題?

喜歡的東西

Query q = new Query("select idPic, title from " + TPImage.class.getName()); 

但更有效?

非常感謝!

再見 cghersi

+0

我修改了標題以反映您確實需要數據以及鍵的事實。否則,你可以做一個鍵只查詢。 –

回答

1

你有結垢問題是,你需要的所有鍵 - 不是說你不能獲取它們足夠有效。不管你使用什麼系統,這總是至少是O(n)。

與其試圖預取所有內容,您應該分批完成您的工作,並使用cursors高效地檢索下一組結果。

如果您需要模型中的字段,則必須檢索整個模型實例 - 它們存儲爲序列化的斑點,因此無法只檢索一個字段。

+0

所以,這是討論的結尾:blob序列化阻止我有效地只取得對象字段的一個子集......非常感謝。 –

0

你的問題有2個部分。對於第一部分,僅獲取密鑰,您可以指定該查詢只有在通過將參數keys_only設置爲True來創建時才應返回密鑰。 在這裏看到: http://code.google.com/appengine/docs/python/datastore/queryclass.html#Query

這會有所幫助,因爲你不是檢索整個實體。但是,如果您想一次處理1,000,000條數據,它可能無法幫到您。在這種情況下,請聽取Nick的建議並分解工作。

相關問題