2009-08-27 73 views
3

您是否曾遇到以下情況:您需要存儲信息,但是這些信息的一部分用一種類型的數據庫很好地建模(非常鬆散),另一部分用另一種類型很好地建模。示例:如何處理混合數據庫?

  • 關於存儲在關係型SQL數據庫中的每組文件和附加信息。
  • 一個OODB連同一個triplestore。
  • 兩個以前完全不相關的鍵/值數據存儲必須被集成,但保持分離。

您認爲這是處理這種情況的最好方法嗎?保持兩種類型的數據分離,並編寫一個軟件層讓它們保持同步?只使用一種數據庫,將一種數據適配到另一種數據(例如,將文件作爲blob存儲到關係數據庫中,或將關係部分存儲在磁盤上被破解的基於文件的數據庫中)?

回答

1

這種問題被稱爲聯邦數據庫系統。我建議閱讀關於聯邦數據庫的文章wikipedia

這不是一個容易的情況,這個問題的解決方案很大程度上取決於不同「數據庫」中的數據耦合/相關的緊密程度,以及不同「數據庫」的模式有多相似。

1

我不認爲「合併」這兩個世界將是一件好事(性能,manteinance等)。 第一個對我來說很好,讓它們分開並將它們與具有圖層的業務邏輯分開。使用鬆散coulped層有許多好處。您可以通過設計模式或通過使用接口/抽象類來實現此目的。

1

您描述了由Virtual Database Engines(也稱爲聯合DBMS引擎)解決的問題。

我懷疑你的理想情況是位於不同邏輯源之上的概念層,它可以是任何組合:關係型DBMS引擎(在ERP,CRM,HR,會計系統後面),Web服務,XML等等。 。

Virtuoso(我公司的產品)通過允許您附加與無數數據表示格式(如上面的列表)相關的外部/遠程數據源來處理此問題。然後,您可以使用EAV/CR模型(例如RDF圖模型)作爲概念層的基礎,該層既是具體的,也是所有後續數據交互的焦點。這個概念層爲每個數據項賦予一個基於HTTP方案的標識符;因此,當您開始探索現在面向不同邏輯數據源的豐富概念圖時,您只需要一個HTTP感知用戶代理。

我上面描述的基本上是今天通常所知的:基於HTTP的關聯數據。

鏈接:

  1. http://virtuoso.openlinksw.com

金斯利

+0

我現在是在結合了triplestore(通過rdflib,後端的MySQL)與傳統MySQL數據庫的過程。感謝指針,我會深入研究它們。 – 2009-11-18 07:10:25