Doris(原百度Palo)是一款基于大规模并行处理(MPP)技术的分布式SQL数据库,也是一个高性能、实时的分析型数据库。以下是对Doris数据仓库的详细介绍:
一、产品定位与特点
-
产品定位:Doris是一款MPP架构的关系型分析数据库,主要面向PB级别的大数据集,提供秒级或毫秒级的查询响应。它主要用于多维分析和报表查询,支持SQL语言,并高度兼容MySQL。
-
主要特点:
- 高性能:Doris设计用于处理大规模数据,提供高并发和低延迟的查询性能。
- 实时性:支持接近实时的数据更新和查询,适合需要快速响应的应用场景。
- 易用性:支持SQL查询,与MySQL有较高的兼容性,便于用户上手和使用。
- 可扩展性:可以通过增加更多节点来提升系统的处理能力,支持大数据量的处理。
- 数据可靠性:内部自行管理数据的多副本和自动修复,保证数据的高可用和高可靠。
二、整体架构
Doris的架构非常简洁,只设FE(Frontend)和BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。
- FE(Frontend):负责元数据的管理、存储,以及查询的解析、规划和调度。FE节点接收用户的查询请求,解析并生成查询计划,然后调度BE节点执行查询并返回结果。
- BE(Backend):负责数据的存储和查询计划的执行。BE节点依据FE生成的物理计划,分布式地执行查询,并将结果返回给FE。
三、数据分布与存储
- 数据分布:在Doris中,用户的一张Table会拆成多个Tablet,Tablet会存成多副本,存储在不同的BE中,从而保证数据的高可用和高可靠。
- 存储方式:Doris采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用IO和CPU资源。
四、数据模型
Doris支持多种存储模型,针对不同的场景做了针对性的优化:
- Aggregate Key模型:相同Key的Value列合并,通过提前聚合大幅提升性能。适合有固定模式的报表类查询场景。
- Unique Key模型:Key唯一,相同Key的数据覆盖,实现行级别数据更新。主要面向留存分析或者订单分析的场景。
- Duplicate Key模型:明细数据模型,满足事实表的明细存储。适用于既没有聚合需求,又没有主键唯一性约束的原始数据的存储。
五、关键技术
- 索引结构:Doris支持丰富的索引结构,来减少数据的扫描。包括Z-order Index、Min/Max、Bloom Filter和Invert Index等。
- 物化视图:Doris支持强一致的物化视图,物化视图的更新和选择都在系统内自动进行,不需要用户手动选择,从而大幅减少了物化视图维护的代价。
- 查询引擎:Doris采用MPP的模型,节点间和节点内都并行执行,支持多个大表的分布式Shuffle Join,从而能够更好应对复杂查询。
- 动态调整执行计划:Doris采用了Adaptive Query Execution技术,可以根据Runtime Statistics来动态调整执行计划,比如通过Runtime Filter技术能够在运行时生成Filter推到Probe侧,从而大幅度减少Probe的数据量,加速Join性能。
六、使用场景
Doris广泛应用于各种需要高性能、实时查询和多维数据分析的场景,如用户行为分析、日志检索平台、用户画像分析、订单分析等。
综上所述,Doris是一款功能强大、性能卓越的分析型数据库,能够满足各种大数据分析和实时查询的需求。