14 个版本
新 0.0.3 | 2024 年 8 月 17 日 |
---|---|
0.0.2 | 2024 年 8 月 11 日 |
0.0.1-alpha.15 | 2024 年 4 月 5 日 |
0.0.1-alpha.14 | 2024 年 3 月 19 日 |
0.0.1-alpha.9 | 2024 年 1 月 28 日 |
#239 in 数据库接口
每月 354 次下载
2MB
24K SLoC
Built by @KipData ███████╗███╗ ██╗ ██████╗██╗ ██╗ ███████╗ ██████╗ ██╗ ██╔════╝████╗ ██║██╔════╝██║ ██╔╝ ██╔════╝██╔═══██╗██║ █████╗ ██╔██╗ ██║██║ █████╔╝ ███████╗██║ ██║██║ ██╔══╝ ██║╚██╗██║██║ ██╔═██╗ ╚════██║██║▄▄ ██║██║ ██║ ██║ ╚████║╚██████╗██║ ██╗ ███████║╚██████╔╝███████╗ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝ ╚══════╝ ╚══▀▀═╝ ╚══════╝ ----------------------------------- 🖕
轻量级数据库管理系统
什么是 FnckSQL
FnckSQL 是一个高性能的 SQL 数据库,可以嵌入到 Rust 代码中(默认基于 RocksDB),使您可以像调用函数一样调用 SQL。它支持 SQL 2016 的大多数语法。
快速入门
提示:首先安装 rust 工具链和 llvm。
克隆仓库
git clone https://github.com/KipData/FnckSQL.git
在代码中使用 FnckSQL
let fnck_sql = DataBaseBuilder::path("./data").build()?;
let tuples = fnck_sql.run("select * from t1")?;
PG Wire 服务
运行 cargo run --features="net"
启动服务器 然后使用 psql
进入 SQL
存储支持
- RocksDB
Docker
拉取镜像
docker pull kould23333/fncksql:latest
从源码构建
git clone https://github.com/KipData/FnckSQL.git
cd FnckSQL
docker build -t kould23333/fncksql:latest .
运行
我们在镜像中安装了 psql
工具,以便于调试。
您可以使用 psql -h 127.0.0.1 -p 5432
来执行此操作。
docker run -d \
--name=fncksql \
-p 5432:5432 \
--restart=always \
-v fncksql-data:/fnck_sql/fncksql_data \
-v /etc/localtime:/etc/localtime:ro \
kould23333/fncksql:latest
特性
- ORM 映射:
features = ["marcos"]
#[derive(Default, Debug, PartialEq)]
struct MyStruct {
c1: i32,
c2: String,
}
implement_from_tuple!(
MyStruct, (
c1: i32 => |inner: &mut MyStruct, value| {
if let DataValue::Int32(Some(val)) = value {
inner.c1 = val;
}
},
c2: String => |inner: &mut MyStruct, value| {
if let DataValue::Utf8(Some(val)) = value {
inner.c2 = val;
}
}
)
);
- 用户定义函数:
features = ["marcos"]
function!(TestFunction::test(LogicalType::Integer, LogicalType::Integer) -> LogicalType::Integer => |v1: ValueRef, v2: ValueRef| {
let plus_binary_evaluator = EvaluatorFactory::binary_create(LogicalType::Integer, BinaryOperator::Plus)?;
let value = plus_binary_evaluator.binary_eval(&v1, &v2);
let plus_unary_evaluator = EvaluatorFactory::unary_create(LogicalType::Integer, UnaryOperator::Minus)?;
Ok(plus_unary_evaluator.unary_eval(&value))
});
let fnck_sql = DataBaseBuilder::path("./data")
.register_function(TestFunction::new())
.build()?;
- 优化器
- RBO
- 基于RBO(物理选择)的CBO
- 执行
- 火山模型
- MVCC事务
- 乐观
- 字段选项
- [非]空
- 唯一
- 主键
- SQL WHERE选项
- 是[非]空
- [非]LIKE
- [非]IN
- 支持索引类型
- 主键
- 唯一
- 普通
- 组合
- 支持多主键类型
- 小整数
- 无符号小整数
- 短整数
- 无符号短整数
- 整数
- 无符号整数
- 长整数
- 无符号长整数
- 字符
- 可变长度字符
- DDL
- 开始(仅服务器端)
- 提交(仅服务器端)
- 回滚(仅服务器端)
- 创建
- 表
- 索引:唯一\普通\组合
- 删除
- 表
- 索引
- 警报
- 添加列
- 删除列
- 截断
- DQL
- 选择
- 顺序扫描
- 索引扫描
- WHERE
- 唯一
- 别名
- 聚合:count()/sum()/avg()/min()/max()
- 子查询select/from/where
- 连接:内部/左/右/全/交叉(自然\使用)
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
- 显示表
- 解释
- 描述
- UNION
- 选择
- DML
- 插入
- 插入覆盖
- 更新
- 删除
- 分析
- 数据类型
- 无效
- SqlNull
- 布尔值
- 小整数
- 无符号小整数
- 短整数
- 无符号短整数
- 整数
- 无符号整数
- 长整数
- 无符号长整数
- 浮点数
- 双精度浮点数
- 字符
- 可变长度字符
- 日期
- 日期时间
- 时间
- 元组
路线图
- SQL 2016
许可
FnckSQL使用Apache 2.0许可在开源贡献和允许您按需使用软件之间取得平衡。
贡献者
感谢
- Fedomn/sqlrs:主要参考资料,优化器和执行器均参考了sqlrs的设计
- systemxlabs/bustubx
- duckdb/duckdb
依赖
~35–50MB
~865K SLoC