Google App Engine 上顺序插入的事务冲突,为什么?

4 投票
1 回答
952 浏览
提问于 2025-04-16 06:00

我在谷歌应用引擎上插入一组记录。为了避免超时错误,我选择批量插入。

但是当记录数量很大(比如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'。根据这个信息,我猜测你把所有东西都放在一个实体组里,以这个作为父级。根据文档 这里 的说明,所有有相同父级的实体都在同一个实体组里,而这个实体组的事务是串行处理的。因此,任何 对这个组里任何实体的同时更新都有可能会发生冲突。

撰写回答