如何在NoSQL世界中实现数据库抽象/独立性

时间:2013-05-21 20:49:11

标签: mongodb couchdb database-migration database nosql

我们正在考虑在我们的Java服务器端应用程序中使用MongoDB作为我们的数据库。 在我之前的项目中,我们使用Hibernate抽象底层SQL数据库,以便我们可以在不更改应用程序代码的情况下从MySQL切换到Postgres(例如)。 (这是Hibernate给我们提供的除了通常的ORM功能之外的一个+)。
我为面向文档的NoSQL数据库搜索了一个类似的抽象层,结果没有结果!

虽然MongoDB满足了我们今天的要求,但如果一个更好的面向文档的NoSQL DB出现3年后,我们不想更改我们的应用程序代码以转移到新的数据库。

我们有一个解决方案是自己编写抽象层(如果我们没有其他选项,我们就会这样做。)

但是如果来自ORM世界的人直接编码到NoSQL数据库接口上,我会感到惊讶吗?数据库独立性在NoSQL世界中不是一个问题吗? 或者是通过其他方式实现的?

2 个答案:

答案 0 :(得分:6)

NoSQL没有很多与数据库无关的成熟ORM层的原因是:

  1. 它们的标准化程度要低得多。 SQL是ISO标准。当您坚持使用该标准时,您必须在更改基础数据库时进行少量修改。但是,面向文档的数据库都有自己的查询语言。

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

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

  4. 但请注意,虽然在面向文档的数据库世界中没有与数据库无关的ORM的解决方案,但是有大量的ORM包装器用于特定的数据库。您没有提到您正在使用的编程语言,但是大多数主流语言都有解决方案。这绝对比滚动你自己更受欢迎。

答案 1 :(得分:0)

如果你正在使用mongo,你可以使用spring数据,你也应该实现存储库模式。即使按照前面提到的那种方式,它也不会像允许这样的SQL框架那样不可知,但是如果你能够在mvc模式中实现这个目标,那么我认为这对你的解决方案来说已经足够了。