Apache Doris是一个基于MPP的现代化、高性能、支持实时的分析型数据库,以极速易用的特性被业内所熟知。以下是对它的详细介绍:
发展历程
Apache Doris最早是诞生于百度广告报表业务的Palo项目,2017年正式对外开源,2018年7月由百度捐赠给Apache基金会进行孵化,2022年6月成功从Apache孵化器毕业,正式成为Apache顶级项目。
特点
- 性能优异:自带高效的列式存储引擎,实现超高的数据压缩比,减少数据扫描量。提供丰富的索引结构,支持在线服务业务的超高并发,单节点最高可支持上千QPS。结合向量化执行引擎,充分发挥现代化CPU并行计算能力,辅以智能物化视图技术实现预聚合加速,并通过查询优化器进行基于规划和基于代价的查询优化。
- 简单易用:支持标准ANSI SQL语法,包括单表聚合、排序、过滤和多表Join、子查询等,还支持窗口函数、Grouping Set等复杂SQL语法。实现了MySQL协议兼容,用户可通过各类客户端工具访问,并支持与BI工具的无缝对接。
- 架构精简:系统只有Frontend(FE)和Backend(BE)两个模块,FE节点负责用户请求的接入、查询计划的解析、元数据存储及集群管理等工作,BE节点负责数据存储和查询计划的执行。任一模块都可以支持横向拓展,集群最高可以拓展到数百个节点,支持存储超过10PB的超大规模数据。
- 稳定可靠:支持数据多副本存储,集群具备自愈功能,分布式管理框架可自动管理数据副本的分布、修复和均衡,副本损坏时系统自动感知并修复。节点扩容时,仅需一条SQL命令即可完成,数据分片会自动在节点间均衡,系统无需停止运行。
- 生态丰富:提供丰富的数据同步方式,支持快速加载来自本地、Hadoop、Flink、Spark、Kafka、SeaTunnel等系统中的数据,也可以直接访问MySQL、PostgreSQL、Oracle、S3、Hive、Iceberg、Elasticsearch等系统中的数据而无需数据复制。存储在Doris中的数据也可以被Spark、Flink读取,并输出给上游数据应用进行展示分析。
应用场景
- 实时数据分析:可实时引入和分析数据流,适用于监控系统、实时用户行为分析等场景,也适用于构建实时可视化仪表盘。
- 数据仓库:支持复杂的OLAP查询,能够处理大规模数据集,提供快速的多维分析和报告生成。支持从各种数据源快速导入数据,并进行清理、聚合和分析。
- 日志分析:能够高效存储和查询大规模的日志数据,支持进行实时查询和分析,帮助快速排查系统故障和进行安全监控。
- 用户行为分析:能分析大规模用户行为数据,支持构建用户画像和个性化推荐系统,适用于电商、内容推荐等场景的实时点击流分析。
- 业务报表:可以与各种BI工具集成,生成各种业务报表和数据洞察,支持决策分析,也能够根据业务需求定制生成各种复杂报表,支持高并发查询 。
- 物联网数据分析:实时处理和分析IoT设备数据,监控设备状态和性能,分析历史数据进行预测性维护和故障预警。
架构设计
- MPP架构:采用大规模并行处理架构,实现节点间和节点内的并行执行。将查询任务分解为多个子任务,在多个节点上同时处理,然后将结果汇总返回,大幅提高查询效率,可应对复杂查询和大规模数据处理。
- FE与BE架构:系统仅由Frontend(FE)和Backend(BE)两个模块构成。FE负责用户请求接入、查询解析规划、元数据管理及集群管理等;BE负责数据存储和查询计划执行,这种架构简单清晰,易于扩展和管理。
存储管理
- 列式存储:按列进行数据的编码压缩和读取,数据压缩比高,可减少大量非相关数据的扫描,有效利用IO和CPU资源,在执行大规模聚合操作时性能优势明显。
- 存储模型:支持多种存储模型,如Aggregate Key模型通过提前聚合相同Key的Value列大幅提升性能;Unique Key模型实现行级别数据更新;Duplicate Key模型满足事实表的明细存储。
- 数据副本与容错:支持数据多副本存储,分布式管理框架自动管理数据副本的分布、修复和均衡,副本损坏时系统自动感知并修复,保证数据的高可用性和可靠性。
索引技术
- Sorted Compound Key Index:最多可指定三个列组成复合排序键,通过该索引能有效进行数据裁剪,更好地支持高并发的报表场景。
- Z-order Index:可对数据模型中的任意字段组合进行范围查询,提高查询效率。
- Min/Max索引:能有效过滤数值类型的等值和范围查询。
- Bloom Filter:对高基数列的等值过滤裁剪非常有效。
- Invert Index:能够对任意字段实现快速检索。
查询优化
- 代价优化器:基于查询的成本估算,选择最优的查询执行计划,综合考虑数据量、索引情况、操作复杂度等因素,生成高效的执行路径。
- 向量化执行引擎:内存结构按列式布局,减少虚函数调用、提升Cache命中率,高效利用SIMD指令,在宽表聚合场景下性能是非向量化引擎的5-10倍。
- 物化视图:支持强一致的物化视图,自动进行物化视图的更新和选择,大幅减少物化视图维护的代价,通过预聚合数据加速查询。
- 自适应查询执行:根据运行时统计信息动态调整执行计划,优化查询性能。
数据导入导出
- Stream Load:支持通过HTTP协议从文件进行快速流式导入,适用于实时数据写入。
- Broker Load:通过配置代理,将数据从HDFS、Kafka等大数据存储系统批量加载到Doris,适用于大规模数据导入。
- Routine Load:支持定时或持续从消息队列如Kafka中导入数据,实现实时数据同步。
- Data Export:支持将数据导出到外部系统或文件,如CSV、Parquet格式等。