3

根据 Objectify 和 Google Cloud Datastore 的文档,我希望以下代码中的查询和批处理加载并行执行:

List<Iterable<Key<MyType>>> results = new ArrayList<>();
for (...) {
  results.add(ofy().load()
      .type(MyType.class)
      .filter(...)
      .keys()
      .iterable());
}
...
Iterable<MyType> keys = ...;
Collection<MyType> c = ofy().load().keys(keys).values();

但是跟踪使它看起来像每个查询和每个实体加载按顺序执行:

痕迹

是什么赋予了?

4

1 回答 1

2

看起来这只发生在从 Memcache 进行缓存获取时。使用类似的代码,我看到了 datastore_v3.Get/Put/Delete 的预期异步行为:

datastore_v3.Get datastore_v3.Put datastore_v3.删除

原因似乎是 Objectify 不使用 AsyncMemcacheService。事实上,在项目页面上有一个未解决的问题,这也可以通过查看源代码并执行grep -r AsyncMemcacheService.

关于串行 datastore_v3.RunQuery 调用,对 ofy().load().type(...).filter(...).iterable() 的调用是“异步”的,因为它们会立即返回,但实际的 Datastore 查询由于 App Engine Datastore API没有为查询公开显式异步 API,因此它们本身会被串行执行。

于 2016-08-13T21:03:48.897 回答