我有一个应用程序,它通过App Engine使用Cloud Datastore来保存数据。
当对象放在数据库上时,我需要刷新客户端。为此,在将对象放入数据库之后,服务器向客户端发送同步消息。客户端读取同步消息并对服务器进行查询。服务器执行Query以返回新结果。
问题是,当Query完成时,put对象不会出现在查询结果中。阅读文档,我想原因是里程碑B上没有放置,见https://cloud.google.com/appengine/articles/transaction_isolation,因为出现了另一个后来的调用对象。
我怎么知道什么时候到达"里程碑B"?如果不可能知道它,我该怎么做这个逻辑(放完后刷新客户端)?
答案 0 :(得分:1)
您可以使用祖先查询确保最新的查询结果,或者,如果您知道需要检索的特定实体的密钥,则可以通过密钥而不是使用查询来获取它。
This page讨论了使用祖先查询的权衡。
答案 1 :(得分:0)
数据未出现在查询结果中,因为索引尚未更新。 在索引更新之前有一些延迟,遗憾的是,无法知道何时会发生这种情况。
处理这种情况的唯一方法是使用实体的密钥,这是唯一保证在存储实体后立即更新的索引。
https://cloud.google.com/appengine/docs/java/datastore/entities