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

Mongodb 如何在NoSQL世界中实现数据库抽象/独立,mongodb,couchdb,database-migration,database,nosql,Mongodb,Couchdb,Database Migration,Database,Nosql,我们正在考虑在Java服务器端应用程序中使用MongoDB作为数据库。 在我之前的项目中,我们使用Hibernate抽象底层SQL数据库,这样我们就可以在不更改应用程序代码的情况下从MySQL切换到Postgres(例如)。(这是Hibernate除了通常的ORM特性之外为我们提供的一个+) 我为面向文档的NoSQL数据库搜索了一个类似的抽象层,结果没有结果 尽管MongoDB满足了我们今天的需求,但如果一个更好的面向文档的NoSQL DB在三年后出现,我们不想改变我们的应用程序代码以转移到新的

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

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

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

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

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

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

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

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


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

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

    相关的问题可能会给你一些启示:有一个用于java的Mongolink。我已经为MongoDB使用了PHPs原则(还有CouchDB alpha支持!)。另一方面,当您比较Doctrine的Mongo ODM和PHP Mongo驱动程序时,它们并没有那么不同。