gpt4 book ai didi

google-app-engine - 在 Google App Engine 中,如何在处理表单提交时实现最终一致性?

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:26 25 4
gpt4 key购买 nike

我注意到,为了实现最终一致性,我习惯使用的常见表单处理工作流(提交 -> 创建/更新记录 -> 重定向 -> 重新加载)不起作用。重定向后,新记录(可能)将无法显示。我应该如何处理表单以便在重新加载时显示更新?

我可以尝试使用强一致性,但作为 App Engine documentation注意,更新仅限于one update per second .

那么我如何处理一个提供即时用户反馈并最终保持一致的表单?

最佳答案

尝试重组您的代码,以便您可以通过按键获取(它始终为您提供最新数据)而不是进行查询。我知道这并不总是可行,但我会举一个最近对我有用的例子。

我有一个用户仪表板,用户可以在其中创建和删除“项目”。我的实体看起来像这样:

class User(ndb.Model)
...

class Item(ndb.Model)
user = ndb.KeyProperty(User, required=True)

过去,在响应用户仪表板的 GET 请求时,我会执行这样的查询。

items = Item.query(user=user.key)

这是一种糟糕的体验,因为用户会删除一个项目,并且在 POST/redirect/GET 之后,由于最终一致性,刚刚删除的项目将再次出现在仪表板中。

为了解决这个问题,我将我的用户实体更改为具有如下所示的项目列表:

class User(ndb.Model)
items = ndb.KeyProperty(repeated=True)
...

现在,当我显示仪表板时,我会这样做:

items = ndb.get_multi(user.items)

由于我现在通过 key 获取数据,因此数据始终是最新的。

这对我有用,因为用户不会有那么多项目。但是,如果用户可以拥有数千个项目,则由于实体大小限制,此方法将不起作用。

关于google-app-engine - 在 Google App Engine 中,如何在处理表单提交时实现最终一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com