在设置我的模型/实体时,我真的试图摆脱我的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,以便最小化一个查询的初始加载和一组并行获取。
答案 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