0

我已经实现了两个服务器端 HTTP 端点,它们 1)存储一些数据并 2)处理它。方法 1) 通过App Engine 任务调用方法 2),因为它们是我不希望客户端等待的耗时任务。该过程在下面的序列图中进行了说明。

现在我不时遇到处理任务(在下面的序列图中名为processSomething)在尝试处理时找不到数据 - 如下图黄色throw WtfException()所示。这可以用这里描述的最终一致性模型来解释吗?

该文档说读取的强一致性,写入的最终一致性。我不确定这与此案有关的确切含义。任何澄清表示赞赏。

在此处输入图像描述

编辑:我意识到我在这里问的是一个布尔问题,但我想我正在寻找一个答案,其中包含一些关于最终一致性通常是什么的文档,特别是在 Google Datastore 上

编辑 2:根据要求,这里是有关实际读/写操作的详细信息:

写操作:

entityManager.persist(hand); 
entityManager.close() 

我正在使用 JPA 进行数据持久性。对象“手”是从客户端收到的,并且之前没有存储在数据库中,因此Id将分配一个新密钥。

读取操作

SELECT p FROM Hand p WHERE p.GameId = :gid AND p.RoundNo = :rno

主键也不GameId是。RoundNoGameId 是一个“外键”,尽管 Datastore 在设计上没有注意到这一点。

4

1 回答 1

2

如果您显示实际代码,显示您如何保存实体以及如何检索它,这将有所帮助,但假设这id是一个实际的数据存储 ID,是 Key 的一部分,并且您使用的loadgetid 而不是query其他属性那么最终一致性不是你的问题。

(这方面的文档在您链接的页面下方。)

于 2013-04-18T20:16:55.857 回答