2012-04-08 11 views
0

私はGoogle App Engineデータストア - 効率的にJavaの子テーブルのキーから親エンティティを選択する方法

、プレゼンテーション Building Scalable, Complex Apps on App EngineからJavaへこのPythonコードを変換しようとしていますが、これを行うに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); 
+0

あなたが客観を使用して検討していますか? JDOやJPAよりもはるかに苦痛が少ない。 –

+0

上記のスニペットをobjectifyと同等のものは何でしょうか? –

+0

私はJavaを自分で使っていないので、実際には言えませんでしたが、Objectifyのドキュメントにはたくさんの例があります。 –

答えて

1

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

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

だけで実行します。

Map<Key,Entity> messages = datastore.get(keys); 
関連する問題