【问题标题】:Synchronicity and the Datastore in Google App EngineGoogle App Engine 中的同步性和数据存储区
【发布时间】:2015-07-15 16:02:37
【问题描述】:

我的某些数据似乎存在一致性问题;我正在编写一个单元测试以查看某个模型是否已放置在数据存储中。除非我在存储函数返回之前休眠 5 秒,否则它在单元测试中失败。

我一直在阅读有关 gae 中的异步函数的内容,我想也许我需要一些类似于 Promise 的东西,以便函数在返回之前等待,直到数据被放入数据存储区。然而,所有关于 GAE 中函数异步版本的文档似乎都暗示它的非异步函数已经以这种方式表现得像 Promise。

像 put() 这样的函数返回是什么意思?这似乎并不意味着数据已被适当地存储。有没有办法等到数据存储完毕?

编辑:我的问题不仅仅是处理一致性问题,而是我不确定问题是否是一致性问题,而是想具体询问 put() 调用的返回与什么相关发生在 GAE 的幕后。

我认为这个问题与列出的问题相似,但仍然有用,因为它从不同的角度处理一致性问题。如果其他人需要查找此信息,但不能像我一样完全确定措辞,或者遵循与我类似的思路,他们也许可以通过这个问题获得信息。它也写得更明确,领域特定的术语更少。

话虽如此,我确实看到了最终目标信息内容方面的问题;我会理解如果它被删除。

【问题讨论】:

标签: google-app-engine asynchronous google-cloud-datastore


【解决方案1】:

https://cloud.google.com/appengine/docs/java/datastore/#Java_Datastore_writes_and_data_visibility

数据写入发生在两个阶段,提交和应用。 Commit 将事务记录到大多数副本,而 apply 并行执行两件事:1) 写入数据和 2) 写入索引。

您的单元测试查询可能正在具有过时数据版本的副本上执行。写操作在提交阶段后立即返回,但应用阶段异步发生。但是,祖先查询保证是最新的,因此请尝试通过获取对象键进行测试。

【讨论】:

  • 是的,问题最终出在一致性上。但是,我仍然觉得很奇怪,它只发生在这一个对象上。我已经进行了许多其他发布测试,然后在从数据存储区获取内容后立即进行,直到现在才遇到此问题。我不知道有什么区别。
  • 这在其他 s.o.问题。这个不用再回答了。
猜你喜欢
  • 2011-02-16
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多