如何避免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的默认更新模型(现在默认在所有新实例上)。

因此,放置一个实体然后查询它可能不会返回(最终的一致性),但是放入它然后获取它(通过一个键获取)将立即恢复(强一致性)。

解决方案是:

  1. 使用主从数据存储,或
  2. 如果可能,重写代码以使用get而不是查询。

此外,本地开发服务器仅用于测试,并且不像生产实例那样,因此您应该(最终)测试生产。

由于您在GAE上运行,因此最好的选择是使用其Memcache进行短期检索(您仍需要将内容放入DataStore中以实现持久性)。