3

基于文档物化和谷歌云存储,我希望在下面的代码查询和批量加载并行执行上:为什么我的查询和批处理不能并行执行?

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(); 

但跟踪使它看起来像每个查询和每个实体负荷执行顺序:

Trace

是怎么回事?

回答

2

看起来像这只发生在从Memcache缓存获取时发生。随着类似的代码,我看到datastore_v3.Get /认沽预期的异步行为/删除:

datastore_v3.Get datastore_v3.Put datastore_v3.Delete

看来这样做的原因是,客体不使用AsyncMemcacheService。事实上,在项目页面上有一个open issue,这也可以通过检查源代码并执行grep -r AsyncMemcacheService来确认。关于串行datastore_v3.RunQuery调用,调用ofy().load().type(...)。filter(...)。iterable()是'异步',因为它们是return immediately,但是实际的数据存储查询本身将作为App Engine数据存储API doesn't expose an explicitly async API for queries串行执行。

相关问题