我是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));
新记录不在列表中。该页面已更新(如显示的时间戳所示),但是新记录或对现有记录的修改仅在刷新页面时延迟几秒钟后才会显示。
如何避免这种情况?数据存储可能不适合这种情况吗?
我正在Windows XP 64上使用GAE的Eclipse本地测试环境。
是的,这称为“最终一致性”,是HRD的默认更新模型(现在在所有新实例上都是默认的)。
因此,放置一个实体然后对其进行查询可能无法返回(最终一致性),但是放置该实体然后(get通过密钥)获取它将立即使其恢复(强一致性)。
get
解决方案是:
此外,本地开发服务器仅用于测试,并且不能完全像生产实例一样工作,因此您应该始终(最终)对生产进行测试。