总体结构
架构图
作为一个分布式数据库,DingoDB 由多个组件组成。这些组件相互通信,组成一个完整的系统。其架构如下:

组件
1.计算层
计算层是一个无状态 SQL 层,使用 JDBC 协议向外部公开 DingoDB 的连接端点。 Coordinator 接收 SQL 请求,执行 SQL 解析和优化,并最终生成分布式执行计划。 Coordinator 可水平扩展,并通过负载均衡组件(如 Linux 虚拟服务器 (LVS)、HAProxy 或 F5)向外部提供统一接口。 计算层不存储数据,仅用于计算和 SQL 分析,并将实际数据读取请求传送到存储层。
Executor
Executor 充当 SQL 服务器,解析并响应来自客户端的 SQL 请求和其他管理请求,实现 JDBC 协议;执行任务管理,实现任务的分布式执行;通过 SDK 调用下层 Meta、Store API,实现数据库功能。
Dingo Proxy
作为矢量操作的桥接层,为 Python SDK 提供 HTTP/gRPC 接口。
2.存储层
存储层支持行存储和列存储模式。行模式支持高频插入和更新,列模式支持交互式分析和多维实时聚合分析等。
Coordinator
Coordinator 负责元数据管理,记录表结构并决定数据在存储节点中的分布;执行调度管理,负责分配和管理数据片;通过接收存储节点的心跳来监控集群状态;此外还提供全局服务。
Store
在行存储模式下,store 是嵌入 Executor 的分布式键值存储引擎。region 是存储和复制数据的基本单位。每个 region 存储特定 "键范围 "的数据。"键范围 "是从 StartKey 到 EndKey 之间的一个左闭右开的区间。每个 Executor 节点都有多个region。Executor API 为操作符数据提供本地支持,如 get、put、scan、iterator等。
3.客户端
在 DingoDB 集群之外,你可以使用客户端连接到 DingoDB 进行分析。客户端有 Jdbc 驱动和 Sqlline 模式。
JDBC Driver
JDBC 是 Java Database Connectivity(Java 数据库连接)的缩写,它是一种标准的 Java API,用于在 Java 编程语言和各种数据库之间建立独立于数据库的连接。DingoDB是一个灵活的分布式数据库,你可以使用任何嵌入dingo-thin-client的数据库工具来连接DingoDB,比如通用数据库工具dbeaver。
Sqlline
SQLLine 是一款基于纯 Java 的控制台工具,用于连接 DingoDB 并执行 SQL 命令。它是通过开源项目 sqlline 实现的。