近来接触到DorisDB,做了些调研,记录下来。过程描述不一定准备,如有描述偏差,请指正。
1 介绍部分
1、DorisDB是什么
DorisDB重新定义了MPP分布式架构,集群可扩展至数百节点,支持PB级数据规模,是当前唯一可以在大数据规模下进行在线弹性扩展的企业级分析型数据库。DorisDB还打造了全新的向量化执行引擎,单节点每秒可处理多达100亿行数据,查询速度比其他产品快10—100倍!
(官网:https://www.dorisdb.com/zh-CN/product)
(1)新一代极速MPP数据库
(4)高并发低延时查询,支持PB级,可有效地支持在线实时数据分析
2、产品特性
(1)极速SQL查询 全新的向量化执行引擎,亚秒级查询延时,单节点每秒可处理多达100亿行数据。强大的MPP执行框架,支持星型模型和雪花模型,极致的Join性能。综合查询速度比其他产品快10-100倍
(2)实时数据分析 新型列式存储引擎,支持大规模数据实时写入,秒级实时性保证。支持业务指标实时聚合,加速实时多维数据分析。新型读写并发管理模式,可同时高效处理数据读取和写入
(3)高并发查询 灵活的资源分配策略,每秒可支持高达1万以上的并发查询。可高效支持数千用户同时进行数据分析。
(4)轻松管理大数据
支持在大数据规模下进行在线弹性扩展,扩容不影响线上业务。集群可扩展至数百节点,PB量级数据。集群运行高度自治化,故障自恢复,运维成本低
(5)全面兼容MySQL协议
支持标准SQL
可使用MySQL客户端和常用BI工具对接DorisDB来进行数据分析,支持多种数据模型(明细表, 聚合表), 多种导入方式(批量,流), 可整合和接入多种现有系统(Spark, Flink, Hive, ElasticSearch) 提供Colocation Join, 分析函数, 布隆过滤, 物化视图, bitmap索引等特性, 增加分片数据自动rebalance; 多表关联性能较好;
(6)管理部署简单 部署简单,不需要依赖任何其他系统(不依赖HDFS)
采用分布式架构,对table进行水平划分并以多副本存储:存储容量和计算能力可近似线性水平扩展 在线弹性扩展,集群规模可以灵活伸缩,支持数百节点集群,数据规模到达10PB(那如果大于10PB的场景呢)
支持多副本,具有弹性容错能力
DorisDB表模式热变更,可通过一条简单SQL命令动态地修改表的定义,处于模式变更中的表也可也正常导入和查询数据。——能热变更是因为它是列式数据库?所以动态改表也成为可能?
DorisDB是一个自治的系统。节点的上下线,集群扩缩容都可通过一条简单的SQL命令来完成; 在此操作期间, DorisDB后台自动完成数据rebalance; 用户的查询和数据导入操作可同时正常运行。
(7)高可用,高性能,分布式,关系型列式数据库 元数据和数据管理采用热备保证高可用,能够自愈服务来保证数据安全可靠。
支持高并发低延时查询,支持PB级以上的超大数据集,可有效地支持在线实时数据分析
列式存储引擎,通过编码和压缩技术,降低读写
(8)向量化执行引擎
消除程序循环的优化
(9)使用方便
提供快捷查询UI
支持流批导入——DorisDB支持实时和批量两种数据导入方式, 支持的数据源有Kafka, HDFS, 本地文件,支持的数据格式有ORC, Parquet和CSV等, DorisDB可以实时消费Kafka数据来完成数据导入,保证数据不丢不重(exactly once)。DorisDB也可以从本地或者远程(HDFS)批量导入数据。
(10)数据分区 DorisDB支持两级分区和动态分区。首先, 第一级分区对数据做Range划分, 用户可以把分区作为管理目标, 动态增删分区。 其次, 为了解决分区内的数据倾斜问题, 对分区做第二级分桶, 对分区内的数据做Hash划分。 这种分区分桶的设计方法, 可以灵活管理用户数据, 比如可以设置分区的存储介质,副本数,分区的生存周期和分桶数量等等。 用户可以利用分区分桶的机制实现冷热数据分离等功能。
(11)Index加速查询
DorisDB在存储引擎中支持使用Bitmap,Bloom Filter等索引方式。大部分场景中,DorisDB会在内部充分利用各种数据结构优化查询,用户无须主动创建索引加速。用户也可以根据具体的业务场景使用不同的索引技术来进行优化,例如在中高基数的字符串字段上创建Bitmap索引来提升equal/in 查询的效率等。
(12)近似去重、精确去重功能
DorisDB内置HyperLogLog类型以及Bitmap类型。用户可以通过这两个类型完成数据快速的近似去重,或者精确去重。
3、架构
3.1整体架构
3.2 整体架构- MPP架构
3.2 整体架构- MPP架构-2
4、适用场景分析
4.1 DorisDB场景适用特点:
支持灵活地分析
数据查询的速度要快
数据报表的建设速度要快
基于预计算的数据分析模式已经不能满足多样化的数据分析场景
支持实时地分析
支持多业务人员同时分析
支持统一的数据分析体系
(即:用一套统一的体系来满足企业多种数据分析场景的需求,让更多的企业成员能够同时更快、更灵活、更实时地分析数据。)
4.2 参考的适用场景
1、对数据分析、统计
数据分析大体上可以分为两大类场景:一种偏向于报表类的,另一种偏向于多维分析的。
2、报表
报表类数据分析,数据分析以及查询的模式相对比较固定,而且后台SQL的模式往往都是确定的。针对此类应用场景,选择使用 MySQL 存结果数据,用户可从界面选择执行批处理以及发送邮件。在 Doris 平台中,报表类查询时延一般在秒级以下。
3、多维分析
这里提到的多维分析,同样要求数据是结构化的,适用于查询相对灵活的场景,例如数据分析条件以及聚合维度等方面不是很确定,一般将此类数据分析定义为多维分析。相对于报表类分析,多维分析的查询时延会稍慢,大约在会在10s的级别。
4.3 不适用的场景
Doris主要解决 PB 级别的数据量(如果高于 PB 级别,不推荐使用 Doris 解决,可以考虑用 Hive 等工具),解决结构化数据,查询时间一般在秒级或毫秒级。
目前的话,Doris不适合做大规模的批处理,当前版本由于是全内存计算,所以面对大规模数据的复杂ETL容易内存不足
2 部分总结
1.DorisDB为什么快
1、系统架构
a)MPP架构
b)分布式调度 + 查询规划
c)充分利用多机多核
2、表设计
a)分区,分桶设计
b)排序键设计
c)精确的类型选择
3、存储引擎
a)列式存储
b)前缀索引+zoneMap(?)
c)延迟物化
d)Bitmap索引,BloomFilter索引
e)pushdown + 向量化过滤
f)字符串低基数优化
4、计算引擎
a)向量化引擎
i.向量化函数
ii.向量化节点
iii.向量化导入
b)SIMD指令
c)内存模型
d)两层聚合优化
e)join & join Filter
2. DorisDB除了很快,还有什么优势?
1.使⽤简单
a)Mysql协议兼容
i.标准SQL,兼容各类主流BI,迁移成本极低
ii.函数⽀持丰富,包括各类时间、字符串、GIS、聚合函数以及窗⼝函数
b)灵活的数据模型
i.⾼效⽀持星型/雪花模型,避免打平成⼤宽表,更加灵活的适应实时更新和维度变化
ii.Duplicate/Unique/Aggregate三种模式适配各类场景
c)开箱即⽤的⽤户体验
i.⾃适应应对各种case,⽆须额外的复杂优化⼿段
ii.各种Load⼿段可以降低ETL⼯作量,通过配置快速导⼊数据
2.运维⽅便
a)高可用
i.FE采取类Paxos⼀致性算法,⽆单点瓶颈
ii.BE多副本可以独⽴调节,数据按⾃身特性灵活拆分
b)高度自治
i.⽆外部依赖,避免繁杂的中间件维护
ii.副本⾃修复,数据⾃均衡,⼀键扩容,缩容
c)可视化管理工具
i.全局配置,⼀键部署,滚动升级
ii.完备的监控告警集成保障系统稳定可观测
iii.灵活的扩容缩容⽅便集群容量规划
3.生态完善
4.稳定可靠
a)高可架构
i.没有单点,FE高可用,BE多副本(待研究,FE,BE要怎样集群部署)
5.统一分析平台
名词解释:
1、bitmap索引
如果用户查询的列的基数非常的小, 即只有的几个固定值,如性别、婚姻状况、行政区等等。
要为这些基数值比较小的列建索引,就需要建立位图索引。基数值大的就不适合bitmap索引了
2、Bloomfilter
3、近似去重,精确去重
近似去重,去重有1%的偏差,精确去重,就是连1%的偏差都不允许
4、MPP
MPP (Massively Parallel Processing),即大规模并行处理。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似,分治思想)。
MPP架构特征:
任务并行执行
数据分布式存储(本地化)
分布式计算
私有资源
横向扩展
Shared Nothing架构
5、元数据
元数据是用来描述数据的数据,比如 "年龄"、"身高"(这些数据是描述一个人的数据,这些数据就是元数据,最小粒度的数据)
6、SSB: Star schema benchmark学术界和工业界广泛使用的一个星型模型测试集
SSB基准测试包括:
1个事实表:lineorder
4个维度表:customer,part,dwdate,supplier
13条标准SQL查询测试语句:统计查询、多表关联、sum、复杂条件、group by、order by等组合方式。
7、星型模型和雪花模型
参考:https://blog.csdn.net/nisjlvhudy/article/details/7889422
两者的区别主要是对于数据的冗余程度不一样,和它的表设计方案不一样。数据表分为“事实表”和“维度表”两种。
星型模型:如果维度表和事实表的关联都仅限一层,那么它就是星型模型,但可能存在较多的数据冗余,星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余
雪花模型:一个或多个维度表不与事实表直接关联,而是通过其它维度表间接关联,这种模型就是雪花模型。减少数据冗余。但此方式在统计查询过程中,关联的表变多,性能上会比星型模型差。该模型在数据规范更合理。