我正在使用 Google Cloud Endpoints (Java) 作为 Android 应用程序的后端。后端数据存储到Datastore。
问题在于 Android 客户端通常无法从后端接收到正确的数据。重复请求后,最终收到正确的数据。
你能告诉我是什么导致了这个问题吗? Cloud Endpoints 库中是否有某种响应缓存?或者在 Datastore 中缓存?
我已阅读有关 Datastore 提供的最终一致性的信息,因此我尝试在更新实体后等待至少 10 秒,然后再进行下一个查询请求。够了吗?
非常感谢。
最佳答案
听起来您构建数据模型的方式与您希望使用数据模型的方式不一致。如果没有看到您的数据模型示例,我无法为您提供有关如何更改它的提示,但这里有一个可能对您有所帮助的简单示例。
假设我有一个“Post”实体和一个“CommentForPost”实体。用户可以为每个 Post 条目创建多个 CommentForPost 条目。从逻辑上讲,CommentForPost 是 Post 的子项,但如果您不使 Post 成为所有 CommentForPost 条目的祖先,则无法保证立即一致性。如果用户 A 创建评论然后查询它,他们可能不会立即看到该条目。
另一方面,如果您使 Post 实体成为所有 CommentForPost 条目的父实体,那么您将保证即时一致性,因为它们被保存为单个 EntityGroup。如果用户 A 创建一个条目并立即查询它(使用 Post 键作为祖先),那么他们肯定会得到准确的数据。
此处的限制是您每秒只能创建一个 CommentForPost 条目。这就是给予和接受的地方。如果您需要在短时间内进行大量更新,那么您将无法保证一致性(例如,100 个用户都在同时添加 CommentForPost 条目)。如果你想保证一致性,那么你不能在短时间内有很多更新。
有道理吗?
关于java - 带有 Android 的 Google Cloud Endpoints - 缓存响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25630493/