本文小编将向大家简单介绍,由睿帆科技自主研发的用于联机分析处理(olap)的mpp列式数据库管理系统(dbms)——雪球db。
雪球db在日常olap场景中与其他开源产品进行poc对比时,通常都以领先一个或多个数量级的优势完胜,下面就让小编着重为大家介绍一下,为什么雪球db在olap场景中会如此之快?
说到雪球db在olap场景中为什么那么快,就不得不从olap场景的特点说起:
1. 读多于写
不同于事务处理(oltp)的场景,比如电商场景中加购物车、下单、支付等需要在原地进行大量insert、update、delete操作,数据分析(olap)场景通常是将数据批量导入后,进行任意维度的灵活探索、bi工具洞察、报表制作等。数据一次性写入后,分析师需要尝试从各个角度对数据做挖掘、分析,直到发现其中的商业价值、业务变化趋势等信息。这是一个需要反复试错、不断调整、持续优化的过程,其中数据的读取次数远多于写入次数。这就要求底层数据库为这个特点做专门设计,而不是盲目采用传统数据库的技术架构。
2. 大宽表,读大量行但是少量列,结果集较小
在olap场景中,经常存在多列的大宽表,列数可以高达数百甚至数千列。对数据分析处理时,通常选择其中的少数几列作为维度列、其他几列作为指标列,然后对全表或某一个较大范围内的数据做聚合计算。这个过程会扫描大量的行数据,但是往往只用到了其中的少数列。而聚合计算的结果集相比于动辄数十亿的原始数据,也明显小得多。
3. 数据批量写入,且数据不更新或少更新
oltp类业务对于延时(latency)要求更高,要避免让客户等待造成业务损失;而olap类业务,由于数据量非常大,通常更加关注写入吞吐(throughput),要求海量数据能够尽快导入完成。一旦导入完成,历史数据往往作为存档,很少会再做更新、删除操作。
4. 无需事务,数据一致性要求低
olap类业务对于事务需求较少,通常是导入历史日志数据,或搭配一款事务型数据库并实时从事务型数据库中进行数据同步。多数olap系统都支持最终一致性。
5. 灵活多变,不适合预先建模
分析场景下,随着业务变化要及时调整分析维度、挖掘方法,以尽快发现数据价值、更新业务指标。而数据仓库中通常存储着海量的历史数据,调整代价十分高昂。预先建模技术虽然可以在特定场景中加速计算,但是无法满足业务灵活多变的发展需求,维护成本过高。
雪球db如何处理以上问题的呢?简单来说就两点:1.列式存储;2.向量化执行引擎。
1. 列式存储
与行存储将每一行的数据连续存储不同,列存将每一列的数据连续存储。相比于行式存储,列式存储在分析场景下有着许多优良的特性。
如前所述,分析场景中往往需要读大量行可是很少几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个表中,不参与计算的列在io时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了io 的消耗,加速了查询。具体如下图所示:
2)同一列中的数据属于同一类型,压缩效果显著。列存往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本。
3)更高的压缩比意味着更小的数据尺寸,从磁盘中读取相应数据耗时更短。
2. 向量化执行引擎
传统的数据库查询执行都是采用一次一行的pipleline执行模式。这样cpu的利用率不高。也会导致指令缓存命中率低和频繁跳转。更加糟糕的是这种方式的执行,不能够利用到现在新硬件的能力来加速查询的执行。
雪球db不仅将数据按列存储,而且雪球db实现了向量执行引擎,对内存中的列式数据,一个批次调用一次指令(而非每一行调用一次),不仅减少了函数调用次数,而且可以充分发挥simd指令的并行能力,大幅缩短了计算耗时。
以上只是雪球db查询处理速度快的几个核心原因之一,后续我们将会持续为大家讲解雪球db的其他优势和特点,要想了解更多的信息,记得识别下方二维码关注ag九游会官网哟~