基于spark之上的即席分析-技术原理

原创
2017/03/06 16:47
阅读数 43

一.YDB的本质? 

Spark之上基于搜索引擎技术,实现索引和搜索功能。 

既有搜索引擎的查询速度,又有Spark强大的分析计算能力。 

可对多个字段进行关键字全匹配或模糊匹配检索,并可对检索结果集进行分组、排序、计算等统计分析操作。 

二.多种技术组合-万亿数据秒级查询 

 

三.整体架构 

 

 

 

四.倒排索引与跳跃表 

1. 倒排索引与跳跃表基本原理 

 

 

2.与开源的倒排索引系统相比 

 

五.采用标签代替原始值-进行分组与排序 

采用标签标记技术-让大数据化小 

优点 

1. 重复值仅存储一份,可以减少存储空间占用。 

2. 标签值采用定长存储,可随机读取。 

3. Group by分组计算的时候,使用标签代替原始值,数值型计算速度比字符串的计算速度快很多。 

4. 标签值的大小原始值的大小是对应的,故排序的时候也仅读取标签进行排序。 

5. 标签比原始值占的内存少。 

缺点 

1. 如果数据重复值很低,存储空间相反比原始数据大。 

2. 如果重复值很低,且查询逻辑需要大量的根据标签值获取原始值的操作的时候,性能比原始值慢。

下图为替换示例,示意图: 

 

 

在真实的数据中,数据肯定是有重复的,比如说类目,性别,年龄,成交金额等信息,传统的分析工具存储的是原始的值,比如说我们有1千亿条数据,那么就要存储一千亿条记录,那么进行统计的时候,一条一条的读出这些类目肯定要慢的不得了。 

还记得机器人总动员中的WALL-E么?当数据规模达到一定程度以后,如果还是直接对原始值进行读取,对大数据的搬运工作将会特别的消耗体力,而且工作效率很低。 

 

ydb对原始数据做了一些处理,基本思路是:虽然你有1千亿的数据,但是你的类目不会那么多,典型的系统一般是几万个类目,2~3个性别值,故ydb在存储的时候虽然有1千亿条记录,但是只会存储几万个类目,2个性别,这根原始的千亿条记录在数据规模上可是相差千万倍,那么在之后的统计(count,sum,avg等)势必会比传统的分析工具快上千倍万倍。 

ydb的这种方式我们称为标签技术,就是将数据的真实值用一个数值标签来替换数据本身,原始数据每个值我们只存储一份,这样当有大量重复值的数据,可以节省很多IO,即使数据重复值很少,我们也可以一个数字来代表原始值,因为原始值有可能比较大,但数值确可以很好的压缩。 

基本的处理过程如下图所示: 

 

六.采用blockSort快速排序 

按照时间逆序排序可以说是很多日志系统的硬指标。在延云YDB系统中,我们改变了传统的暴力排序方式,通过索引技术,可以超快对数据进行单列排序,不需要全表暴力扫描,这个技术我们称之为blockSort,目前支持tlong,tdouble,tint,tfloat四种数据类型。 

由于blockSort是借助搜索的索引来实现的,所以,采用blockSort的排序,不需要暴力扫描,性能有大幅度的提升。 

blockSort的排序,并非是预计算的方式,可以全表进行排序,也可以基于任意的过滤筛选条件进行过滤排序。 

七.两段式查询 

1.将原先的一次查询化为两次或多次查询。 

2.第一次查询仅读取必备的列,如排序的列,需要group by与统计的列。 

3.第一次查询不会获取数据的真实值,仅仅读取数据标签 

4.所有的计算都完成后,因为数据进行过排序或汇总,剩余的记录数不多 

这个时候在将标签从字典中转换为真实值,其他列的值也跟着读取过来

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部