3

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

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

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

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

4

2 回答 2

6

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

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

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

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

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

于 2013-05-21T21:10:15.120 回答
0

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

于 2016-05-18T16:47:00.320 回答