临时方案:

备份数据,然后提供最近一段时间的数据查询,满足用户查询近期数据的需求,而较久远的历史数据,由产品或分析师手动提供查询,当然这只是临时方案,不可长期存在。

方案比较:

接入spark:

优势:

该方案操作简单,只要将数据导入到hive表,然后通过spark jdbc的方式连接即可

可扩展性好,可存储上T的数据。

不足:

对资源的依赖相对较重,目前大数据这边有10台服务器,1台master,9台slave,对于当前的调度任务来说,资源略显紧张,数据分析师和大数据这表均存在使用,而接入spark大概占据百分之二十的集群资源,导致分析师,调度任务无法再规定时间完成,若需要强行接入spark需要申请新的机器。

spark优化较难。

性能分析

经过测试查询两亿数据量,查询速度在10s左右,由于数据对时间有分区,业务查询除了比较极端的需求之外,不会全表扫描。

查询最近一段时间的数据,查询时间维持在1s以下。

经过调试查询速度可维持到100ms左右。

数据库分库分表:

优势:

将大表分割为多个小表,大幅度查询的行数,从而提高查询效率。

相比于分区,对于单个小表可建立索引,进一步提高查询速度。

不足:

数据量若大幅增长,分表表数不够,需要重新分表,移数据略显麻烦。

将数据导入多个表中,对于查询该表所有数据的统计不大好统。

数据表建的太多,看起来凌乱,而且导入历史数据略显麻烦。

增加列不大方便,浪费存储空间。

性能分析:

6千万数据分给为16个表,每个表数据量大概在40w数据左右,查询时间可达200ms以内。

数据库分区:

优势:

和数据库分库分表的思想接近,属于物理存储层面的分库分表,数据量过大(索引查过cpu内存比如4G)时,删除索引查询速度可显著提高。

数量若增大,查询速度减慢时,可直接通过语句增加分区个数,提高查询速度。

不足:

单表数据量过大,对于分区建立索引会降低查询速度。

数据库迁移数据困难。

多表连接查询效率明显降低。

数据插入较慢,不适用于插入频繁操作。

浪费存储空间。

最新版mysql数据库分区有限制8192。

性能分析:

单个分区数据量大概在40w,查询速度可在200ms左右。

若分区数据量小,查询速度可更快。

接入hbase 接口:

优势:

列的可以动态增加,并且列为空就不存储数据,节省存储空间。

Hbase自动切分数据,使得数据存储自动具有水平scalability。

Hbase可以提供高并发读写操作的支持。

不足:

不支持条件查询,只能通过row key来查询。

性能分析:

查询速度可在100ms左右。