2012-04-02 12 views
2

は、私は、次のオブジェクト構造を読みたいと言うと、可能な限り読み込み並列化したい読み取ります)memcacheのでndb.Taskletsを組み合わせること

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

1をmemcacheのと対話する、および/またはすることが意味がありますタスクレット内からShardCountersを取得するために保存しますか?私が見る限り、memcacheにはget_asyncがないので、これがうまく並列化されるかどうかは少し分かりません。 SubObject2のために結果を生成タスクレットで

2)は、私がiter.has_next_async()パターンを使用するか、I)は、例えば、SubObject3年代、または完全に(別のタスクレット別の何かを取得するためにfecth_async().map(...)を呼ぶだろうか?

ありがとうございます。

答えて

3

memcacheの非同期関数はトップレベルでは定義されていませんが、Clientクラスには非同期関数があります(here)。これはNDBとタスクレットで使用できます。 NDBは、複数の非同期取得操作を1つのマルチ取得に組み合わせることはできません。そのため、何をしているかによって、代わりにget_multiを実行する方が効率的かもしれません。編集:NDBにはMemcacheインターフェースがあります - 詳細はGuidoの答えをご覧ください。

2つめの質問では、結果を使って何をやっているのか、その理由とその選択肢をどのように見ているのかを少し詳しく説明する必要があります。すべての非同期結果をフェッチするだけであれば、すべてを1つのステートメントに収めることができます。

+1

おかげでニック、あなたは大きな助けになりました! –

+1

下記の私の答えを参照してください。 –

関連する問題