我试图用python实现与ndb的强一致性。 而且看起来像我缺少一些东西,因为我的阅读表现得像他们不一致。Ndb强一致性和频繁写入
查询是:
links = Link.query(ancestor=lead_key).filter(Link.last_status ==
None).fetch(keys_only=True)
if links:
do_action()
的关键结构是:
Lead root (generic key) -> Lead -> Website (one per lead) -> Link
我有使用TaskQueue中同时执行多任务,这个查询在每次任务结束时进行。有时我在更新last_status
字段时收到“太多争用”异常,但我使用重试来处理它。它能破坏一致性吗?
预期的行为是当last_status
等于None
时没有链接而调用do_action()
。实际行为不一致:有时do_action()
被调用两次,有时根本不会调用。
感谢您的回答!如果我经常更新实体会发生什么情况? 'link.put()'需要更多时间,因为它等待一段时间来保持每秒写入1次的频率?或者它立即返回并且随后的祖先查询可能会返回过期的结果? – subcoder
我的回忆是,如果你超过了费率限制,你会得到一个例外,但我不知道另一个确切的例外。不过,这是一个简单的尝试。正如Dan所说,这是你需要在部署的应用程序中测试的东西。 –