我实现了两个服务器端HTTP端点,1)存储一些数据,2)处理它。方法1)通过App Engine Tasks调用方法2),因为它们是我不希望客户端等待的耗时的任务。该过程如下面的序列图所示。
现在我不时会遇到处理任务(在下面的序列图中名为 processSomething )在尝试处理时找不到数据 - 用黄色throw WtfException()
说明下面。是否可以使用最终一致性模型described here?
该文档说读取的强一致性,但写入的最终一致性。我不确定这与这个案件有什么关系。任何澄清都表示赞赏。
编辑我意识到我在这里问一个布尔问题,但我想我正在寻找一个答案,其中包含一些关于最终一致性的文档,特别是Google Datastore
编辑2:根据请求,这里有关于实际读/写操作的详细信息:
写操作:
entityManager.persist(hand);
entityManager.close()
我正在使用JPA来保持数据。对象'hand'从客户端收到,之前未存储在数据库中,因此将分配新的密钥Id
。
读取操作:
SELECT p FROM Hand p WHERE p.GameId = :gid AND p.RoundNo = :rno
GameId
和RoundNo
都不是主键。 GameId是一个“外键”,尽管数据存储区在设计上没有注意到它。
答案 0 :(得分:2)
如果您展示了实际代码,显示了如何保存实体以及如何检索它,这会有所帮助,但假设id
是实际的数据存储区ID,是Key的一部分,而您的{{1} } load
使用的是{而不是get
在其他属性上,那么最终一致性不是您的问题。
(关于此的文件是further down the page you linked。)