一尘不染

如何避免GoogleAppEngine数据存储延迟?

jsp

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


阅读 283

收藏
2020-06-10

共1个答案

一尘不染

是的,这称为“最终一致性”,是HRD的默认更新模型(现在在所有新实例上都是默认的)。

因此,放置一个实体然后对其进行查询可能无法返回(最终一致性),但是放置该实体然后(get通过密钥)获取它将立即使其恢复(强一致性)。

解决方案是:

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

此外,本地开发服务器仅用于测试,并且不能完全像生产实例一样工作,因此您应该始终(最终)对生产进行测试。

2020-06-10