2013-05-21 31 views
3

我們正在研究在我們的Java服務器端應用程序中使用MongoDB作爲我們的數據庫。 在我之前的項目中,我們使用Hibernate來抽象底層SQL數據庫,以便我們可以在不更改應用程序代碼的情況下從MySQL切換到Postgres(例如)。 (這是Hibernate讓我們與通常的ORM功能分開的+)。
我爲面向文檔的NoSQL數據庫搜索了一個類似的抽象層,結果沒有結果!如何在NoSQL世界中實現數據庫抽象/獨立性

雖然MongoDB的足夠我們今天的要求,如果有更好的面向文檔的NoSQL數據庫來了3年下來行,我們不想改變我們的應用程序代碼移動到新的數據庫。

一種解決方案是我們自行編寫抽象層(我們將如果我們留下沒有其他選擇)。

但是,如果人們從世界ORM來直接編碼到NoSQL的DB接口我會感到很驚訝!數據庫獨立性在NoSQL世界中不是問題嗎? 還是通過其他方式實現?

+0

這可能會給你一些見解的相關問題:http://stackoverflow.com/questions/2153195/hibernate-with-mongodb – Philipp

回答

6

因爲有不被許多成熟的數據庫無關的ORM層對NoSQL的原因是:

  1. 他們少了很多標準化。 SQL是ISO標準。當你堅持這個標準時,當你改變底層數據庫時,你不得不做很少的修改。但是,面向文檔的數據庫都有自己的查詢語言。

  2. 他們所有的工作本質上的區別。所有面向文檔的數據庫都有自己的哲學,優勢,弱點和用例。在CouchDB上運行良好的存儲策略可能完全不適合MongoDB。很難使用一個ORM映射器,它可以抽象到目前爲止它可以在其API中找到一個符合所有這些怪癖的公分母。

  3. 他們仍然是一個相當新的技術。他們周圍的軟件生態系統仍需要幾年的時間才能發展成類似於SQL的標準。

但要注意的是,雖然有在面向文檔的數據庫世界數據庫不可知的ORM沒有解決辦法,有很多ORM包裝特定數據庫的。你沒有提到你正在使用哪種編程語言,但是大多數主流語言都有解決方案。這比滾動你自己更喜歡。

+0

有Mongolink的Java。我使用MongoDB的PHP Doctrine(並且有CouchDB alpha支持!)。另一方面,當您將Doctrine的Mongo ODM與PHP Mongo驅動程序進行比較時,它們並不是可以使用的區別。 –

0

你可以使用Spring的數據,如果你與蒙戈工作,也應實現倉庫的模式。即使像之前提到的那樣,它不會像SQL框架那樣不可知,但是如果你能夠像mvc模式那樣在一個好的層次上實現這個,那麼對於你的解決方案我就足夠了。