问题描述
在我的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以避免事务超时。