如何实现大数据BI技术与传统BI领域的大融合

标签:大数据BI

访客:5447  发表于:2016-08-16 11:26:50

大家好,我是来自新致金融云大数据团队MATRIX的架构师:汪勇。在互联网高速发展的今天,大数据技术越来越频繁地被应用于我们的日常开发中。而大数据BI对于跨系统、非结构化的数据处理能力以及处理量级也使其逐渐走进了软件开发商的视野。伴随BI的发展,BI的应用范围越来越广,而大数据BI恰恰可以实现一些传统的BI工具实现不了的数据结果分析,可这是否就意味着大数据BI的出现会就此将传统BI逼入绝境呢?其实不然,传统BI在中小型数据的处理领域中依然占据着无可替代的地位,但是我们是否可以将大数据BI技术中的一些思考运用到传统BI技术开发中呢?

接下来,我将简单介绍新致金融云运用大数据技术帮助一家大型上市保险集团公司解决传统BI技术瓶颈从而提升客户体验度的实际案例。

客户场景

在客户实施的数据类项目中,用户经常向我部反馈系统查询速度慢,而这种现象主要集中在运营监管、数据分析等数据集中项目中。这具体是怎么回事呢?通过对相关项目的调研,我们了解到该系统:

1、已有数据存量接近或超过1亿

2、若干常用的查询条件字段增加了索引

3、按分公司分区,限制用户不能跨分公司查询

4、查询规则相对复杂,包括多项选择、模糊匹配、表达式匹配等。

5、单次查询的速度就在20秒左右,多用户情况下系统响应速度更慢。

需求分析

因该系统的用户查询范围大,且具有不确定性,故将其定义为数据探查场景。

在数据探查场景中,最终用户的一个想法需要快速通过业务数据进行验证,其特点是查询方式灵活、数据范围大、周期短甚至是一次性的。

需求听起来不复杂,但与海量数据一结合,技术实现就变得非常不简单。常用的索引、分区分表等设计期优化方案,经过实践证明都无法起到太好的效果,不是跟不上运行期用户灵活要求,就是极大制约了用户的查询行为。而人工提数则存在理解偏差、工作量大、成本高等问题。

那么是否存在最佳解决方案?答案是肯定的。新致金融云结合其20余年丰富的行业经验与多年大数据技术积累,积极思考如何将大数据技术融入到实际业务场景中,以此得出结论,大数据探查场景会是一个好的切入点。

系统目标

1、数据探查由最终用户自行操作,减少中间环节;支持日访问量1万用户。

2、提供基于全库数据量,支持亿级数据规模。

3、提供灵活、快速的查询功能,响应时间控制在3秒以内。

4、能够通过硬件水平扩展,有效应对数据规模的持续扩容。

5、能与已有应用系统无缝整合,无需做大改造。

技术分析

1、物理层

选择支持高可用、分区容错性强的分布式存储系统。在大数据领域不得不提到hadoop hdfs,也包括基于hadoop或仿效hadoop原理的存储产品。在企业内部定制实施大数据平台,服务器数量不可能动则成千上万,因此我们需要在有限的资源条件下,最大化提升硬件利用率。

2、逻辑层

逻辑层是性能优化的关键。早期的大数据技术,通过强大的硬件性能暴力扫描数据的做法,适合大量日志、平面文件处理的简单场景。而当面对复杂数据访问过程,且在资源有限条件下,优化逻辑存储结构及算法支撑便显得尤为重要。

反向索引技术,是先从源数据中提取关键字字典,每个关键字对应一组数据行号列表。

结合有限状态机压缩算法,进一步减小查询时内存使用量。

使用跳跃表技术,同时扫描多个字段索引,加快组合查询速度。

从物理层加载某几列数据时,列式存储是顺序读取、行式存储是随机读取,列式存储明显具有速度优势。

3、用户层

大数据查询平台采用独立部署模式,对外提供json数据接口。任何web架构的应用系统均可无缝接入大数据查询平台 。

实施过程回顾

我们自今年五月份开始在相关项目中采用大数据技术解决数据探查问题。经过多次POC实践论证,及项目团队反复讨论与修改,在六月底正式部署生产环境,并于七月中旬通过客户测试进行试运行。

大数据探查系统经过loadrunner压力测试,在100并发用户的压力下,平均响应时间不超过1秒,比原来的查询速度提高几十倍以上。相对硬件设备投入,只有4台普通IBM服务器,每台配置8核cpu.32G内存500G硬盘。投入产出比预期高很多,获得甲方充分肯定。

由上述实践案例可见,虽然大数据BI与传统BI在不同量级的数据处理环节中各展所长,但是两者的数据处理技术依然具有相互借鉴的价值。目前新致金融云主要将大数据BI技术集中应用于该系统的返回清单数据支持功能,在后续我们还将根据客户要求进一步整合系统多维度聚合功能,届时,新致云将继续与大家分享大数据BI技术在传统BI领域中的应用与融合。

来源:新致金融云大数据团队MATRIX架构师:汪勇

评论(0)

您可以在评论框内@您的好友一起参与讨论!

<--script type="text/javascript">BAIDU_CLB_fillSlot("927898");