Столкновение транзакций для последовательной вставки в Google App Engine. Зачем? - PullRequest
4 голосов
/ 24 октября 2010

Я вставляю набор записей в Google App Engine.Я вставляю их в пакет, чтобы избежать исключений по крайнему сроку.

Когда существует большое количество записей (например, 1k), я всегда получаю неожиданное:

Коллизия транзакций для группы сущностей сkey

datastore_types.Key.from_path (u'GroupModel ', u'root', _app = u'streamtomail ').Повторная попытка ...

Такая ситуация возникает всегда.

Вместо этого в локальной среде она работает без проблем.

Как возможно возникновение коллизий транзакций, если яя использую последовательный процесс, и никто пока что не использует систему?

Вот код, который я использую для пакетирования:

def deferred_worker():
 if next_chunk():
   process_chunk()
   deferred.defer(deferred_worker)

где в * process_chunk () * Я делаю50 вставок в базе данных

1 Ответ

2 голосов
/ 26 октября 2010

Столкновение происходит на экземпляре вашей сущности 'GroupModel' с именем ключа 'root'.Исходя из этого, я предполагаю, что вы помещаете все в одну группу сущностей с этим в качестве родителя.Как задокументировано здесь , каждый объект с одним и тем же родителем находится в одной и той же группе объектов, которой сериализуются транзакции.Таким образом, любое одновременное обновление любого объекта в этой группе потенциально может конфликтовать с любым другим.

...