如何避免GoogleAppEngine DataStore延迟?

时间:2012-01-05 15:12:06

标签: java google-app-engine jsp servlets

我是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本地测试环境。

2 个答案:

答案 0 :(得分:8)

是的,这称为"eventual consistency",是HRD的默认更新模型(现在默认在所有新实例上)。

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

解决方案是:

  1. 使用主从数据存储,或
  2. 如果可能,请重写代码以使用get而不是查询。
  3. 此外,本地开发服务器仅用于测试,并且不像生产实例那样,因此您应该(最终)测试生产。

答案 1 :(得分:-1)

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