Google App Engine 上顺序插入的事务冲突,为什么?
我在谷歌应用引擎上插入一组记录。为了避免超时错误,我选择批量插入。
但是当记录数量很大(比如1000条)时,我总是会遇到一个意外的情况:
实体组的事务冲突,键为
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
碰撞发生在你名为 'GroupModel' 的实体实例上,键名是 'root'。根据这个信息,我猜测你把所有东西都放在一个实体组里,以这个作为父级。根据文档 这里 的说明,所有有相同父级的实体都在同一个实体组里,而这个实体组的事务是串行处理的。因此,任何 对这个组里任何实体的同时更新都有可能会发生冲突。