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

标签 mongodb couchdb database-migration database nosql

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

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

一个解决方案是我们自己编写抽象层(如果我们别无选择,我们会这样做)。

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

最佳答案

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

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

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

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

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

关于mongodb - 如何在 NoSQL 世界中实现数据库抽象/独立,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679241/

相关文章:

regex - 针对 ObjectId 使用正则表达式查询 MongoDB

php - 在 Apache CouchDB 中按键搜索

http - 如何最大化 HTTP 网络吞吐量?

CouchDB - Map Reduce 类似于 SQL Group by

java - 液基 : How to use <whereparams> inside an <update>?

mongodb - mongodb 中的 transparent_hugepage/defrag 警告

mongodb - 相当于 JavaScript shell 的 Object.bsonsize(doc) 的 Java 驱动程序?

java - Morphia 聚合函数

mysql - 如何将数据从MySql加载到MS SQL Server数据库?

git - 使用 Git 时如何处理 Doctrine Migrations?