实体保存与谷歌数据存储不一致
我有一段非常简单的代码,可以在其中向数据存储区添加一些实体。
public final class storageUtil {
private static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
public static Iterable<Entity> getAllEntities(String kind) {
Query q = new Query(kind);
PreparedQuery pq = datastore.prepare(q);
return pq.asIterable();
}
public static void putEntity(Entity entity) {
datastore.put(entity);
}
}
如果我调用 putEntity(myEntity),然后调用 getAllEntities(myKind),新放置的实体将仅出现在返回的列表中 3 次中的 2 次。
如果我在放置后立即调用 datastore.get(myKey) ,它将始终返回新放置的条目。
任何人都可以告诉我发生了什么事吗?
I have a very simple bit of code where I add some entities to the datastore.
public final class storageUtil {
private static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
public static Iterable<Entity> getAllEntities(String kind) {
Query q = new Query(kind);
PreparedQuery pq = datastore.prepare(q);
return pq.asIterable();
}
public static void putEntity(Entity entity) {
datastore.put(entity);
}
}
If I call putEntity(myEntity) and then getAllEntities(myKind), the newly put entity, will only show up in the returned list 2 out of 3 times.
If I call datastore.get(myKey) right after put, it will always return the newly put entry.
Can any one give me a clue as to what is going on?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您使用什么类型的数据存储?
这是一个高复制(默认)数据存储吗?
您是否针对真实服务器(而不是开发人员?)进行测试
如果是这样,由于“最终一致”的行为,这种行为在某种程度上是预期的。
您应该从使用高复制数据存储区
开始查找解决这个问题的方法
what kind of DataStore are you using?
is this a high replication (default) datastore?
are you testing against the real server (not the dev?)
if so, this behaviour is somewhat expected because of the "eventually consistent" behavior.
Using the High Replication Datastore
is where you should start looking for the ways around this
使用事务将您的实体放入数据存储区,您将在此处找到一个例子。
Put your entities into the datastore using transactions, here you will find an example.