1

我正在使用Google Cloud Endpoints(Java)作为Android应用程序的后端。后端数据存储到数据存储区Google Cloud Endpoints with Android - 缓存响应?

问题是Android客户端通常不会从后端接收到正确的数据。重复请求后,最终收到正确的数据。

你能告诉我什么可能导致这个问题?云终端库中是否存在某种响应缓存?或者在数据存储中缓存?

我看了一下最终一致性通过数据存储提供,所以我试图用查询下一个请求之前更新实体后等待至少10秒钟。够了吗?

非常感谢。如果你总是需要一个数据存储查询的结果是一致的,你需要在文章中使用祖先查询按示例代码:

Query query = new Query("Greeting", guestbookKey).setAncestor(guestbookKey); 

回答

1

听起来好像您构建数据模型的方式不是符合您希望使用数据模型的方式。没有看到你的数据模型的例子,我不能给你提示如何改变它,但这是一个简单的例子,可以帮助你。

假设我有一个“Post”实体和一个“CommentForPost”实体。用户可以为每个Post条目创建多个CommentForPost条目。从逻辑上讲,CommentForPost是Post的子级,但如果您不将Post作为所有CommentForPost条目的祖先,则不保证立即一致性。如果用户A创建评论然后查询它们,他们可能不会马上看到该条目。另一方面,如果您将Post实体作为所有CommentForPost条目的父项,那么您将保证立即一致性,因为它们被保存为单个EntityGroup。如果用户A创建一个条目并立即进行查询(使用Post键作为祖先),那么他们肯定会得到准确的数据。

这里的限制是您只能够每秒创建一个CommentForPost条目。这是给予和承担的地方。如果短时间内需要大量更新,则无法保证一致性(例如100个用户同时添加了CommentForPost条目)。如果你想保证一致性,那么你不能在很短的时间内有很多更新。

有意义吗?

+0

非常感谢!我想我没有给予文档足够的关注。它现在确实有意义。你知道我是否可以更改现有数据的实体父项? – 2014-09-04 08:34:02

+0

不。这种关系是永久的。 – xsee 2014-09-04 14:26:33

2
直接从该文档在 Structuring Data for Strong Consistency

不能依靠延迟来获得一致性,因为它取决于跨数据中心的复制,并且所花费的时间永远也不会一致:)

+0

但是,如何在HTTP请求之间携带密钥? – 2014-09-03 08:16:21

相关问题