java - Google App Engine DataStore - 如何以有效的方式从 Java 子表的键中选择父实体?

标签 java google-app-engine google-cloud-datastore

我正在尝试将演示文稿中的 Python 代码翻译为 Java Building Scalable, Complex Apps on 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 实现的。这些功能和性能等效吗?如果我有大量 key 会发生什么?

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

关于java - Google App Engine DataStore - 如何以有效的方式从 Java 子表的键中选择父实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059631/

相关文章:

html - 找不到处理程序引用的错误静态文件 : dist/api/landing for Angular App deployed on Google Cloud

python - Google App Engine 应用到私有(private)云

Java 访问数据库连接

java - 如何使用服务名称而不是 SID 连接到 Oracle

google-app-engine - 使用 Objectify 进行祖先查询不返回结果

google-app-engine - 谷歌数据存储全局连接

java - 在 App Engine 中存储大文本

java - 如何手动对 Swagger UI 上显示的端点进行排序?

Java JSON 对象扁平化

eclipse - 将现有的 Google App Engine 模块导入 Android Studio