【问题标题】:Do I need to be utilizing the parent-child relationships of JDO in Google App Engine?我需要在 Google App Engine 中使用 JDO 的父子关系吗?
【发布时间】:2014-09-16 02:15:38
【问题描述】:

我希望我的应用程序尽可能可移植,以便如果 Google Cloud Datastore 不是最佳解决方案,那么我可以快速轻松地切换到 MySQL,但互联网想要的方式存在一些固有差异我来为这两种范式定义我的模型。

对于 MySQL,我的模型将仅包含一个用于引用相关模型 ID 的字段。但是,JDO 让我能够轻松地引用实际模型本身。

IE:我认为我的 MySql 模型看起来像这样:

class Parent{
    private String key;
    private String childId;
}

但 JDO 会是:

class Parent{
    private String key;
    private Child child;
}

这种差异导致我决定使用第一种方法并担心自己查询实际的 Child 对象,但我想知道我是否只是为了一些可能或可能不重要的事情而让自己变得困难.我打算做的事情是否有错误的具体原因?

【问题讨论】:

    标签: mysql google-app-engine jdo google-cloud-datastore


    【解决方案1】:

    我相信 App Engine JDO 文档中针对这些情况的术语是,将密钥存储在属性上会形成“无主”关系,而做另一件事则是“有主”关系。使用 Datastore,拥有关系形成一个数据存储实体组,这就像将组中的所有实体存储为一条记录一样。

    我不喜欢在没有明确希望能够以事务方式对组的所有成员采取行动的情况下形成实体组,因为分组会影响并发更新。如果我只是关联两个数据对象,以便我可以遵循从一个到另一个的引用,并且我不需要事务性,我宁愿花时间关注对第二个实体的引用,而不是创建一个不必要的实体组并希望一切顺利。换句话说,除非我知道我需要事务性,否则我更喜欢无主关系(存储密钥)而不是拥有关系。

    这个概念在关系数据库中没有等效的。 [感谢 Billy Frost 的更正。]所以你可以做任何一个并保持可移植性。

    https://developers.google.com/appengine/docs/java/datastore/jdo/relationships

    【讨论】:

    • RDBMS 没有“拥有”/“无主”关系; "owned"/"unowned" 只是一个 GAE 概念。使用 RDBMS(以及几乎所有其他数据存储),您有或没有关系
    • 感谢您的回答。这有助于我理解更多,让我觉得我以后不会因为我这样做的方式而被数据存储之神击倒。
    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多