0

我正在研究需要在App Engine和其他Java Application Server上运行的项目。在App Engine中,我们使用数据存储,而在其他环境中,我们将使用传统的关系数据库(主要是MySQL)。App Engine数据存储和关系数据库的便携式JDO/JPA设计

我想知道是否有可能“有一个JDO/JPA模型兼容”。

如果可能的话。怎么样?具体来说,我们如何处理密钥? Datastore要求我们使用它自己的Key对象或使用“Key as encoded string”,我们如何将这些关键字移植到关系数据库中。

如果不是,最佳做法是什么?我们现在的想法是定义抽象的DAO,并有两套DAO实现。我相信最好的方式是使用Objectify进行关系数据库的数据存储和JPA。但这样我们就无法利用GWT RequestFactory(我们正在使用的另一种技术)。或者我们可以吗?

回答

0

我不知道GAE,但我知道JDO应该是数据存储独立的,因此您可以使用JDO注释映射您的类,并确保在您这样做时,您不使用任何基于RDBMS的扩展(即Datanucleus) ,我不确定是否有这样的扩展名。

对于钥匙,很明显你不应该使用GAE,但是我再也不知道它是否是必须的。

1

显然,JDO设计用于所有数据存储,无论是RDBMS,ODBMS,文档,基于映射,基于Web的,基于文档的,基于文件的......等等等等。是的,这种便携性是现实的。如果你不想要可移植性,你可以使用Objectify,但是你说你想要可移植性,所以这不是一个选项(所以不知道为什么你认为它是“最好的方式”)。您可以在所有数据存储中使用字符串作为PK。

+0

谢谢,但我如何将“编码密钥字符串”与“单独主键”移植到关系数据库中。就像GAE指南中的例子。 – xeranic 2013-03-21 21:56:28

+0

定义“端口”。如果GAE/Datastore中有一些数据,你打算如何处理它?手动复制?脱离并附加到RDBMS?别的东西?通过说便携式,你必须定义你的意思 – DataNucleus 2013-03-22 07:16:39

+0

“端口”,我的意思是相同的代码库适用于不同的存储技术。例如,我定义了一个JDO Entity,为了确保它可以在GAE/Datastore上工作,我必须使用“Key as encoded string”+“单独的字符串键”,因为Entity是其他的子项。但对于RDBMS,我可以重用实体吗?或者我必须用纯String键重新定义实体。 – xeranic 2013-03-22 19:00:08

0

我发现很难在关系数据库和分层数据库(这里是数据存储)上匹配相同的“持久性”模型,因为大多数时候它需要以不同的方式思考/构造数据。

例如,您可能需要复制跨许多实体的数据,以便能够使用数据存储在其上运行查询。如果您需要在Google App Engine和传统服务器(tomcat,JBOSS,WebSphere,无论是...)中使用Google Cloud SQL来保留我的数据模型同...

或者,如果你需要在这两种情况下的分层数据库,安装一个开源的一个与“传统”的服务器...

是我们首先谈论什么样的项目? :)