2010-05-20 84 views
2

只要認爲具有ORM的關係數據庫在很多方面都非常類似於面向對象的數據庫。我的經驗完全在於RDMS帶有一點ORM,所以在我看來,面向對象的數據庫非常相似,但沒有我無法確定的經驗。面向對象的數據庫比使用ORM的關係數據庫更好嗎?

如果你已經使用了面向對象的數據庫和ORM,你能比較它們嗎?與RBMS + ORM相比,哪些與面向對象數據庫相關的弱點?

+1

這個問題非常廣泛和主觀。需要成爲社區wiki。 – 2010-05-20 14:56:32

回答

5

與RBMS + ORM相比,面向對象數據庫相關的弱點是什麼?

最大的弱點是缺乏標準化的:沒有標準的API,沒有標準查詢語言(的OQL嘗試是一個大失敗),因此缺乏可移植性和互操作工具(備份,歸檔,遷移等)。涉及到數據時,你不想這樣做。

這解釋了爲什麼OODBMS是從採用的角度來看是失敗的原因,以及爲什麼RDBMS會留在一段時間,而不考慮NoSQL的運動(我認爲OODBMS供應商認爲NoSQL運動是一個機會,在對其產品進行一些品牌改造後回來)。

1

克里斯日期一致:

......「對象/關係」系統將 什麼都不多也小於真正的 關係系統......一個適當的 對象/關係系統僅僅是一個 正確的關係系統 支持...這只是意味着它是一個 正確的關係系統,沒有更多和 不會少。

SQL和關係理論:如何編寫準確的SQL代碼,第36頁

1

我的經驗:

  • RDBMS:
    • 坦率地說,我不喜歡與工作SQL,這是一種15年前的語言,但現實情況是,如果你想要任何可用的東西,比如批量插入(LINQ-to-Entity ORM框架不支持批量插入,所以需要30秒的時間ds代表20,000個記錄插入,而SQL中的批量插入則爲500ms)。您最終不得不使用ADO.NET進行數據庫插入。
    • RDBMS比對象數據庫有一些優點,即數據獨立於調用應用程序(但是,這也是一個弱點,因爲映射層使得一切變得更慢,更復雜和更脆弱)。
    • 底線:用了LINQ-to-Entity ORM框架和Microsoft SQL Server 2008 R2 6周。合理陡峭的學習曲線。
  • 對象數據庫:試過對象數據庫,即,自由的,開源db4o
    • 發現我可以用一行代碼保留我的對象。
    • 沒有模式更改處理,它只是工作。
    • 即時支持POCO(普通舊類對象)。用代碼創建你的班級,然後堅持下去。它可能與Entity框架相同,但是,它的lot與手動映射的工作,它打破了非常容易。
    • 打開透明持久性,並在後臺自動延遲加載 - 不再檢查由於實體框架中的延遲加載而未加載的對象。
    • 對象數據庫的性能也令人印象深刻:如果您在對象數據庫中有1000萬行,並且索引處於打開狀態,那麼它將在16列中進行三列選擇。這是體面的。
    • 底線: 1周後,我有相同解決方案,使用持久性的RDBMS,但是,它是更清潔,更少的代碼,並且更易於維護 - 如果我真的想,我可以用用一個將db4o數據庫與MSSQL同步的服務。

在企業世界真大系統,在一個表中說,由2.5億行的,像sharding和選項,如clustered indexingnon-clustered indexing成爲性能非常重要。在這種情況下,db4o不起作用,它可能需要更多的企業。但是,如果你是一個持久化對象的簡單方法,那麼對象數據庫將適合該法案。所有學習SQL,在ORM中設置映射,處理MSSQL安裝,實現您自己的批量加載過程等的工作都消失了,爲您提供乾淨,優雅的100%託管代碼。

我懷疑供應商沒有采用對象數據庫的原因之一是數據庫市場每年價值30億美元,並且沒有理由殺死現金牛。

聲明:我與Microsoftdb4o沒有任何關係。