适用于App Engine数据存储和关系数据库的便携式JDO / JPA设计

时间:2013-03-20 19:56:40

标签: google-app-engine jpa google-cloud-datastore relational-database jdo

我正在开发一个需要在App Engine和其他Java Application Server上运行的项目。在App Engine中我们使用数据存储,在其他环境中我们将使用传统的关系数据库(主要是MySQL)。

我想知道“有没有一个适合两者的JDO / JPA模型”。

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

对于钥匙,显然你不应该使用GAE,但是我不确定它是否是必须的。

答案 2 :(得分:0)

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

例如,您可能需要复制许多实体的数据,以便能够使用数据存储区对其执行查询。

关于你所说的关于你的项目的几个,如果你需要在Google App Engine和传统服务器(tomcat,JBOSS,WebSphere,等等......)中都有它,我会使用Google Cloud SQL来保存我的数据模型相同...

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

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