ColumnDB

高性能列式数据库 · 参考 ClickHouse 设计 · Go 语言实现 · OLAP 分析型查询

18+
核心模块
10+
数据类型
4
压缩算法
7
JOIN 类型

产品概述

ColumnDB 是一款自主研发的高性能列式分析型数据库系统,采用 Go 语言编写,参考 ClickHouse 的列式存储与向量化执行架构。产品专为 OLAP(在线分析处理) 场景设计,支持完整的 SQL 语法、多表 JOIN、聚合分析、数据压缩等核心功能。

ColumnDB 定位于大数据分析、BI 报表、数据仓库、日志分析、指标聚合等场景。采用列式存储大幅减少 I/O,配合多种压缩算法和向量化执行引擎,在分析型查询上可实现比行存数据库数十倍到数百倍的性能提升。

技术架构

客户端层
SQL CLI 客户端 TCP 客户端 自定义二进制协议
查询执行层
SQL 词法/语法分析 AST 生成 查询计划优化 向量化执行
计算引擎层
表达式求值 聚合框架 JOIN 引擎 排序引擎 内置函数库
存储管理层
列向量存储 数据块管理 数据分区 文件存储 WAL 预写日志
基础设施层
数据类型系统 位图/跳表/B+树索引 压缩算法 LRU/LFU 缓存 内存池 事务管理 监控系统

核心特性

📊 列式存储

数据按列存储,查询时只读取涉及的列,大幅减少磁盘 I/O 和内存占用。支持固定大小列向量和可变大小列向量,提供 Append、Get、Set、Slice、Concat 等高效列操作。

⚡ 向量化执行

批量处理数据而非逐行处理,充分利用 CPU SIMD 指令和缓存行,提升 CPU 利用率,在分析型查询上实现数量级性能提升。

🔍 SQL 解析器

完整的 SQL 词法分析器和递归下降语法分析器,生成 AST 语法树。支持 SELECT、INSERT、CREATE TABLE、DROP TABLE、ALTER TABLE 等 SQL 语句。

📈 查询优化

基于规则的查询优化器,支持谓词下推(Predicate Pushdown)、投影下推(Projection Pushdown)、列裁剪(Column Pruning)、常量折叠(Constant Folding)。

🌳 多类型索引

支持位图索引(低基数列快速 AND/OR/XOR)、跳表索引(高基数列 O(log n) 查找)、B+树索引(范围查询),自动选择最优索引。

🗜️ 数据压缩

内置 4 种压缩算法:Delta 编码(差分编码)、RLE(游程编码)、Dictionary 编码(字典编码)、FOR 编码(Frame Of Reference),大幅减少存储空间。

🔗 JOIN 支持

支持 7 种 JOIN 类型:INNER、LEFT、RIGHT、FULL、SEMI、ANTI、CROSS。实现嵌套循环 JOIN 和交叉 JOIN,配合 JOIN 优化器自动选择最优执行策略。

📊 聚合框架

支持 COUNT、SUM、AVG、MIN、MAX、STDDEV、VARIANCE 等聚合函数,支持无分组聚合和 GROUP BY 分组聚合,满足各种统计分析需求。

🔢 数据类型

丰富的数据类型系统:Int8/16/32/64、Float32/64、String、Bool、Date、DateTime 等基础类型,以及 Array、Tuple、Map、Nullable、LowCardinality 等复合类型。

🔒 事务支持

完整的事务管理:Begin、Commit、Rollback。支持 4 种隔离级别:ReadUncommitted、ReadCommitted、RepeatableRead、Serializable。支持共享锁、排他锁和死锁检测。

💾 持久化与 WAL

WAL 预写日志记录所有数据变更,支持 CRC32 校验和、文件轮转、崩溃恢复。数据块持久化到磁盘,支持校验和验证数据完整性。

📈 监控系统

内置指标注册表(Counter、Gauge),预定义查询、连接、行、字节、错误、缓存等指标。支持系统统计(Goroutine、内存、GC)和健康检查。

快速开始

1. 启动服务器

# 启动 ColumnDB 服务器 cd columndb go run cmd/server/main.go # 或使用 Makefile make run

2. 连接客户端

# 启动 SQL CLI 客户端 go run cmd/cli/cli.go

3. SQL 示例

# 创建表 CREATE TABLE orders ( id Int64, user_id Int64, amount Float64, status String, created_at DateTime ); # 插入数据 INSERT INTO orders VALUES (1, 100, 99.99, 'completed', '2024-01-15 10:30:00'), (2, 101, 199.50, 'pending', '2024-01-15 11:00:00'); # 分析查询 SELECT status, COUNT(*) as cnt, SUM(amount) as total FROM orders WHERE created_at >= '2024-01-01' GROUP BY status ORDER BY total DESC; # JOIN 查询 SELECT u.name, COUNT(o.id) as order_count FROM users u INNER JOIN orders o ON u.id = o.user_id GROUP BY u.name;

产品对比

特性ColumnDBClickHouse
存储方式列式存储列式存储
执行方式向量化执行向量化执行
SQL 支持完整 SQL 解析器扩展 SQL
JOIN7 种 JOIN 类型多种 JOIN
压缩算法Delta/RLE/Dictionary/FORLZ4/ZSTD 等
索引位图/跳表/B+树稀疏索引/主键索引
事务4 种隔离级别有限事务支持
语言GoC++
数据分区范围/列表/哈希分区键
开源协议MITApache 2.0

立即下载

选择合适的方式获取 ColumnDB

📦 下载完整项目

版本: v1.1.0 | 平台: Windows/Linux/macOS | 语言: Go 1.21+

包含: 服务器 + CLI 客户端 + 配置文件 + 完整文档 + 测试用例