7

将新实体发布到数据存储后,我将页面重定向到一个新 URL,该 URL 列出了该组中的所有实体。当我重定向时,页面显示陈旧的结果,我必须重新加载才能查看数据存储中的新实体列表。

我知道最终的一致性。这就是我看到陈旧结果的原因吗?

例如,

我的数据存储区有一个用户 - 用户 1 然后,在一个表单中,我添加了一个用户 - 用户 2 这个实体被放入数据存储区,然后我重定向到一个新的 url,即“get/users”

在重定向上,我只看到用户 1,但如果我刷新页面,我会看到用户 2。我可以保证或帮助防止过时的结果吗?

4

1 回答 1

7

是的,正如您所说,这是由“最终一致性”引起的。

我有几个建议:

  1. 使用 AJAX。使用重定向会导致不必要的额外工作:
    • 额外的(不必要的)HTTP 请求(网络带宽、延迟、服务器资源、移动数据成本等)
    • 一个额外的(不必要的)数据存储查询以确认您已经知道的内容
  2. 使用 JavaScript 更新在 XMLHttpRequest 成功时向用户显示的用户列表;不要执行另一个查询。
  3. 如果你真的需要用户对象,你可以从数据存储中按键获取(不是查询),这将是高度一致的。
  4. 如果你真的想要一个强一致的查询,使用一个祖先查询,它是强一致的。在成功响应中将该查询的结果发回并相应地更新您的 UI。
    • 注意:使用祖先查询需要一个实体组,限制为 ~ 1 写入/秒;例如,此速率足以记录博客文章的评论,但可能不足以在您的应用程序中创建新用户
于 2013-04-02T22:48:26.210 回答