FnckSQL 是什么

FnckSQL 是由个人开发者出于爱好独立实现的基于 LSM KV 的 SQL 数据库管理系统。这个 SQL 数据库将向你证明任何人都可以编写数据库(即使是核心作者也找不到工作)。如果你是数据库相关的爱好者,让我们一起向这个“美好”的行业竖起中指🖕。

欢迎访问我们的网站,由 FnckSQL 提供动力: http://www.kipdata.site/

快速开始

提示:首先安装 Rust 工具链。

克隆仓库

  1. git clone https://github.com/KipData/FnckSQL.git

start

然后使用 psql 进入 SQL 环境 pg

在代码中使用 FnckSQL

  1. let fnck_sql = DataBaseBuilder::path("./data")
  2. .build()
  3. .await?;
  4. let tuples = fnck_sql.run("select * from t1").await?;

支持的存储:

  • KipDB

Docker

拉取镜像

  1. docker pull kould23333/fncksql:latest

从源代码构建

  1. git clone https://github.com/KipData/FnckSQL.git
  2. cd FnckSQL
  3. docker build -t kould23333/fncksql:latest .

运行

我们在镜像中安装了 psql 工具,方便调试。

你可以使用 psql -h 127.0.0.1 -p 5432 来这样做。

  1. docker run -d \
  2. --name=fncksql \
  3. -p 5432:5432 \
  4. --restart=always \
  5. -v fncksql-data:/fnck_sql/fncksql_data \
  6. -v /etc/localtime:/etc/localtime:ro \
  7. kould23333/fncksql:latest

特性

  • ORM 映射:features = ["marcos"] ```rust

    [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; } } ) );

  1. - 用户定义函数:`features = ["marcos"]`
  2. ```rust
  3. function!(TestFunction::test(LogicalType::Integer, LogicalType::Integer) -> LogicalType::Integer => |v1: ValueRef, v2: ValueRef| {
  4. let plus_binary_evaluator = EvaluatorFactory::binary_create(LogicalType::Integer, BinaryOperator::Plus)?;
  5. let value = plus_binary_evaluator.binary_eval(&v1, &v2);
  6. let plus_unary_evaluator = EvaluatorFactory::unary_create(LogicalType::Integer, UnaryOperator::Minus)?;
  7. Ok(plus_unary_evaluator.unary_eval(&value))
  8. });
  9. let fnck_sql = DataBaseBuilder::path("./data")
  10. .register_function(TestFunction::new())
  11. .build()
  12. .await?;
  • 优化器

    • RBO
    • 基于 RBO 的 CBO(物理选择)
  • 执行

    • Volcano
    • LuaJIT 上的代码生成:features = ["codegen_execute"]
  • MVCC 事务

    • 乐观锁
  • 字段选项

    • [not] null
    • unique
    • primary key
  • SQL where 选项

    • is [not] null
    • [not] like
    • [not] in
  • 支持索引类型

    • PrimaryKey
    • Unique
    • Normal
    • Composite
  • 支持多种主键类型

    • Tinyint
    • UTinyint
    • Smallint
    • USmallint
    • Integer
    • UInteger
    • Bigint
    • UBigint
    • Char
    • Varchar
  • DDL

    • Begin(仅限服务器)
    • Commit(仅限服务器)
    • Rollback(仅限服务器)
    • Create
      • 索引:Unique\Normal\Composite
    • Drop
      • 索引
    • Alter
      • 添加列
      • 删除列
    • 清空
  • DQL

    • Select
      • SeqScan
      • IndexScan
    • Where
    • Distinct
    • 别名
    • 聚合:count()/sum()/avg()/min()/max()
    • 子查询[select/from/where]
    • Join:Inner/Left/Right/Full/Cross (Natural\Using)
    • Group By
    • Having
    • Order By
    • Limit
    • 显示表
    • 解释
    • 描述
    • Union
  • DML

    • Insert
    • Insert Overwrite
    • Update
    • Delete
    • 分析
  • 数据类型

    • Invalid
    • SqlNull
    • Boolean
    • Tinyint
    • UTinyint
    • Smallint
    • USmallint
    • Integer
    • UInteger
    • Bigint
    • UBigint
    • Float
    • Double
    • Char
    • Varchar
    • Date
    • DateTime
    • Time
    • Tuple

路线图

  • SQL 2016

许可证

FnckSQL 使用 Apache 2.0 许可证,在开放贡献和允许你随意使用该软件之间取得平衡。

贡献者

感谢

  • Fedomn/sqlrs:主要参考资料,优化器和执行器都参考了 sqlrs 的设计
  • systemxlabs/bustubx
  • duckdb/duckdb