Apache Doris 是一个基于 MPP 架构的易用、高性能和实时的分析型数据库,以其极速和易用性而闻名。它只需亚秒级响应时间即可在海量数据下返回查询结果,不仅可以支持高并发的点查询场景,还能支持高吞吐的复杂分析场景。
这些特性使得 Apache Doris 成为报表分析、即席查询、统一数据仓库和数据湖查询加速等场景的理想工具。用户可以在 Apache Doris 上构建各种应用,如用户行为分析、AB 测试平台、日志检索分析、用户画像分析和订单分析等。
🎉 2.1.4 版本现已发布。请查看 🔗发布说明。2.1 版本在 TPC-DS 1TB 测试中展现出 100% 更高的开箱即用查询性能,增强的数据湖分析速度比 Trino 和 Spark 快 4-6 倍,通过新的 Variant 类型和一套分析函数为半结构化数据分析提供了强大支持,异步物化视图加速查询,优化了大规模实时写入,并通过稳定性和运行时 SQL 资源跟踪改进了工作负载管理。
🎉 2.0.12 版本现已发布!这个全面进化且稳定的版本已准备好供所有用户升级。请查看 🔗发布说明。
👀 请查看 🔗官方网站,了解 Apache Doris 的核心功能、博客和用户案例的完整列表。
📈 使用场景
如下图所示,各种数据源经过整合和处理后,通常存储在实时数据仓库 Apache Doris 和离线数据湖或数据仓库(如 Apache Hive、Apache Iceberg 或 Apache Hudi)中。
Apache Doris 广泛应用于以下场景:
-
报表分析
- 实时仪表盘
- 面向内部分析师和管理者的报表
- 面向高并发用户或客户的报表分析:如网站分析和广告报表,通常需要处理数千 QPS 并要求毫秒级响应时间。一个成功的用户案例是中国电商巨头京东在广告报表中使用 Doris,每天接收 100 亿行数据,处理超过 10,000 QPS,99% 的查询延迟在 150 毫秒以内。
-
即席查询。面向分析师的自助分析,具有不规则的查询模式和高吞吐量要求。小米基于 Doris 构建了一个增长分析平台(Growth Analytics,GA),利用用户行为数据进行业务增长分析,平均查询延迟为 10 秒,95% 的查询延迟在 30 秒以内,每天处理数万次 SQL 查询。
-
统一数据仓库构建。Apache Doris 允许用户通过单一平台构建统一数据仓库,避免了处理复杂软件栈的麻烦。中国火锅连锁海底捞使用 Doris 构建了统一数据仓库,替代了原有的由 Apache Spark、Apache Hive、Apache Kudu、Apache HBase 和 Apache Phoenix 组成的复杂架构。
-
数据湖查询。Apache Doris 通过使用外部表联合 Apache Hive、Apache Iceberg 和 Apache Hudi 中的数据,避免了数据复制,从而实现了出色的查询性能。
🖥️ 核心概念
📂 Apache Doris 的架构
Apache Doris 的整体架构如下图所示。Doris 的架构非常简单,只有两种类型的进程。
-
Frontend (FE):用户请求访问、查询解析和规划、元数据管理、节点管理等。
-
Backend (BE):数据存储和查询计划执行。
这两种类型的进程都可以水平扩展,单个集群可以支持多达数百台机器和数十 PB 的存储容量。这两种进程通过一致性协议保证服务的高可用性和数据的高可靠性。这种高度集成的架构设计大大降低了分布式系统的运维成本。
在接口方面,Apache Doris 采用 MySQL 协议,支持标准 SQL,并与 MySQL 方言高度兼容。用户可以通过各种客户端工具访问 Doris,并支持与 BI 工具的无缝连接。
💾 存储引擎
Doris 使用列式存储引擎,按列对数据进行编码、压缩和读取。这使得压缩比非常高,并大大减少了不相关的数据扫描,从而更有效地利用 IO 和 CPU 资源。Doris 支持各种索引结构以最小化数据扫描:
- 排序复合键索引:用户可以指定最多三列形成复合排序键。这可以有效地裁剪数据,更好地支持高并发报表场景。
- MIN/MAX 索引:这可以有效地过滤数值类型的等值和范围查询。
- 布隆过滤器:对高基数列的等值过滤和裁剪非常有效。
- 倒排索引:这可以实现任何字段的快速搜索。
💿 存储模型
Doris 支持多种存储模型,并针对不同场景进行了优化:
-
聚合键模型:能够合并具有相同键的值列,显著提高性能。
-
唯一键模型:在这个模型中,键是唯一的,具有相同键的数据将被覆盖,以实现行级数据更新。
-
重复键模型:这是一种详细的数据模型,能够详细存储事实表。
Doris 还支持强一致性物化视图。物化视图会自动选择和更新,大大降低了用户的维护成本。
🔍 查询引擎
Doris 在其查询引擎中采用 MPP 模型,实现节点间和节点内的并行执行。它还支持多个大表的分布式 shuffle join,以处理复杂查询。
Doris 查询引擎是向量化的,所有内存结构都以列式格式布局。这可以大大减少虚函数调用,提高缓存命中率,并有效利用 SIMD 指令。在宽表聚合场景下,Doris 的性能比非向量化引擎高 5-10 倍。
Apache Doris 使用自适应查询执行技术,根据运行时统计信息动态调整执行计划。例如,它可以生成运行时过滤器,将其推送到探测端,并自动渗透到底部的扫描节点,这大大减少了探测中的数据量,提高了连接性能。Doris 中的运行时过滤器支持 In/Min/Max/Bloom 过滤器。
🚅 查询优化器
在优化器方面,Doris 使用 CBO 和 RBO 的组合。RBO 支持常量折叠、子查询重写、谓词下推,而 CBO 支持 Join 重排序。Doris 的 CBO 正在不断优化,以实现更精确的统计信息收集和推导,以及更准确的成本模型预测。
技术概述:🔗Apache Doris 简介
🎆 为什么选择 Apache Doris?
-
🎯 易于使用: 两个进程,无其他依赖;在线集群扩展,自动副本恢复;兼容 MySQL 协议,使用标准 SQL。
-
🚀 高性能: 通过列式存储引擎、现代 MPP 架构、向量化查询引擎、预聚合物化视图和数据索引,实现低延迟和高吞吐查询的极快性能。
-
🖥️ 单一统一: 单一系统可支持实时数据服务、交互式数据分析和离线数据处理场景。
-
⚛️ 联邦查询: 支持对 Hive、Iceberg、Hudi 等数据湖以及 MySQL 和 Elasticsearch 等数据库的联邦查询。
-
⏩ 多种数据导入方法: 支持从 HDFS/S3 批量导入和从 MySQL Binlog/Kafka 流式导入;支持通过 HTTP 接口进行微批量写入和使用 JDBC 进行实时写入。
-
🚙 丰富的生态系统: Spark 使用 Spark-Doris-Connector 读写 Doris;Flink-Doris-Connector 使 Flink CDC 能够实现对 Doris 的 exactly-once 数据写入;提供 DBT Doris Adapter 以使用 DBT 在 Doris 中转换数据。
🙌 贡献者
**Apache Doris 已于 2022 年 6 月成功从
我们衷心感谢 🔗社区贡献者 对Apache Doris的贡献。
👨👩👧👦 用户
Apache Doris 目前在中国和全球拥有广泛的用户基础,截至今日,Apache Doris 已在全球数千家公司的生产环境中使用。 中国市值或估值排名前50的互联网公司中,超过80%长期使用Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、新浪、360、米哈游和贝壳控股等。它在金融、能源、制造业和电信等传统行业中也被广泛使用。
Apache Doris 的用户: 🔗用户列表
在Apache Doris网站添加您公司的logo: 🔗添加您的公司
👣 入门
📚 文档
所有文档 🔗文档
⬇️ 下载
所有发布版本和二进制版本 🔗下载
🗄️ 编译
查看如何编译 🔗编译
📮 安装
查看如何安装和部署 🔗安装和部署
🧩 组件
📝 Doris 连接器
Doris 提供了 Spark/Flink 通过连接器读取存储在 Doris 中的数据的支持,同时也支持通过连接器将数据写入 Doris。
🌈 社区和支持
📤 订阅邮件列表
邮件列表是 Apache 社区最受认可的交流形式。查看如何 🔗订阅邮件列表
🙋 报告问题或提交 Pull Request
如果您遇到任何问题,欢迎提交 🔗GitHub Issue 或在 🔗GitHub Discussion 中发帖,并通过提交 🔗Pull Request 来修复它
🍻 如何贡献
我们欢迎您的建议、评论(包括批评)、意见和贡献。查看 🔗如何贡献 和 🔗代码提交指南
⌨️ Doris 改进提案 (DSIP)
🔗Doris 改进提案 (DSIP) 可以被视为 所有重大功能更新或改进的设计文档集合。
🔑 后端 C++ 编码规范
🔗 后端 C++ 编码规范 应被严格遵守,这将帮助我们实现更好的代码质量。
💬 联系我们
通过以下邮件列表联系我们。
名称 | 范围 | |||
---|---|---|---|---|
dev@doris.apache.org | 开发相关讨论 | 订阅 | 取消订阅 | 存档 |
🧰 链接
- Apache Doris 官方网站 - 网站
- 开发者邮件列表 - dev@doris.apache.org。发送邮件至 dev-subscribe@doris.apache.org,按照回复订阅邮件列表。
- Slack 频道 - 加入 Slack
- Twitter - 关注 @doris_apache
📜 许可证
注意 一些第三方依赖的许可证与 Apache 2.0 许可证不兼容。因此,您需要禁用某些 Doris 功能以符合 Apache 2.0 许可证。详情请参阅
thirdparty/LICENSE.txt