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