Doris 和 Starrocks的复习
- Doris的应用场景
Doris是一个MPP架构的数据库产品,支持对PB级别的数据进行亚秒级别查询响应。本身支持SQL语法,应用场景包含 固定历史报表分析,实时数据分析,交互式的数据分析
一般来说其数据来源都是来自其他类型的数据仓库的导入,所以支持的导入方式很多,包括读取远端文件,Flink,Kafka或者Spark方式导入。
而Starrocks则是脱胎于Doris的一个开源的项目,其架构和使用方式和Doris一致。
- Doris的架构
两者在架构上的选型一致,都是设有了FE和BE两个角色,两个进程。
FE 负责存储维护集群元数据,BE存储物理数据
FE负责接收查询请求,生成查询计划,并进行返回结果。
BE节点根据FE生成的执行计划,进行分布式的查询
FE 中包含三个角色,分别是Leader,Follow以及Observer
Leader和Follow负责保证元数据的高可用性,Observer则是扩展查询节点
- 两者中的表模型
在Doris中,主要存在了Aggregate 模型,Unique模型,Duplicate 模型,
在Starrocks中,主要存在了Duplicate 模型,Aggregate 模型,Unique模型,主键模型
在Doris中 Aggregate模型可以支持创建表的时候设置预聚合的方式,非常适合有固定报表模式的查询场景
Unique模型则是保证主键唯一性的约束,新数据到来的时候会替换旧的数据,只需要在创建表的时候设置UNIQUE KEY即可,这种方式类似Aggregate模型中的replace
Duplicate模型,在其中没有主键,也没有聚合,直接是有多少数据就进多少数据,这时候的Duplicate键就是用于排序的。只能完全发挥Doris的列存模型的优势。
而在Starrocks中,除了上面三种的模型之外,还包括一个主键模型,Primary Key
主要用于对接事务性数据库,所以提供了常见事务性数据库的主键模型
比起上面三种模型采用的Merge on read的策略,其采用了Delete-Insert的策略。
- ROLLUP in Doris
对于ROLLUP,则是一种预聚合的方式,可以基于一个Base表,创建出多个ROLL UP 表
这些ROLLUP的表数据都是基于Base表产生的,并且是独立存储的
但是对于明细模型来说,并没有什么意义。
- 前缀索引
对于Starrocks还是Doris中来说,创建表的时候都需要指定一个相关的索引主键
比如Aggreate,Uniq,Duplicate三种数据模型中
都需要指定诸如 AGGREGATE KEY,UNIQKEY,DUPLICATE KEY 进行排序存储
而且往往都需要设置的列在建表语句中的声明列时候靠前
利用这种方式,在存储的时候进行靠前存储,也进行加快查询效率。
- 物化视图
首先说Doris和Starrocks中都存在物化视图和虚拟视图
物化视图则是一个具有实际物理存储的数据集,可以视为一个表
其主要需要满足用户不同视角去查看并分析同一份数据
无论对原始表进行同步还是删除操作,都会同步到物化视图中
- 物化视图和Rollup的区别
最大的区别在于Rollup无法对明细模型进行聚合,但是物化视图可以