2013-05-21 34 views
3

我们正在研究在我们的Java服务器端应用程序中使用MongoDB作为我们的数据库。 在我之前的项目中,我们使用Hibernate来抽象底层SQL数据库,以便我们可以在不更改应用程序代码的情况下从MySQL切换到Postgres(例如)。 (这是Hibernate让我们与通常的ORM功能分开的+)。
我为面向文档的NoSQL数据库搜索了一个类似的抽象层,结果没有结果!如何在NoSQL世界中实现数据库抽象/独立性

虽然MongoDB的足够我们今天的要求,如果有更好的面向文档的NoSQL数据库来了3年下来行,我们不想改变我们的应用程序代码移动到新的数据库。

一种解决方案是我们自行编写抽象层(我们将如果我们留下没有其他选择)。

但是,如果人们从世界ORM来直接编码到NoSQL的DB接口我会感到很惊讶!数据库独立性在NoSQL世界中不是问题吗? 还是通过其他方式实现?

+0

这可能会给你一些见解的相关问题:http://stackoverflow.com/questions/2153195/hibernate-with-mongodb – Philipp

回答

6

因为有不被许多成熟的数据库无关的ORM层对NoSQL的原因是:

  1. 他们少了很多标准化。 SQL是ISO标准。当你坚持这个标准时,当你改变底层数据库时,你不得不做很少的修改。但是,面向文档的数据库都有自己的查询语言。

  2. 他们所有的工作本质上的区别。所有面向文档的数据库都有自己的哲学,优势,弱点和用例。在CouchDB上运行良好的存储策略可能完全不适合MongoDB。很难使用一个ORM映射器,它可以抽象到目前为止它可以在其API中找到一个符合所有这些怪癖的公分母。

  3. 他们仍然是一个相当新的技术。他们周围的软件生态系统仍需要几年的时间才能发展成类似于SQL的标准。

但要注意的是,虽然有在面向文档的数据库世界数据库不可知的ORM没有解决办法,有很多ORM包装特定数据库的。你没有提到你正在使用哪种编程语言,但是大多数主流语言都有解决方案。这比滚动你自己更喜欢。

+0

有Mongolink的Java。我使用MongoDB的PHP Doctrine(并且有CouchDB alpha支持!)。另一方面,当您将Doctrine的Mongo ODM与PHP Mongo驱动程序进行比较时,它们并不是可以使用的区别。 –

0

你可以使用Spring的数据,如果你与蒙戈工作,也应实现仓库的模式。即使像之前提到的那样,它不会像SQL框架那样不可知,但是如果你能够像mvc模式那样在一个好的层次上实现这个,那么对于你的解决方案我就足够了。