“Doris” 是一个用于商业智能(BI)的开源MPP(大规模并行处理)数据库系统,原名 Apache Doris,用于构建数据仓库和进行数据分析。它是一个高性能、易扩展的分析数据库解决方案,支持实时查询和多维数据分析。以下是关于 Doris 的一些详细介绍:

特性

  • 高性能:Doris 设计用于处理大规模数据,提供高并发和低延迟的查询性能。
  • 实时查询:支持接近实时的数据更新和查询,适合需要快速响应的应用场景。
  • 水平扩展性:可以通过增加更多节点来提升系统的处理能力,支持大数据量的处理。
  • 易用性:支持 SQL 查询,与 MySQL 有较高的兼容性,便于用户上手和使用。
  • 多维分析:提供强大的聚合和过滤功能,特别适合进行复杂的数据分析。

应用场景

  • 商业智能(BI):数据仓库的构建,支持复杂的数据分析和报表生成。
  • 实时数据分析:适用于需要快速分析和报告的业务,如电商的用户行为分析、金融市场的实时数据分析等。
  • 大数据场景:能够处理大量数据,适合大规模的日志分析、用户画像等。

核心组件

  • 前端(FE):负责元数据管理、查询计划的生成和优化。它还处理用户的请求和访问控制。
  • 后端(BE):负责数据存储、数据查询处理等。后端通过多个节点进行分布式数据处理,以支持大规模数据的存储和高效查询。
  • Broker:用于数据导入和导出的组件,支持与Hadoop、Spark等其他大数据生态系统中的数据交换。

数据写入流程

Doris 的写入流程设计为高效且适应于频繁和实时数据更新的场景。以下是 Doris 写入流程的主要步骤和组件:

  1. 数据提交
    • 用户提交数据可以通过不同的方式进行,如直接的 SQL INSERT 命令、批量数据加载命令(如 LOAD 命令),或使用外部数据导入工具(如 Stream Load)。
    • 数据可以从多种来源导入,包括批量文件、实时数据流、外部数据库等。
  2. 数据分路(Routing)
    • 提交的数据首先到达 Doris 的前端(FE),FE 负责解析 SQL、生成执行计划以及优化查询。
    • 在写入过程中,FE 会根据数据的分区键将数据路由到对应的后端(BE)节点。Doris 使用哈希或范围分区来决定数据应该存储在哪个分区。
  3. 数据写入和存储
    • 在后端(BE),数据首先被写入到一个内存结构中,通常是一个名为“写前日志”(Write-Ahead Log, WAL)的日志文件,用于确保数据的持久性和在发生故障时能够恢复。
    • 然后,数据被暂存到一个内存表(MemTable)中,在达到一定条件后,MemTable 会被转换成一个不可变的磁盘文件,称为“数据段”(Data Segment)。
  4. 数据压缩和持久化
    • 数据段在存储到磁盘之前,通常会进行压缩和排序,以优化查询性能和减少存储空间。
    • 压缩后的数据段被持久化存储到磁盘上,成为查询时的数据源。
  5. 版本管理和合并
    • Doris 支持多版本并发控制(MVCC),以处理并发写入和读取。
    • 随着时间的推移,多个数据段可能会被合并(Compaction),以优化存储结构和提高查询性能。这个过程包括小文件合并和删除过时的数据版本。
  6. 数据可见性
    • 数据一旦被写入并完成相关的处理步骤后,会被标记为“可见”,这意味着开始对用户的查询可见。

数据读取流程

Doris 的数据读取流程是为了支持高效的查询性能和实时数据分析而设计的。以下是Doris中数据读取的关键步骤和组件:

  1. 查询接收
    • 用户通过 SQL 接口提交查询请求。这些请求首先被发送到 Doris 的前端(FE),FE 负责接收和解析 SQL 查询。
  2. 查询解析与优化
    • 前端(FE)解析接收到的 SQL 查询,生成抽象语法树(AST),然后进一步转换为逻辑查询计划。
    • 逻辑查询计划会经过优化器处理,优化器根据数据分布、索引等信息优化查询路径,比如选择最佳的表连接顺序、选择使用哪些索引等。
  3. 生成执行计划
    • 优化后的逻辑查询计划将被转换为物理执行计划。物理执行计划详细指定了如何在后端(BE)节点上执行查询,包括数据如何分流、哪些操作应在哪个节点上执行等。
  4. 查询分发
    • FE 将物理执行计划分发到适当的后端(BE)节点。Doris 的数据是分布存储的,查询可能需要从多个 BE 节点读取数据以完成。
  5. 数据读取与处理
    • 每个 BE 节点读取其本地存储中与查询相关的数据。这些数据可能是存储在多个不同的数据段中。
    • BE 节点上,数据会经过初步过滤和处理,例如应用谓词下推(Predicate Pushdown),在数据读取时直接在存储层过滤掉不符合条件的数据,减少数据传输的开销。
  6. 聚合与合并
    • 对于需要进行聚合的查询(如 COUNT、SUM 等),各 BE 节点会先在本地进行初步聚合,然后只将必要的数据(如聚合结果)发送回 FE。
    • FE 负责将所有 BE 节点返回的结果合并成最终结果。
  7. 结果返回
    • 经过最终的处理和聚合后,FE 将查询结果返回给用户。
04-13 04:05