写然后读取实体不从数据存储区获取实体

joh*_*999 3 google-app-engine google-cloud-datastore

我有以下问题.我现在使用的是低级Google数据存储区API而不是JDO,这样我就可以更好地查看我的代码中发生了什么.我正在向数据存储区写一个实体,然后不久使用Jetty和eclipse从数据存储区读取它.有时书面实体没有被阅读.如果在生产代码中发生这将是一个真正的问题.我使用的是2.0 RC2 API.

我已多次尝试过这种方法,有时会从数据存储区中检索实体,有时则不会.在提交写入事务后,我正在对数据存储区执行简单查询.

(如果我通过调试器运行代码,那么运行得足够慢以至于实体有可能在第二次传递时被回读).

任何有关此问题的帮助将不胜感激,

问候,

Dan*_*son 5

开发服务器与实时服务器上的High Replication数据存储区具有相同的一致性保证."全局"查询使用的索引仅保证最终与写入一致.要使用强一致性保证执行查询,必须使用"祖先"键将查询限制为实体组.

典型的技术是将特定于组中单个用户的数据分组,因此用户可以看到仅限于具有强一致性保证的用户组的查询的更改.另一种技术是使用更高级的客户端逻辑在提交更改后立即更新客户端的本地视图,以便用户在更新全局索引时立即看到UI中的更改.

查看有关查询事务的文档.

  • 请注意,虽然查询最终是一致的,但按键实体的可用性非常一致.因此,创建实体的请求可以将密钥返回到UI,并且可以直接使用它. (3认同)
  • 如果在更新查询之前UI不应该执行任何其他操作,则轮询可能是合理的.例如,客户端可以触发进行更改的请求,然后如果返回成功,它可以发出另一个请求,等待新事物显示在全局查询中(睡眠,查询,睡眠,查询).请注意另一个请求可能会删除您正在等待的数据的情况.虽然您可以假设查询索引在典型情况下在几秒钟内更新,但请务必针对非典型案例进行工程设计. (2认同)