目录
一:doris角色
二:doris关键特性
- 支持mysql协议
- 按key排序
- 在线表结构变更
- 两层分区。分区:range partition; 分桶 hash bucket
- mpp查询引擎:基于impala
- 列式存储:按列存储,高压缩比,多种索引
- 高基数精准去重
- 元数据全内存访问,快速访问
- 高度内聚,不依赖第三方系统
三:分区和分桶
1)一个表的tablet总数量等于(partition num * bucket num)
2)一个表的tablet数量,在不考虑扩容的情况下,推荐略多余整个集群的磁盘数量
3)单个tablet的数据量理论上没有上下界,但建议在1g--10g的范围内。
如果单个tablet数据量过小,则数据的聚合效果不佳,且元数据管理压力大。
如果数据量过大,则不利于副本的迁移,补齐。
在建表的时候,每个分区的bucket数量统一指定,但是在动态增加分区的时候(add partition),可以单独指定新分区的bucket数量。可以利用这个功能方便的应对数据缩小或者膨胀。
四:rollup
rollup在多维分析中是“上卷”的意思,即将数据按照某种指定的粒度进行进一步聚合。
4.1作用:
- 物化索引
- 更粗粒度的聚合数据
4.2 概念:
- 在Doris中,我们将用户通过建表语句创建出来的表称为base表(base table)。base表中保存中按用户建表语句指定的方式存储的基础数据。
- 在base表之上,我们可以创建任意多个rollup表。这些rollup的数据是基于base表产生的,并且在物理存储是独立存储的。rollup表的基本作用,在于base表的基础上,获得更粗粒度的聚合数据。
4.3 rollup说明
1)ROLLUP 最根本的作用是提高某些查询的查询效率(无论是通过聚合来减少数据量,还是修改列顺序以匹配前缀索引)。因此 ROLLUP 的含义已经超出了 “上卷” 的范围。这也是为什么我们在源代码中,将其命名为 Materized Index(物化索引)的原因。
2)ROLLUP 是附属于 Base 表的,可以看做是 Base 表的一种辅助数据结构。用户可以在 Base 表的基础上,创建或删除 ROLLUP,但是不能在查询中显式的指定查询某 ROLLUP。是否命中 ROLLUP 完全由 Doris 系统自动决定。