如何避免GoogleAppEngine DataStore延迟?
我是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 entities = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(20));
新记录不在列表中。 页面已更新(如显示的时间戳所示),但新记录或现有记录的修改仅在刷新页面后延迟几秒钟后显示。
如何避免这种情况? DataStore可能不适合这样的事情吗?
我正在使用GAE的Eclipse本地测试环境和Windows XP 64。
是的,这被称为“最终一致性”,并且是HRD的默认更新模型(现在默认在所有新实例上)。
因此,放置一个实体然后查询它可能不会返回(最终的一致性),但是放入它然后获取它(通过一个键获取)将立即恢复(强一致性)。
解决方案是:
- 使用主从数据存储,或
- 如果可能,重写代码以使用
get
而不是查询。
此外,本地开发服务器仅用于测试,并且不像生产实例那样,因此您应该(最终)测试生产。
由于您在GAE上运行,因此最好的选择是使用其Memcache进行短期检索(您仍需要将内容放入DataStore中以实现持久性)。