2017-02-17 10 views
3

ndbを使用して、Google App Engine データストアでFooクラスのインスタンスを更新する必要があります。Google App Engineデータストアの複数のインスタンスをndbで更新する最も便利な方法

は、ここで私がこれまで持っているものです。

while more: 
    foo_instances, more_cursor, more = Foo.query().fetch_page(
     20, start_cursor=more_cursor) 
    for foo in foo_instances: 
     bar = foo.bar.get() # foo.bar is a Key to a Bar instance. 
     bar.updated = True 

    ndb.put_multi(foo_instances) 

と(優しいタスクレット):

foo_iterator = Foo.query().iter() 
while (yield foo_iterator.has_next_async()): 
    foo = foo_iterator.next() 
    bar = foo.bar.get() # foo.bar is a Key to a Bar instance. 
    bar.updated = True 

    yield bar.put_async() 

私は10を持っていると信じているPush Queueタスクでこのコードを実行することを計画していますタイムアウトする前に分ウィンドウ。

タスクを実行してタイムアウトやメモリの問題を回避するための正しいアプローチ(もしあれば)はどれですか? Foo型のインスタンスは数千種類あります。

+0

サイドノート:第1の解決策では、 'foo_instances'ではなく' bar'インスタンスを追跡して 'put_multi'したいでしょうか? –

答えて

0

プッシュキューを使用する予定がある場合は、小さいサイズ(たとえばカーソルサイズなど)で分割し、それぞれのタスクを別のタスクで処理するのはなぜですか?このようにしてスケーラビリティの問題を起こすべきではないので、自由に希望するソリューションを選ぶことができます。

解決策の行に沿って、Google appengine: Task queue performanceで議論されているもの(ただし、遅延ライブラリはプッシュキューに置き換えられます)。

関連する問題