2012-04-02 76 views
2

說我想閱讀下列對象結構,並希望在並行讀取儘可能:結合ndb.Tasklets與內存緩存讀取

root_object --> ShardCounter 
      | 
      -> SubObject1 (1..N) 
      | 
      -> SubObject2 (1..N) --> ShardCounter 
            | 
            -> SubObject3 (1..N) 

1)它是有意義與memcache的交互和/或存儲從任務中獲取ShardCounters?據我所見,memcache沒有get_async,所以我有點不確定這是否會並行化好?

2)在產生該結果SubObject2這個tasklet,我會使用iter.has_next_async()圖案或我稱之爲fecth_async().map(...)檢索SubObject3的,或不同的東西完全(另一個微進程,例如)?

感謝您的指點。

回答

3

儘管未在頂層定義memcache的異步函數,但Client類具有異步函數,如here所記錄,您可以將它用於NDB和tasklet。 NDB將無法將多個異步獲取操作合併爲一個多重獲取操作,但取決於您正在做什麼,執行get_multi可能會更有效。編輯:NDB確實有一個Memcache界面 - 詳情請參閱Guido的答案。

對於第二個問題,您必須詳細說明您對結果和原因以及您看到的替代方案的作用。如果您只需獲取所有異步結果,則只需在一個語句中完成所有異步結果。

+1

謝謝尼克,你是一個很好的幫助! – 2012-04-02 17:29:53

+1

請參閱下面的答案。 – 2012-04-03 05:51:11