【问题标题】:Preventing db.get() from returning outdated records防止 db.get() 返回过时的记录
【发布时间】:2013-05-02 16:08:19
【问题描述】:

我正在开发一个应用程序,该应用程序让用户轮流将数据放入数据存储区,然后通过通道将 id 广播给用户。有时,当用户 get() 时,它会显示前一个用户的更改。我怎样才能防止这种情况?有没有办法让 put() 阻塞直到它被写入?

【问题讨论】:

  • 发布一些代码。你在使用交易吗?

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


【解决方案1】:

查看文档中的祖先查询。

https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

您现在看到的是最终一致的结果,尽管在这种情况下您需要高度一致的结果。

【讨论】:

    【解决方案2】:

    对数据存储的操作分两部分进行:提交阶段和应用阶段。

    您可以在https://developers.google.com/appengine/docs/python/datastore/overview#Datastore_Writes_and_Data_Visibility 阅读更多相关信息

    但简短的版本是数据存储操作在提交阶段之后返回,而不是在应用阶段之后。您可能已经告诉数据存储添加/更新/删除一个对象,但即使在特定操作返回后,该操作也需要几毫秒才能执行。

    您可能需要在代码中添加人为延迟。

    import time
    time.sleep(1)
    

    【讨论】:

    • 我不认为添加人为延迟是正确的解决方案。如果在这种情况下应用阶段花费了超过 1 秒,你会怎么做?
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多