跳转到主要内容

结构概述

Databend is an open-source Elastic and Workload-Aware modern cloud data warehouse focusing on Low-Cost and Low-Complexity for your massive-scale analytics needs.

Databend uses the latest techniques in vectorized query processing to allow you to do blazing-fast data analytics on object storage: (S3, Azure Blob, Google Cloud Storage, Alibaba Cloud OSS, Tencent Cloud COS, Huawei Cloud OBS, Cloudflare R2, Wasabi or MinIO).

  • Feature-Rich

    Support SELECT/INSERT/DELETE/UPDATE/COPY/ALTER, Time Travel, Multi Catalog(Apache Hive/Apache Iceberg).

  • 即时弹性

    Databend 将存储与计算机完全分离,可以根据您的应用程序的需要轻松扩展。

  • 性能强劲

    Databend 利用数据平行(Vectorized Query Execution) 和指令平行技术(SIMD),提供令人惊喜的数据分析能力。

  • Git-like MVCC Storage

    Databend stores data with snapshots. It's easy to query, clone, and restore historical data in tables.

  • 支持半结构化数据

    Databend supports ingestion of semi-structured data in various formats like CSV, JSON, and Parquet, which are located in the cloud or your local file system; Databend also supports semi-structured data types: ARRAY, MAP, JSON, which is easy to import and operate on semi-structured.

  • 简单易用

    Databend has no indexes to build, no manual tuning required, no manual figuring out partitions or shard data, it’s all done for you as data is loaded into the table.

设计概览

这是 Databend 整体架构设计。 它由三个部分组成:

  • Meta 业务层
  • 计算层
  • 存储层

Databend 架构

Meta 业务层

Databend Meta 是服务多个租户的业务。 实现一个持久的密钥值存储来存储每个租户的状态。 在目前的实现中,Databend Meta 业务集群有许多节点组成部分:

  • Databend Meta 用于管理数据库、表格、集群、交易等所有元数据等。
  • 储存用户信息、用户管理、访问控制信息、使用情况统计等,用于管理行为需要信息。
  • 安全性,执行授权和身份验证,以保护用户数据的隐私。

Meta 业务层 的代码主要位于资源库的 Metasrv 目录。

计算层

计算层是用于查询处理的计算层。 计算层可能由许多集群组成,每个集群可能由许多节点组成。 每个节点是一个计算单位,是一个组件库:

  • Planner

    Planner 根据用户的 SQL 语句使用不同类型的关系运算符构建执行计划,例如 ProjectionFilterLimit, 等。

    例如:

    databend :) EXPLAIN SELECT avg(number) FROM numbers(100000) GROUP BY number % 3
    ┌─explain─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │ Projection: avg(number):Float64 │
    │ AggregatorFinal: groupBy=[[(number % 3)]], aggr=[[avg(number)]] │
    │ AggregatorPartial: groupBy=[[(number % 3)]], aggr=[[avg(number)]] │
    │ Expression: (number % 3):UInt8, number:UInt64 (Before GroupBy) │
    │ ReadDataSource: scan schema: [number:UInt64], statistics: [read_rows: 100000, read_bytes: 800000, partitions_scanned: 11, partitions_total: 11], push_downs: [projections: [0]] │
    └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
  • 优化器

    一个基于规则的优化器,一些规则,例如基于请求裁剪没有访问到的列等。

  • 处理器

    基于 Pull&Push 的查询执行管道,由 planner 指令构建。 每个管道执行器是一个处理器(如SourceTransform、FilterTransform等),它有零个或多个输入和零个或多个输出,并连接成一个管道,它也可以根据你的查询工作量分布在多个节点上。

    例如:

    databend :) EXPLAIN PIPELINE SELECT avg(number) FROM numbers(100000) GROUP BY number % 3
    ┌─explain────────────────────────────────────────────────────────────────────────────────┐
    │ ProjectionTransform × 16 processors │
    │ Mixed (GroupByFinalTransform × 1 processor) to (ProjectionTransform × 16 processors) │
    │ GroupByFinalTransform × 1 processor │
    │ Merge (GroupByPartialTransform × 16 processors) to (GroupByFinalTransform × 1) │
    │ GroupByPartialTransform × 16 processors │
    │ ExpressionTransform × 16 processors │
    │ SourceTransform × 16 processors │
    └────────────────────────────────────────────────────────────────────────────────────────┘

节点是计算层中最小的单位。 一组节点可以通过命名空间注册为一个集群。 许多集群可以附加相同的数据库,这样它们就可以由不同的用户并行地为查询服务。 当您将新节点添加到集群时,当前正在运行的计算任务可以得到扩展(称为工作窃取)保证。

计算层代码主要在 query 目录。

存储层

Databend 将数据以高效率的列格式存储为 Parquet 文件。 为了高效访问,Databend 还为每个parquet文件创建索引:

  • min_max.idx 索引文件存储这个parquet 文件的最小值和最大值。
  • sparse.idx 索引文件存储每 [N] 条记录的粒度的 “key, parquet-page” 映射。

使用索引,我们可以通过降低 I/O 和 CPU 成本来加快查询速度。 假如Parquet 文件 f1 有 min_max. dx [3, 5],Parquet 文件 f2 有 min_max. dx[4, (6) 列中 x。如果查询条件是 WHERE x < 4,则仅需要访问 f1 文件即可。

入门指南

社区

Roadmap

授权

Databend 由 Apache 2.0 授权。

鸣谢