3

На основе документации для объективизации и 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(); 

Но след делает его похожим на каждый запрос и каждый объект нагрузка выполняется в следующей последовательности:

Trace

Что это дает?

ответ

2

Похоже, что это происходит только при выполнении кэширования из Memcache. С таким же кодом, который я вижу ожидаемое поведение асинхронного для datastore_v3.Get/Put/Удалить:

datastore_v3.Get datastore_v3.Put datastore_v3.Delete

Кажется, причина этого в том, что объективизировать не использует AsyncMemcacheService. Действительно, для этого на странице проекта есть open issue, и это также можно подтвердить, проверив источник и сделав grep -r AsyncMemcacheService.

Относительно последовательных вызовов datastore_v3.RunQuery, вызывает toy(). Load(). Type (...). Filter (...). Итерабельные() являются асинхронными, поскольку они return immediately, однако фактические запросы хранилища данных выполняются серийно как API-интерфейс Datastore App Engine doesn't expose an explicitly async API for queries.

 Смежные вопросы

  • Нет связанных вопросов^_^