Самый эффективный способ выполнить итерации через все хранилище данных и установить значение по умолчанию на измененную схему?

У меня есть существующая схема:

class Example (db.Model) :
 row_num = db.IntegerProperty(required=True)
 updated = db.IntegerProperty()
 ...
 ...

Я теперь обновил это к:

class Example (db.Model) :
 row_num = db.IntegerProperty(required=True)
 updated = db.IntegerProperty(default=0)
 ...
 ...

Однако существует более чем 2 миллиона объектов в Хранилище данных, которые не имеют обновления = 0 наборов по умолчанию.

Что самый легкий путь состоит в том, чтобы сделать это? Может это сделанным единственной командой от администраторского терминала?

1
задан demos 26 July 2010 в 04:31
поделиться

1 ответ

Вам нужно будет написать сценарий, который итерационно просматривает объекты, захватывая их (до 1000 за раз), обновляя значение их свойств, а затем сохраняя их обратно.

Нет, это не очень эффективно по сравнению со стандартной SQL-базой, делающей то же самое (где вы могли бы просто выдать один UPDATE), но BigTable (технология, лежащая в основе GAE Datastore) не является реляционной базой данных SQL - это совершенно другая архитектура, предназначенная для разных задач и не оптимизированная для обновления одного поля в миллионах строк одновременно - отсюда и синтаксис GQL без понятия UPDATE.

Редактировать:

Как любезно указал Дэвид в комментариях, Google недавно выпустил Mapper API, который можно использовать для решения этой задачи.

2
ответ дан 2 September 2019 в 22:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: