我是否需要在Google App Engine中使用JDO的亲子关系?

时间:2014-09-16 02:15:38

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

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

对于MySQL,我的模型只有一个用于引用相关模型ID的字段。但是,JDO使我能够轻松地参考实际模型本身。

I.E。:我认为我的MySql模型看起来像这样:

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

但JDO将是:

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

这种差异导致我决定使用第一种方法,并担心自己查询实际的Child对象,但是我想知道我是否只是在为自己做一些可能或不重要的事情。有没有具体的理由说我打算做的是错的?

1 个答案:

答案 0 :(得分:1)

我认为这些案例的App Engine JDO文档中的术语是将密钥存储在属性上形成“无主”关系,而做另一件事就是“拥有”关系。使用数据存储区,拥有的关系形成数据存储区实体组,就像将组中的所有实体存储为一条记录一样。

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

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

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