GAE Python NDB .put在开发时不同步(但在生产中工作)?

时间:2015-04-24 23:55:31

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

以下内容应创建Counter模型并使用(延迟)任务将计数器增加到10.访问'/'应创建一个Counter对象{{1} }。这在生产中发生。在开发(localhost)中,创建了多个count = 10个对象,其中最大的是10:

enter image description here

我怀疑这是因为Counter在开发时不是同步的(但似乎总是在生产中)。有没有办法使它们同步?

以下代码段:

put

我有一个git repo可以重现这种行为here。您可以找到进行上次更改的提交here

2 个答案:

答案 0 :(得分:7)

生产'同步性'很明显,但不保证(在您的方法中)。总是会发生在查询中找不到新创建的计数器,因此您的代码可能会创建多个计数器。

Balancing Strong and Eventual Consistency with Google Cloud Datastore文章中的详细信息。

答案 1 :(得分:2)

您应该按键检索您的计数器,然后您将避免最终的一致性。特别是你似乎只创建一个Counter对象。如果您有大量并发写入,这不会扩展。

阅读与其他答案相关联的文章也是值得的。你的方法存在很多问题。

我觉得你甚至会考虑使用查询来实现这个功能。通过指定密钥,您还可以保证单个计数器实体。