簡體   English   中英

Google App Engine DataStore - 如何以有效的方式從 Java 中子表的鍵中獲取 select 父實體?

[英]Google App Engine DataStore - How to select parent entities from keys of a child table in Java in an efficient way?

我正在嘗試將演示文稿中的 Python 代碼轉換為 Java 在 App Engine 上構建可擴展的復雜應用程序

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

正如@Rick 已經指出的那樣,獲取比查詢更快、更便宜。 您只需要更改代碼的最后一部分。 代替:

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

做就是了:

Map<Key,Entity> messages = datastore.get(keys);

查看DatastoreService API https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService

DatastoreService.get(keys) 比使用鍵的查詢更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM