我是App Engine的新手,并编写了一个示例App。如果我创建或更新实体:
Entity record = new Entity(...);
... set properties
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(record);
然后重定向到显示新实体或更新实体的页面
resp.sendRedirect("MainPage.jsp");
执行以下代码
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
Query query = new Query(...).addSort(..., Query.SortDirection.DESCENDING);
List<Entity> entities = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(20));
新记录不在列表中。页面已更新(如显示的时间戳所示),但新记录或现有记录的修改仅在刷新页面后延迟几秒钟后显示。
如何避免这种情况? DataStore可能不适合这样的事情吗?
我正在使用GAE和Windows XP 64的Eclipse本地测试环境。
答案 0 :(得分:8)
是的,这称为"eventual consistency",是HRD的默认更新模型(现在默认在所有新实例上)。
因此,放置一个实体然后查询它可能不会返回(最终的一致性),但放置它然后通过一个键获取它(get
)将立即恢复(强一致性)。 / p>
解决方案是:
get
而不是查询。此外,本地开发服务器仅用于测试,并且不像生产实例那样,因此您应该(最终)测试生产。
答案 1 :(得分:-1)
由于您在GAE上运行,因此最好的选择是使用其Memcache进行短期检索(您仍需要将内容放入DataStore中以实现持久性)。