【问题标题】:How to achieve database abstraction/independence in NoSQL worldNoSQL世界如何实现数据库抽象/独立
【发布时间】:2013-05-16 18:22:17
【问题描述】:

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

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

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

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

【问题讨论】:

标签: mongodb couchdb database-migration database nosql


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 有 java 的 Mongolink。我已经为 MongoDB 使用了 PHPs Doctrine(并且有 CouchDB alpha 支持!)。另一方面,当您将 Doctrine 的 Mongo ODM 与 PHP Mongo 驱动程序进行比较时,它们的使用并没有那么不同。
【解决方案2】:

如果你正在使用 mongo,你可以使用 spring 数据,你也应该实现存储库模式。即使以前面提到的那种方式,它也不会像允许这样做的 SQL 框架那样不可知,但是如果您能够以 mvc 模式的良好水平实现这一点,我认为这对于您的解决方案就足够了。

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2012-08-17
    • 2011-04-15
    • 2010-09-09
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多