基于Spark之上的YDB技术原理

来源:互联网 发布:单片机项目开发实例 编辑:程序博客网 时间:2024/06/01 03:59

一.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快速排序
blockSort排序(排序大跃进)
按照时间逆序排序可以说是很多日志系统的硬指标。在延云YDB系统中,我们改变了传统的暴力排序方式,通过索引技术,可以超快对数据进行单列排序,不需要全表暴力扫描,这个技术我们称之为blockSort,目前支持tlong,tdouble,tint,tfloat四种数据类型。
由于blockSort是借助搜索的索引来实现的,所以,采用blockSort的排序,不需要暴力扫描,性能有大幅度的提升。
blockSort的排序,并非是预计算的方式,可以全表进行排序,也可以基于任意的过滤筛选条件进行过滤排序。
六.两段式查询
1.将原先的一次查询化为两次或多次查询。
2.第一次查询仅读取必备的列,如排序的列,需要group by与统计的列。
3.第一次查询不会获取数据的真实值,仅仅读取数据标签
4.所有的计算都完成后,因为数据进行过排序或汇总,剩余的记录数不多
这个时候在将标签从字典中转换为真实值,其他列的值也跟着读取过来。

0 0
原创粉丝点击