2017-02-17 8 views
3

Мне нужно обновить несколько экземпляров класса Foo в Google App Engine Datastore, используя ndb.Самый удобный способ обновления нескольких экземпляров в хранилище данных Google для устройств с 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() 

Я планирую выполнить этот код в Push Queue задачи, которую я считаю, чтобы иметь 10 минут окно перед тем, как тайм-аут.

Каков правильный подход (если есть), чтобы выполнить задачу и избежать проблем с таймаутом или памятью? Существует несколько тысяч экземпляров типа Foo.

+0

примечание стороны: в 1-м решении вы, вероятно, захотите отследить и 'put_multi' экземпляры' bar', а не 'foo_instances', правильно? –

ответ

0

Если вы планируете использовать очередь push, то почему бы не разделить работу на более мелкие куски (например, по размеру вашего курсора) и обрабатывать каждую часть другой задачей? Таким образом, у вас не должно быть проблем с масштабируемостью и, следовательно, вы можете выбирать любое решение, которое вы хотите/предпочитаете.

Что-то вдоль линий решения, описанного в Google appengine: Task queue performance (но замените отложенную библиотеку на очередь push).

 Смежные вопросы

  • Нет связанных вопросов^_^