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 からキャッシュされた get を実行する場合にのみ発生するようです。同様のコードで、datastore_v3.Get/Put/Delete の予期される非同期動作を確認します。

datastore_v3.Get datastore_v3.Put datastore_v3.Delete

これは、Objectify が AsyncMemcacheService を使用していないことが原因のようです。実際、プロジェクト ページにはこれに関する未解決の問題があり、これはソースをチェックアウトしてgrep -r AsyncMemcacheService.

シリアル datastore_v3.RunQuery 呼び出しに関して、 ofy().load().type(...).filter(...).iterable() への呼び出しは、すぐに返されるという点で「非同期」ですが、実際のデータストア クエリはApp Engine Datastore APIはクエリ用の明示的な非同期 API を公開していないため、それら自体は順次実行されます。

于 2016-08-13T21:03:48.897 に答える