# kkdb **Repository Path**: lorand/kkdb ## Basic Information - **Project Name**: kkdb - **Description**: 数据库内核 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-11-26 - **Last Updated**: 2025-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [toc] # 1 概述 ## 1.1 仓库 kkdb 是一个开源微型数据库项目,由 C 语言实现,由 lorand 独立开发。 kkdb 具备基本的数据库功能,包括: 1. 基本语法:支持CREATE / INSERT / SELECT / UPDATE / DELETE等语法 2. 并发 3. 事务 4. 故障恢复 5. 缓存 ## 1.2 作者 作者从事数据库内核开发功能,在开发项目的过程中,多处实现机制参考 postgresql 相关机制。 # 2 编译安装 # 3 使用 ## 3.1 初始化数据库 ## 3.2 启动数据库 ## 3.3 执行SQL语句 ## 3.4 完整SQL语法 # 4 功能介绍 ## 4.1 初始化 ```bash # 系统表 sys_class: 存储所有表 sys_attr: 存储所有列 dbinit ls ~/dbdata ``` ## 4.2 基本SQL语法 - CREATE ```bash 输入:CREATE TABLE t1 (c1 INT, c2 TEXT); 语法解析:表名、列名、列数据类型 系统表:存储表信息、列信息 表文件:创建文件 ``` - INSERT ```bash 输入:INSERT INTO t1 VALUES (1, 'first') 语法解析:表名、列数据 数据处理:封装数据 表文件:写入数据 ``` - SELECT ```bash 输入:SELECT * FROM t1 语法解析:表名、列 表文件:读取数据 数据处理:解析数据 ``` - UPDATE - DELETE - DROP ## 4.3 并发访问 - CS模式 - 服务器 ```bash dbserver start ``` - 客户端 ```bash dbclient 127.0.0.1 8888 SELECT * FROM t1; ``` - 服务器多线程 ```bash dbclient 127.0.0.1 8888 dbclient 127.0.0.1 8888 ``` > 输出:服务端sprintf,然后发至客户端 ## 4.4 事务 - 原子性、隔离性:事务ID、事务快照、可见性 ```bash # 原子性 BEGI INSERT INTO t1 VALUES (3, 'three') INSERT INTO t1 VALUES (4, 'four') ROLLBACK # 隔离性性 dbclient BEGIN INSERT INTO t1 VALUES (5, 'five') INSERT INTO t1 VALUES (6, 'six') COMMIT dbclient SELECT * FROM t1 SELECT * FROM t1 ``` ## 4.5 高性能(缓存) - 异步落盘:buffer pool ```bash dbclient CONFIG checkpoint = 10min INSERT INTO t1 VALUES (7, 'seven') hexdump t1 CHECKPOINT hexdump t1 ``` ## 4.6 故障恢复 - 预写日志 ```bash dbclient INSERT INTO t1 VALUES (8, 'eight') cat xlog ``` - 故障恢复 ```bash kill dbserver dbserver 127.0.0.1 8888 hexdump t1 SELECT * FROM t1 ``` ## 4.7 基本运算 - 投影 ```bash SELECT c2 FROM t2; ``` - 选择 - 内置函数 ```bash SELECT is_str(c1) FROM t1; ``` - WHERE子句 ```bash SELECT * FROM t1 WHERE c1 > 10 SELECT * FROM t1 WHERE is_bigger(c1, 10); ``` - 限制 ```bash SELECT * FROM t1 WHERE c1 > 10 LIMIT 1; ``` - 执行器 ```bash for (;;) scan filter qual ``` ## 4.8 高性能 (索引) - 索引 ```bash CREATE INDEX ON t1(c1); SELECT * FROM t1 WHERE c1 = 666; ``` ## 4.9 JOIN ## 4.10 优化器 # 5 整体架构 1. 系统表管理 2. 执行模块 - 解析器 - 分析器 - 重写器 - 优化器 - 执行器 3. 存储模块 - page管理 - tuple管理 - 存储管理