一种实时多维数据的分析及同步系统

多维分析技术是一种被广泛应用的数据分析技术,本人在实际项目中使用开源OLAP框架Mondrian及关系型数据库MySQL,尝试设计并实现了一套多维数据的分析及同步系统,以解决现有技术对于互联网上实时流动变化数据无法进行快速有效的多维度分析的问题。这里是对该方案的详细描述。

1. 系统内部模块

下图所示为该系统的内部模块结构,分为:实时数据收集模块,实时计算模块,实时同步模块,关系型数据库,数据加载模块,多维数据展现组件,多维数据分析引擎(Mondrian),缓存更新模块。

1)实时数据收集模块:该模块是系统的数据源,通过实时地、不间断地采集指定网站的用户访问日志数据,为系统提供具有固定格式的日志数据,这些数据的特点是具有各个维度的用户访问信息,如访问时间、访客唯一标识、访问来源URL、访问URL、访客IP地址等。

2)实时计算模块:根据实时数据收集模块收集到的日志数据,提取其中有用的字段,如访问时间、访客唯一标识、访问来源URL、访问URL、访客IP地址等用于多维分析的字段,通过在内存中进行实时计算,完成从原始日志数据到维度数据的转换,得到对应维度下的各项计算指标,如访问PV量、访问点击量等。

3)实时同步模块:周期性地将实时计算模块实时计算的结果和关系型数据库(MySQL)中的历史数据进行同步与合并处理,具体分为两步操作:

    a)对于事实表,则直接将实时计算模块中的计算结果插入到事实表中;

    b)对于聚合表,则判断关系型数据库中是否存在对应维度下的计算指标结果:

  • 若不存在,则直接将计算结果作为一条新的记录插入关系型数据库的聚合表中;
  • 否则存在,则首先查询关系型数据库得到对应维度下的历史结果,然后和实时计算模块新累加的计算结果进行合并后得到最新的计算结果,并更新写入关系型数据库的聚合表中。

4)关系型数据库:按照多维数据的格式,存储实时计算模块输出的数据;根据存储数据类型的不同,分为事实表、维度表和聚合表。

结合实时同步模块和关系型数据库,下面是本系统中实现的多维数据同步算法的具体逻辑:

Step1遍历实时计算模块中的每条计算结果记录,对于其中的每条记录:

    Step1.1获取各个维度信息及各项指标计算结果;

    Step1.2将指标计算结果按照各个维度信息写入关系型数据库中的事实表中;

    Step1.3对于关系型数据库中的每张聚合表:

        Step1.3.1从记录中提取该聚合表中维度的值,查询该聚合表中是否存在对应维度下的历史计算结果:

        Step1.3.2若存在,则进行更新操作:根据维度信息,将关系型数据库中的历史结果和实时计算模块中累加的计算结果进行合并后写入关系型数据库中;

        Step1.3.3若不存在,则进行插入操作:直接根据维度信息,将实时计算模块中累加的计算结果写入到关系型数据库中;

Step2清空实时计算模块中累加的计算结果。周期性地重复步骤Step1~Step2。

5)数据加载模块:由于关系型数据库中为了加速对聚合表中数据的查询与更新速度,聚合表往往采用内存表的方式存储,这样当系统重新启动时,聚合表中数据会丢失。因此需要在系统启动后初始化阶段,通过读取事实表中的历史结果数据,按照聚合表的维度情况,通过预先进行聚合计算将结果加载到聚合表中,供多维数据分析引擎模块查询使用。

6)多维数据分析展现组件:通过MDX语句,与多维数据分析引擎模块交互,得到相应维度下的各项计算指标结果值。

7)多维数据分析引擎模块:接收用户通过多维数据分析展现组件发起的MDX查询请求,首先在多维数据分析引擎的缓存中查找:若存在,则直接将结果返回给多维数据分析展现组件;否则,将MDX语句映射转换为SQL语句,通过查询关系型数据库,得到数据库表的查询结果集。

8)缓存更新模块:接收多维数据分析展现组件发起的请求,调用多维数据分析引擎模块相关API接口清除系统缓存,然后通过重新执行用户查询得到最新的结果,返回给多维数据分析展现组件。

2. 系统拓扑结构

根据以上系统模块结构的介绍,下图所示为本发明中一种实时多维数据的分析及同步系统的拓扑结构示意图:

1)数据收集服务器:实时采集网站的用户访问日志数据,并发送给实时计算服务器。每次接收并转发一行日志数据,代表一个顾客的一次访问记录。

2)实时计算服务器:从数据收集服务器接收用于访问日志数据;提取其中的有用字段,转换为对应的维度信息;同时完成各项指标的计算;累积一定的时间周期后,将计算结果同步更新到数据库服务器。

3)数据库服务器:存储多维数据的各项指标计算结果,作为数据源为数据加载服务器提供查询服务。

4)数据加载服务器:用于系统启动后读取数据库服务器中事实表和维度表中的数据,初始化聚合表中的数据记录,提供给多维数据分析引擎模块查询使用。

5)Web服务器:通过MDX语句,请求OLAP引擎服务器,得到请求维度下的各项计算指标结果值。

6)OLAP引擎服务器:将MDX语句解析为SQL语句,通过执行SQL语句,查询数据库服务器,得到数据库聚合表/事实表的查询结果集,并返回给Web服务器。

7)缓存更新服务器:接收Web服务器发起的请求,调用OLAP引擎服务器相关API接口清除系统缓存,然后通过执行SQL查询得到最新的结果,返回给Web服务器。

3. 总结

1)通过项目的实践过程证明了该方案的可行性,基于的软件平台是Mondrian和MySQL。

2)该方案的实施过程中,可以借助Mondrian的缓存机制、聚合表机制;MySQL的内存表、索引机制进行调优,从而达到提高系统运行性能的目的。

3)同时在系统实现过程中发现,对于实时变化数据进行多维分析,关键在于如何做到数据尽可能短时间内保持同步更新(本方案中即指事实表和聚合表中数据的同步),这是系统性能和复杂性折中的结果。

posted on 2012-10-14 22:29  大圆那些事  阅读(7684)  评论(4编辑  收藏

导航