代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

如何处理混合数据库?

  •  3
  • Stefano Borini  · 技术社区  · 16 年前

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

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

    你认为处理这种情况最好的方法是什么?把这两种数据分开,写一个软件层来保持它们的同步?只使用一种数据库,将一种数据转换成另一种数据(例如,将文件作为BLOB存储到关系数据库中,或将关系部分存储到基于磁盘的黑客文件数据库中)?

    3 回复  |  直到 16 年前
        1
  •  1
  •   MicSim    16 年前

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

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

        2
  •  1
  •   ccalboni    16 年前

    我不认为“合并”这两个世界是一件好事(性能、维护等等)。 第一个对我来说很好,将它们分开,并用一个层将它们与业务逻辑分开。使用松耦合层有很多好处。您可以通过设计模式或使用接口/抽象类来实现这一点。

        3
  •  1
  •   Kingsley Uyi Idehen    16 年前

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

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

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

    我上面所描述的基本上就是今天所说的:基于HTTP的链接数据。

    链接:

    1. http://virtuoso.openlinksw.com

    金斯利