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

标签 python google-app-engine google-cloud-datastore

我在 Google App Engine 上插入一组记录。我分批插入它们以避免截止日期异常。

当有大量记录时(例如 1k),我总是收到意想不到的消息:

Transaction collision for entity group with key

datastore_types.Key.from_path(u'GroupModel', u'root', _app=u'streamtomail'). Retrying...

这种情况经常发生。

相反,在本地环境中它可以正常工作。

如果我使用的是顺序流程,而同时没有人在使用该系统,怎么可能会发生事务冲突?

这是我用于批处理的代码:

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

在 *process_chunk()* 中,我在数据库中执行了 50 次插入操作

最佳答案

冲突发生在键名为“root”的“GroupModel”实体实例上。基于此,我猜您是将所有内容都放在一个实体组中,并将其作为父级。如记录here ,每个具有相同父实体的实体都在同一个实体组中,事​​务被序列化到该实体组中。因此,对该组中任何实体的任何并发更新都可能与任何其他实体发生冲突。

关于python - Google App Engine 上顺序插入的事务冲突。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007650/

相关文章:

python - Numpy:计算具有不定数量变量的函数输出矩阵的优雅解决方案

python - 尝试从 google.appengine.api 导入 background_thread(如示例)失败并出现 ImportError

java - 下载 Google App Engine 数据库

python - 在 Python 中按元素总和对组合进行排序

python - 在 Pydev/Eclipse 的 python 程序中使用外部 C 库

python - GAE 中的 TaskTooLargeError 是什么?

python - BlobInfo 对象的 md5_hash 属性的用途是什么?

python - 这个 App Engine Ndb 语法是如何工作的?

python - 在 NDB 中跟踪未知类型的反向引用

python - 创建一长串随机值,没有重复