之前在一个数据库群里看到一个年轻人计划自己开发一个数据库中间件。
第一次看到中间件这个概念,感觉(事实上也)是个很高级的应用。
当时以为中间件会隐去对源数据库的访问,对外统一一个查询接口。这样就可以解决,对于异构数据库,每次索引都需要去对应数据库进行查询,然后再聚合的问题。
刚好今天看到数据仓库方面的内容,看到了对中间件(mediator)的说明,以及其与数据仓库概念的对比。
[原文见 Data Mining - Concepts and Techniques (Jiawei Han, Micheline Kamber),Page 107, Chapter 3.1]
数据库集成的传统方法是在多元、异构数据库顶层建立wrappers和integrator(或称mediator).
当客户端接收到一个query时,客户端会通过元数据字典(metadata dictionary),将query转换成多条的、指向各自相关的异构数据库的query语句。然后这些query语句被映射,并发送到本地查询处理器中去执行。
然后从不同数据库返回的结果,会被合并成一个全局的索引结果集。
这种query驱动的方式,需要复杂的信息过滤和集成处理,并且会抢占本地处理资源。对于频繁查询来说,这种方式是低效同时也可能是高成本的。当query需要进行数据聚合时,这样的缺陷尤其明显。
数据仓库提供了另一种不同于上述传统方法的异构数据集成方式。数据仓库使用了update驱动的的方法,将来自多元异构数据库的数据提前进行处理和聚合,并将其存储在(另一个独立的)数据仓库中,以供直接查询和分析。
和在线事务处理相比,数据仓库不包含最最当前的信息。但是,由于数据仓库将数据复制、预处理、集成、注释、总结并重构到一个数据集市中,从而使得异构数据系统集成变得非常高效。
同时数据仓库的有点还有不占用本地处理资源,能存储、集成历史信息,并支持复杂的多维查询。
因此,数据仓库计数在行业内开始变得流行起来。