【问题标题】:GAE JDO - What's the correct way to model these relationships?GAE JDO - 建模这些关系的正确方法是什么?
【发布时间】:2012-06-02 14:05:02
【问题描述】:

在设置我的模型/实体时,我真的想打破我的 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;

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

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

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

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

【问题讨论】:

  • 没有单一的“正确”方式。有很多方法取决于应用程序需要执行什么操作以及它的主要操作类型是什么。我没有在任何地方都使用 Keys ...您使用该插件的 v2 得到相同的结果,但使用您也可以在 RDBMS 上使用的真实类,然后它们看起来是 O-O。也许定义您的操作,以及每个操作导致的数据库操作......然后人们可以了解您的情况

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


【解决方案1】:

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

关于实体键的类型的说明: https://developers.google.com/appengine/docs/java/datastore/jdo/creatinggettinganddeletingdata#Keys

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2010-12-14
    • 2022-05-23
    相关资源
    最近更新 更多