Apache Doris:实时分析数据库,15K Star 的 MPP 查询引擎
文章目录Apache Doris实时分析数据库15K Star 的 MPP 查询引擎1、 解决什么问题2、 架构长什么样3、 存储引擎4、 查询引擎5、 兼容性和生态6、 谁在用Apache Doris实时分析数据库15K Star 的 MPP 查询引擎Apache Doris 在 GitHub 上拿到了 15,519 Star。这是一个基于 MPP 架构的实时分析型数据库主打速度快、用起来简单。在海量数据场景下能做到亚秒级返回查询结果既能扛高并发的点查也能跑高吞吐的复杂分析。1、 解决什么问题企业做数据分析通常面对两个场景实时报表和离线数仓。传统做法是搞一套实时数仓处理在线数据再搞一套离线数仓跑批处理中间还要配各种 ETL 管道把数据搬来搬去。架构复杂维护成本高数据口径还不一定对得上。Doris 的思路是用一套系统覆盖这些场景。报表分析、即席查询、统一数仓、数据湖查询加速都能用它来搞定。实际业务里拿它做用户行为分析、AB 实验平台、日志检索、用户画像、订单分析的团队不少。2、 架构长什么样Doris 的架构只包含两种进程FrontendFE负责接收用户请求、解析查询、管理元数据和节点。BackendBE负责存数据和执行查询。数据按分片存储多副本分布在 BE 节点上。生产环境可以部署多个 FE 节点做容灾。FE 分三个角色Master 负责元数据读写Follower 负责读元数据并在 Master 挂掉时接替Observer 只负责读元数据用来提升查询并发。FE 和 BE 都能水平扩展单个集群能撑几百台机器、几十 PB 的存储。3、 存储引擎Doris 用的是列式存储引擎按列做编码、压缩和读取。好处是压缩比高扫描时只读需要的列IO 和 CPU 利用率都上去了。索引方面支持几种排序复合键索引最多指定三列组成复合排序键适合高并发报表场景做数据裁剪Min/Max 索引数值类型的等值和范围查询能快速过滤BloomFilter 索引高基数列的等值过滤效果好倒排索引任意字段都能快速检索。数据模型有三种明细模型存原始明细数据主键模型保证 Key 唯一同 Key 数据覆盖写支持行级更新聚合模型同 Key 的值列自动合并通过预聚合提升查询性能。还支持单表物化视图系统自动刷新维护和多表物化视图定时调度刷新减少手动建模的活。4、 查询引擎查询引擎基于 MPP 架构节点间和节点内都做并行执行。大表关联走分布式 shuffle join。引擎全面向量化内存结构按列布局减少虚函数调用提高缓存命中率用上 SIMD 指令。官方数据是宽表聚合场景比非向量化引擎快 5 到 10 倍。运行时会用自适应查询执行技术根据运行期统计信息动态调整执行计划。比如生成 runtime filter 推到探测端的最底层扫描节点减少要处理的数据量提升 join 性能。Runtime filter 支持 In、Min、Max、Bloom Filter。执行层用了 Pipeline 引擎把查询拆成多个子任务并行跑充分利用多核 CPU。同时解决了线程爆炸的问题限制查询线程数。Pipeline 引擎减少数据拷贝和共享优化排序和聚合操作。优化器方面CBO、RBO、HBO 三种策略配合使用。RBO 做常量折叠、子查询改写、谓词下推CBO 做 join 重排HBO 基于历史查询信息推荐最优执行计划。5、 兼容性和生态Doris 兼容 MySQL 协议支持标准 SQL。用 MySQL 客户端工具就能连上去BI 工具这边 Tableau、Power BI、Superset、FineBI、DataEase 都能接。数据导入支持多种方式从 HDFS/S3 批量导入从 MySQL Binlog/Kafka 流式导入通过 HTTP 接口微批写入通过 JDBC 实时写入。和大数据生态的对接也比较全Spark 通过 Spark-Doris-Connector 读写 DorisFlink 通过 Flink-Doris-Connector 实现 exactly-once 写入DBT 有 Doris Adapter 做数据转换。6、 谁在用Doris 在 2022 年 6 月从 Apache 学习期毕业成为顶级项目。国内用户覆盖面比较广市值排名前五十的互联网公司里超过八成在生产环境用 Doris包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、新浪等。金融、能源、制造、电信这些传统行业也有不少团队在用。一个集群两种进程标准 SQL亚秒级查询。如果你的场景是实时报表、即席查询或者想统一实时和离线分析的架构Doris 值得试一下。个集群两种进程标准 SQL亚秒级查询。如果你的场景是实时报表、即席查询或者想统一实时和离线分析的架构Doris 值得试一下。