基于消息队列的DW构建

基于消息队列的DW构建

多数公司在拆分数据库的同时需要考虑到汇总的问题,因为很多业务涉及到聚合,分类的需求。

可能遇到的问题如下:

1. 如何实时的获取聚合数据
2. 如何构建数据仓库以支持后续的分析。

我的上家公司采取的策略如下

在应用与数据库之间构造中间层聚合,在所有获取数据端通过内存运算得到业务需求,通过细分SQL,拆分SQL到不同节点从而保证数据的正确性,这点与TDDL也是类似的。

数仓层面,通过自定义ETL,从所有数据源抽取数据,落入Exadata集群,离线日志等数据落入hadoop集群。从而区分不同时间维度,差异类别需求的分析。

这里给出一个新的思路方案

结合Canal+roma (之前发过PDF) 通过消费roma的实时消息队列,构建一个实时的DW,因此一些简单的实时查询可以直接在DW上实现,而不需要依赖中间层的内存聚合。

DW可以采用MySQL实现,与前端MySQL采用源生复制技术,从而简化了整个ETL抽取过程。

这个架构的缺点在于:MySQL应对海量数据的时候能力不足,所以后面还要接入hadoop,hive等分析平台来处理各种日志类型数据。

目前一般的BI系统都是基于商业软件来实现的。对于中小型公司,这种架构可以节省很大的成本。

Client端的消息聚合:

etl_roma

拆分以及汇总:

split1split2

整体架构:

DW_arch

vmcd

About vmcd

Phone: +86 18666668061 Email & Gtalk: ylouis83@gmail.com Personal Blog: http://www.vmcd.org 2010 Oracle Certified Database 10g Administrator Master SHOUG Member