如何避免GoogleAppEngine DataStore延迟?

RED*_*AIR 2 java google-app-engine jsp servlets

我是App Engine的新手并编写了一个示例App.如果我创建或更新实体:

Entity record = new Entity(...);
... set properties
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(record);
Run Code Online (Sandbox Code Playgroud)

然后重定向到显示新的或更新的实体的页面

resp.sendRedirect("MainPage.jsp");
Run Code Online (Sandbox Code Playgroud)

执行以下代码的位置

DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();   
Query query = new Query(...).addSort(..., Query.SortDirection.DESCENDING); 
List<Entity> entities = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(20));
Run Code Online (Sandbox Code Playgroud)

新记录不在列表中.页面已更新(如显示的时间戳所示),但新记录或现有记录的修改仅在刷新页面后延迟几秒钟后显示.

如何避免这种情况?DataStore可能不适合这样的事情吗?

我正在使用GAE和Windows XP 64的Eclipse本地测试环境.

Pet*_*ego 8

是的,这称为"最终一致性",是HRD的默认更新模型(现在是所有新实例的默认值).

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

解决方案是:

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

此外,本地开发服务器仅用于测试,并且与生产实例的行为不完全相同,因此您应始终(最终)测试生产.