Skip to content

Apache Doris

Apache Doris是一个现代化的MPP(大规模并行处理)分析型数据库,基于列式存储引擎,为用户提供高并发、低延迟的实时分析体验。

架构设计

核心组件

  • Frontend (FE) - 元数据管理、查询规划和协调
  • Backend (BE) - 数据存储、查询执行引擎
  • Broker - 外部数据源集成和数据导入

分布式架构

  • Master-Slave模式 - FE高可用架构
  • Share-Nothing - 无共享存储架构
  • MPP执行引擎 - 大规模并行处理
  • 智能路由 - 查询请求智能分发

存储引擎

列式存储

  • 列式压缩 - 高效数据压缩比
  • 向量化计算 - SIMD指令优化
  • 延迟物化 - 按需列读取
  • 谓词下推 - 过滤条件早期执行

数据模型

点击查看完整代码实现
点击查看完整代码实现
sql
-- Aggregate模型 - 预聚合
CREATE TABLE sales_agg (
    date DATE,
    city VARCHAR(50),
    sales_amount BIGINT SUM DEFAULT "0"
)
AGGREGATE KEY(date, city)
DISTRIBUTED BY HASH(date) BUCKETS 8;

-- Unique模型 - 主键唯一
CREATE TABLE user_profile (
    user_id BIGINT,
    name VARCHAR(100),
    age INT,
    update_time DATETIME
)
UNIQUE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 16;

-- Duplicate模型 - 明细数据
CREATE TABLE events_log (
    timestamp DATETIME,
    user_id BIGINT,
    event_type VARCHAR(50),
    properties TEXT
)
DUPLICATE KEY(timestamp, user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 32;

:::

数据导入

批量导入

  • Stream Load - 通过HTTP流式导入
  • Broker Load - 基于Spark/Hadoop批量导入
  • Routine Load - 持续从Kafka消费数据
  • Insert Into - SQL插入语句

实时导入

bash
# Stream Load示例
curl -u user:password -T data.csv \
  -H "label:load_20240101" \
  -H "column_separator:," \
  http://fe_host:8030/api/db_name/table_name/_stream_load

数据格式支持

  • CSV/TSV - 文本格式数据
  • JSON - 结构化JSON数据
  • Parquet - 列式文件格式
  • ORC - 优化的行列式格式

查询优化

Cost-Based Optimizer (CBO)

  • 统计信息收集 - 表和列的统计数据
  • 查询计划优化 - 基于代价的执行计划选择
  • Join顺序优化 - 最优连接顺序
  • 谓词下推 - 过滤条件提前执行

物化视图

sql
-- 创建物化视图
CREATE MATERIALIZED VIEW sales_mv AS
SELECT 
    date_trunc('month', order_date) as month,
    region,
    SUM(sales_amount) as total_sales,
    COUNT(*) as order_count
FROM orders
GROUP BY month, region;

查询加速

  • 结果缓存 - 相同查询结果复用
  • 分区裁剪 - 只扫描相关分区
  • Runtime Filter - 运行时动态过滤
  • 并行执行 - 多线程并行计算

索引技术

BloomFilter索引

sql
-- 创建BloomFilter索引
CREATE TABLE user_events (
    user_id BIGINT,
    event_time DATETIME,
    event_type VARCHAR(50),
    INDEX idx_user_id (user_id) USING BLOOMFILTER
)
DUPLICATE KEY(user_id, event_time);

前缀索引

  • 字符串前缀 - 字符串字段前缀匹配
  • 复合前缀 - 多字段组合前缀
  • 自动优化 - 系统自动选择最优前缀长度

实时分析特性

秒级数据可见

  • 微批处理 - 小批量快速处理
  • 增量更新 - 支持UPSERT操作
  • 事务保证 - 导入过程事务性
  • 一致性读取 - 查询一致性保证

高并发查询

  • 查询队列 - 查询请求排队管理
  • 资源隔离 - 不同用户资源隔离
  • 连接池 - 数据库连接复用
  • 负载均衡 - 查询负载智能分发

SQL兼容性

标准SQL支持

点击查看完整代码实现
点击查看完整代码实现
sql
-- 复杂分析查询
WITH monthly_sales AS (
    SELECT 
        DATE_TRUNC('month', order_date) as month,
        product_category,
        SUM(sales_amount) as monthly_amount
    FROM orders
    WHERE order_date >= '2024-01-01'
    GROUP BY 1, 2
),
growth_rate AS (
    SELECT *,
        LAG(monthly_amount) OVER (
            PARTITION BY product_category 
            ORDER BY month
        ) as prev_month_amount
    FROM monthly_sales
)
SELECT 
    month,
    product_category,
    monthly_amount,
    (monthly_amount - prev_month_amount) * 100.0 / prev_month_amount as growth_rate
FROM growth_rate
WHERE prev_month_amount IS NOT NULL
ORDER BY month DESC, growth_rate DESC;

:::

函数支持

  • 聚合函数 - SUM、COUNT、AVG、MAX、MIN等
  • 窗口函数 - ROW_NUMBER、RANK、LAG、LEAD等
  • 字符串函数 - SUBSTRING、CONCAT、REGEXP等
  • 日期函数 - DATE_FORMAT、DATE_ADD、DATEDIFF等
  • JSON函数 - GET_JSON_STRING、GET_JSON_INT等

管理维护

集群管理

sql
-- 查看集群状态
SHOW FRONTENDS;
SHOW BACKENDS;

-- 节点管理
ALTER SYSTEM ADD BACKEND "host:port";
ALTER SYSTEM DECOMMISSION BACKEND "host:port";

监控指标

  • 查询性能 - QPS、查询延迟、错误率
  • 数据导入 - 导入速度、成功率、错误信息
  • 系统资源 - CPU、内存、磁盘、网络使用率
  • 存储统计 - 数据量、压缩比、副本状态

应用场景

实时数仓

  • ODS层 - 操作数据存储
  • DWD层 - 数据仓库明细层
  • DWS层 - 数据仓库汇总层
  • ADS层 - 应用数据服务层

实时报表

  • 业务大屏 - 实时业务指标展示
  • 运营分析 - 多维度数据分析
  • 用户画像 - 实时用户标签更新
  • 风控监控 - 实时风险指标监控

日志分析

  • 系统日志 - 服务器运行日志分析
  • 应用日志 - 应用程序日志统计
  • 用户行为 - 点击流数据分析
  • 业务审计 - 操作记录审计分析

最佳实践

表设计

  • 选择合适的数据模型(Aggregate/Unique/Duplicate)
  • 合理设计分桶键和分桶数量
  • 优化字段顺序和数据类型
  • 合理使用分区表

性能调优

  • 创建合适的物化视图
  • 使用统计信息优化查询
  • 合理配置集群资源
  • 监控和分析慢查询

Apache Doris凭借其简单易用的架构、优异的查询性能和丰富的生态集成能力,成为现代企业构建实时数据仓库和分析平台的理想选择。

正在精进