2013-11-15 2 views
4

Я использую NDB и Python в Google App Engine. Каков правильный способ обновления свойства для нескольких объектов с одинаковым значением? Эквивалент NDB:Google App Engine - NDB - установить значение свойства для нескольких записей

UPDATE notifications SET read = true WHERE user_id = 123.

Вариант использования у меня есть эти уведомления об отключении. И конкретный пользователь хочет установить все свои уведомления как прочитанные (потенциально 100). Я знаю, что я мог бы использовать get_async и put_async для извлечения каждого непрочитанного уведомления и установить его как прочитанное, но я беспокоюсь о задержке, которая создается путем сбора потенциально 100 сериализации/десериализации.

Любые советы очень полезны.

ответ

2

Вы можете вызвать функцию для каждого объекта с помощью метода Query map(). Для лучшей производительности не забывайте _async.

Но одним из наиболее полезных сервисов GAE является Task Queues, особенно в таких случаях. Если вы объединяете Query Cursors и deferred library, вы можете легко обрабатывать любое количество объектов.

+0

Task Queues - хорошая рекомендация, я ожидал, что мне, возможно, понадобится их использовать, если мне действительно понадобится собрать все объекты, чтобы обновить их свойство. Интересно о карте. Я не очень трансформирую (или сопоставляю) любые данные, IE меня не волнует результат. Мне просто нужно поместить данные. Все еще думает, что сопоставление соответствует законопроекту? –

+0

'map()' будет работать с небольшим количеством результатов, иначе вы хотите использовать пример отложенной библиотеки. Не забывайте, что вы можете объединить свои вещи. (вызовите 'ndb.put_multi()' vs 'model.put()' для каждого объекта) – Josh

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