我已经实现了两个服务器端 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
是。RoundNo
GameId 是一个“外键”,尽管 Datastore 在设计上没有注意到这一点。