一, Doris 简介
什么是 Doris
Apache Doris 是一个现代化的 MPP(大规模并行处理)分析型数据库产品. 仅需亚秒级响应时间即可获得查询结果, 有效地支持实时数据分析. Apache Doris 的分布式架构非常简洁, 易于运维, 并且可以支持 10PB 以上的超大数据集. Apache Doris 可以满足多种数据分析需求, 例如固定历史报表, 实时数据分析, 交互式数据分析和探索式数据分析等.
Doris 由百度大数据部研发 ( 百度 Palo), 在百度内部, 有超过 200 个产品线在使用, 部署机器超过 1000 台, 单一业务最大可达到上百 TB. 百度将 Doris 贡献给 Apache 社区之后, 许多外部用户也成为了 Doris 的使用者, 例如新浪微博, 美团, 小米等著名企业.
关键字: MPP, 分布式, 数据分析, PB 级
优点
兼容 MySQL 协议.
聚合表技术 + 预聚合技术.
动态水平拓展和自动负载均衡.
缺点
网络上相关经验少.
二, Doris 定位
在数据分析处理框架中, Doris 主要做的是 Online 层面的数据服务, 主要处理的是数据分析方面的服务.
Doris 适用场景有以下:
1, 报表
报表类数据分析, 数据分析以及查询的模式相对比较固定, 而且后台 SQL 的模式往往都是确定的. 针对此类应用场景, 选择使用 MySQL 存结果数据, 用户可从界面选择执行批处理以及发送邮件. 在 Doris 平台中, 报表类查询时延一般在秒级以下.
2, 多维分析
这里提到的多维分析, 同样要求数据是结构化的, 适用于查询相对灵活的场景, 例如数据分析条件以及聚合维度等方面不是很确定, 一般将此类数据分析定义为多维分析. 相对于报表类分析, 多维分析的查询时延会稍慢, 大约在会在 10s 的级别.
三, Doris 架构
Doris 架构图如下:
Doris 的整体架构和 TiDB 类似, 借助 MySQL 协议, 用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端, 都可以直接访问 Doris.Doris 中的模块包括 FE 和 BE 两类: FE 主要负责元数据的管理, 存储, 以及查询的解析等; 一个用户请求经过 FE 解析, 规划后, 具体的执行计划会发送给 BE,BE 则会完成查询的具体执行. BE 节点主要负责数据的存储, 以及查询计划的执行. 目前平台的 FE 部分主要使用 Java,BE 部分主要使用 C++.
四, Doris 数据结构
如果从表的角度来看数据结构, 用户的一张 Table 会拆成多个 Tablet,Tablet 会存成多副本, 存储在不同的 BE 中, 从而保证数据的高可用和高可靠.
五, MPP(Massively Parallel Processing)
MPP 将 SQL 拆分成多份, 分布到每台机器执行, 最后再将结果汇总. 假如有 10 台机器, 在大数据量下, 这种查询执行方式可以使得查询性能达到 10 倍的提升.
六, 表设计
列式存储
Doris 的表和关系型数据相同, 由行和列构成. 每行数据对应用户一条记录, 每列数据有相同数据类型. 所有数据的列数相同, 可以动态增删列. Doris 中, 张表的列可以分为维度列 (也成为 key 列) 和指标列(value 列), 维度列用于分组和排序, 指标列可通过聚合函数 SUM,COUNT,MIM,MAX,REPLACE,HLL_UNION,BITMAP_UNION 等累加起来. 因此, DorisDB 的表也可以认为是多维的 key 到多维指标的映射.
稀疏索引
Doris 对数据进行有序存储, 在数据有序的基础上为其建立稀疏索引, 索引粒度为 block(1024 行). 这其中有一个特殊的地方, 就是 varchar 类型的字段. varchar 类型字段只能作为稀疏索引的最后一个字段. 索引会在 varchar 处截断, 因此 varchar 如果出现在前面, 可能索引的长度可能不足 36 个字节. 具体可以参阅 数据模型, ROLLUP 及前缀索引.
除稀疏索引之外, Doris 还提供 bloomfilter 索引, bloomfilter 索引对区分度比较大的列过滤效果明显. 如果考虑到 varchar 不能放在稀疏索引中, 可以建立 bloomfilter 索引.
七, 数据模型
明细模型
Doris 建表的默认模型是明细模型.
一般用明细模型来处理的场景有如下特点:
1. 需要保留原始的数据 (例如原始日志, 原始操作记录等) 来进行分析;
2. 查询方式灵活, 不局限于预先定义的分析式, 传统的预聚合方式难以命中;
3. 数据更新不频繁. 导入数据的来源一般为日志数据或者是时序数据, 以追加写为主要特点, 数据产生后就不会发生太多变化.
聚合模型
适合采用聚合模型来分析的场景具有如下特点:
1. 业务方进行的查询为汇总类查询, 比如 sum,count, max 等类型的查询;
2. 不需要召回原始的明细数据;
3. 老数据不会被频繁更新, 只会追加新数据.
Doris 会将指标列按照相同维度列进行聚合. 当多条数据具有相同的维度时, Doris 会把指标进行聚合. 从而能够减少查询时所需要的处理的数据量, 进而提升查询的效率.
更新模型
适合采用更新模型来分析的场景具有如下特点:
1. 已经写入的数据有存量的更新需求;
2. 需要进行实时数据分析.
更新模型中, 排序键满足唯一性约束, 成为主键.
Doris 存储内部会给每一个批次导入数据分配一个版本号, 同一主键的数据可能有多个版本, 查询时, 最大 (最新) 版本的数据胜出.
八, 物化视图
物化视图是提取某些维度的组合建立对用户透明的却有真实数据的视图表格. Doris 的物化视图可以保证用户在更新时, 直接更新原始表, Doris 会保证原表, 物化视图原子生效. 在查询的时候用户也只需指定原始表, Doris 会根据查询的具体条件, 选择适合的物化视图完成查询.
通常用户可以通过物化视图功能完成以下两种功能.
1, 更换索引列进行重排列.
2, 针对指定列做聚合查询.
来源: http://database.51cto.com/art/202108/679790.htm