【问题标题】:How to deal with mixed databases?如何处理混合数据库?
【发布时间】:2009-08-27 14:21:12
【问题描述】:

你有没有遇到过这样的情况:你需要存储信息,但是这个信息的一部分是用一种类型的数据库很好地建模(在非常松散的意义上),而另一部分是用另一种类型很好地建模的。例子:

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

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

【问题讨论】:

    标签: database storage


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        链接:

        1. http://virtuoso.openlinksw.com

        金斯利

        【讨论】:

        • 我现在正在将三重存储(通过 rdflib,后端 mysql)与旧版 mysql 数据库相结合。感谢您的指点,我会深入研究它们。
        猜你喜欢
        • 2022-11-11
        • 2018-08-27
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 2010-11-08
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多