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

时间:2012-06-02 14:05:02

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

在设置我的模型/实体时,我真的试图摆脱我的RDBMS思维模式。我的激光专注于性能,所以我想做到这一点。我有三个不同的东西需要建模:

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

Person - 有一个字符串id,有一个名字

发布 - 一个人将为一个活动发帖。我需要保持发布帖子的人和发布帖子的事件之间的关联。

我的第一个想法是去像

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;

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

我完全实现了这种方法,但是一旦数据库开始填充来自我的beta测试人员的大量数据,加载主列表的操作就会慢慢爬行,因为有很多QUERY和GET正在发生。对于每个事件,我不得不为帖子做另一组查询/获取。对于每个帖子,我必须为与之关联的Person做出一堆其他查询/获取,依此类推。

我正在使用此视频作为我的主要参考: http://www.youtube.com/watch?v=AgaL6NGpkB8&list=WLB3249928DA0FA4AF&feature=mh_lolz

建立这些关系的最佳方法是什么?我正在考虑将所有内容扁平化为Event,以便最小化一个查询的初始加载和一组并行获取。

1 个答案:

答案 0 :(得分:1)

在这里没有发布我的完整更新模型,我过去常常使用的两个驱动因素是#34;是:使用正确的密钥类型,并使用列表属性将索引建模到数据中。以下是我发现的两个很好的参考资料:

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

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