2009-08-27 69 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