偶尔地数据存储条目未更新

问题描述

在我的python应用程序中,通过Web API调用函数正在向NDB数据存储表sd添加新条目。然后,它将更新表cmpgn中的当前条目,以将引用附加到sd中的新条目。代码很简单:

sd = SendData(data=json_data)
sd.put()

cmpgn.send_data.append(sd.key)
cmpgn.put()

但是,对于sd中大约50个条目中的1个,缺少cmpgn中的引用。我在日志中没有发现任何错误。这种行为可能是什么原因?

是否有可能在最后一个函数调用完成之前再次为新的sd条目调用函数

此应用仍在Python 2.7中运行。这可能是个问题吗?迁移到Python 3.x会改变这种行为吗?

还有其他建议吗? Cloud Platform中是否有用于分析行为的工具?

解决方法

根据您的情况,有两个API调用来更新条目Only the first transaction to commit its changes can succeed; all the others will fail to commit。该交易有助于锁定。因此,您无需自己应用锁。但是,即使正在实施事务,backoff retry仍需要减少意外的DB操作失败。如果I / O很高,则可能需要考虑Transcation task queue以避免事务超时。