java - GAE JDO - 建模这些关系的正确方法是什么?

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

在设置我的模型/实体时,我真的试图打破我的 RDBMS 思维定势。我非常注重表现,所以我想把这件事做好。我需要建模三件不同的事情:

事件 - 发生在某个日期,有人员受邀参加,有与之关联的帖子

人 - 有一个字符串 ID,有一个名字

发帖 - 一个人将为某个 Activity 发帖。我需要保持发帖者与发帖所针对的事件之间的关联。

我的第一个想法是去类似的地方

class Event
    @PrimaryKey
    Long id;
    List<Key> personList;
    List<Key> postList;
    String name;

class Post
    @PrimaryKey
    Key id;
    String details;
    Key personWhoPosted;

class Person
    @PrimaryKey
    Key id;
    String fbId;
    String name;

应用程序的主查询加载与给定人员关联的所有事件。

我已经完全实现了这种方法,但是一旦数据库开始填充来 self 的 beta 测试人员的适量数据,加载主列表的操作就会变慢,因为发生了太多的查询和获取。对于每个事件,我都必须对帖子进行另一组查询/获取。对于每个帖子,我都必须对与其关联的人员进行一系列其他查询/获取,等等。

我使用这个视频作为我的主要引用: http://www.youtube.com/watch?v=AgaL6NGpkB8&list=WLB3249928DA0FA4AF&feature=mh_lolz

建立这些关系的最佳方式是什么?我正在考虑将所有内容扁平化到事件中,以便最大限度地减少一个查询和一组并行获取的初始负载。

最佳答案

没有在这里发布我的完整更新模型,我用来“使其正确”的两个驱动因素是:使用正确的键类型,以及使用列表属性将索引建模到数据中。以下是我为此找到的两个很好的引用:

澄清实体键的类型: https://developers.google.com/appengine/docs/java/datastore/jdo/creatinggettinganddeletingdata#Keys

列出属性作为检索数据的高效且高性能的方式: http://novyden.blogspot.com/2011/02/efficient-keyword-search-with-relation.html

关于java - GAE JDO - 建模这些关系的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862924/

相关文章:

java - 我们可以将 Atomikos 事务管理器与 Tomcat JDBC XA 连接池一起使用吗

python - 如何从列表中将五个元素组成一组?

google-app-engine - 数据存储区查询返回 null

java - 为什么浏览器上的 URI 会导致套接字运行三次

java - 显示标签、分组和空行

google-app-engine - Google Cloud Endpoint 和 Objectify

google-app-engine - 如何修复 Google-cloud-sdk 156.0.0 "There are too many files in your application for changes in all of them to be monitored."?

python - 写入和图像附件作为头像 : Is it possible?

python - 从刚刚创建的模型实例中检索数字 ID

java - 具有泛型的 Java 类层次结构中不兼容的空性约束