Самый эффективный способ перебрать все хранилище данных и установить значение по умолчанию для измененной схемы? - PullRequest
1 голос
/ 26 июля 2010

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

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 Ответ

2 голосов
/ 26 июля 2010

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

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

Edit:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...