0

このPythonコードをプレゼンテーション「AppEngineでスケーラブルで複雑なアプリを構築する」からJavaに変換しようとしてい ます

これを行うためのGAEJのサポートはありますか?

indexes = db.GqlQuery( "SELECT __key__ FROM MessageIndex " "WHERE receivers = :1", me)
keys = [k.parent() for k in indexes] 
messages = db.get(keys)

Javaでの私の実装の下。これらの機能とパフォーマンスは同等ですか?多数のキーがある場合はどうなりますか?

Query query1 = new Query("MessageIndex");
query1.setKeysOnly();
query1.addFilter("receivers", FilterOperator.EQUAL, me);

PreparedQuery pq2 = datastore.prepare(query1);

Iterable<Entity> entities = pq2.asIterable();
HashSet<Key> keys = new HashSet<Key>();
    for (Entity en : entities)
       keys.add(en.getParent());

Query query2 = new Query("Messages");
query2.addFilter("__key__", FilterOperator.IN, keys);
4

2 に答える 2

1

@Rickがすでに述べたように、getはクエリよりもはるかに高速で安価です。コードの最後の部分を変更するだけです。それ以外の:

Query query2 = new Query("Messages");
query2.addFilter("__key__", FilterOperator.IN, keys);

ただ行う:

Map<Key,Entity> messages = datastore.get(keys);
于 2012-04-08T07:59:13.727 に答える
0

DatastoreServiceAPIをご覧くださいhttps://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService

DatastoreService.get(keys)は、キーを使用したクエリよりもはるかに効率的です。

于 2012-04-08T02:03:32.213 に答える