如何处理混合数据库?

时间:2009-08-27 14:21:12

标签: database storage

您是否曾遇到以下情况:您需要存储信息,但此信息的一部分使用一种类型的数据库(非常宽松的意义)很好地建模,而另一部分则使用其他类型进行了很好的建模。例子:

  • 一组文件以及关于存储在关系SQL数据库中的每个文件的附加信息。
  • 一个OODB和一个三重商店。
  • 两个先前完全不相关的键/值数据存储,必须集成,但保持分离。

您认为处理这种情况的最佳方法是什么?保持两种类型的数据分离,并编写一个保持同步的软件层?只使用一种数据库,将一种数据调整到另一种数据库中(例如将文件作为blob存储到关系数据库中,或者将关系部分存储在磁盘上被黑客攻击的基于文件的数据库中)?

3 个答案:

答案 0 :(得分:1)

我认为“合并”这两个世界并不是一件好事(表现,态度等等)。 第一个对我有好处,让它们分开,并用层来区分它们与业务逻辑。使用松散的Coulped层有许多好处。您可以通过设计模式或使用接口/抽象类来实现此目的。

答案 1 :(得分:1)

这种问题称为联邦数据库系统。我建议在wikipedia上阅读关于联邦数据库的文章。

这不是一个简单的情况,这个问题的解决方案很大程度上取决于不同“数据库”中数据的耦合/相关程度,以及不同“数据库”的模式有多相似。

答案 2 :(得分:1)

您描述了虚拟数据库引擎(也称为联合DBMS引擎)解决的问题。

我怀疑理想情况是一个概念层,它位于不同的逻辑源之上,可以是以下任意组合:关系型dbms引擎(在ERP,CRM,HR,会计系统之后),Web服务,XML等。

Virtuoso(我公司的产品)通过允许您附加与无数数据表示格式相关联的外部/远程数据源(如上面的列表)来处理此问题。然后,它允许您使用EAV / CR模型(例如RDF图模型)作为概念层的基础,该概念层既具体又是所有后续数据交互的焦点。此概念层使用基于HTTP方案的标识符赋予每个数据项;因此,当您开始探索现在位于不同逻辑数据源的丰富概念图时,您只需要一个HTTP感知用户代理。

我上面所描述的基本上是现在通常所知的:基于HTTP的关联数据。

链接:

  1. http://virtuoso.openlinksw.com
  2. 金斯利