rustminidb 0.1.0

A lightweight embedded database with native REST API
docs.rs failed to build rustminidb-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

RustMinidb

轻量级嵌入式关系型数据库 · 原生 REST API · 单文件存储

RustMinidb 是一个使用 Rust 编写的轻量级嵌入式关系型数据库,基于 redb 存储引擎(ACID、MVCC、单文件)。原生内置 HTTP REST API 服务器,适合物联网、边缘计算和嵌入式场景。


特性

⚡ 核心能力

特性 说明
嵌入式 无需独立服务进程,可作为 Rust 库直接嵌入你的程序
SQL 支持 标准 SQL 语法(CREATE / INSERT / SELECT / UPDATE / DELETE / DROP)
ACID 事务 基于 redb 引擎,支持原子性、一致性、隔离性、持久性
MVCC 多版本并发控制,读写互不阻塞
单文件存储 整个数据库存储在一个 .db 文件中,零配置
多数据类型 INTEGER、FLOAT、TEXT、BLOB、BOOLEAN、TIMESTAMP

🌐 REST API 服务器

公开端点(免认证):

端点 方法 说明
/ GET Web 管理后台页面
/v1/health GET 健康检查(负载均衡器监控)

需认证端点(Bearer Token):

端点 方法 说明
/v1/query POST 执行 SQL 语句
/v1/tables GET 列出所有表
/v1/schema/{table} GET 查看指定表结构
/v1/export GET 导出数据库为 SQL
/v1/metrics GET 运行时监控指标
/v1/databases GET 多数据库管理
/v1/import POST 数据导入

🛠️ 实用工具

  • 交互式 Shell — 类似 sqlite3 的命令行控制台
  • SQL 导出迁移 — 支持 Standard / MySQL / PostgreSQL / SQLite 四种方言
  • 监控仪表盘 — 运行时 QPS、延迟、连接数等指标
  • 彩色 Banner — 增强型启动欢迎画面(ANSI 彩色 Logo)
  • 请求追踪 — UUID 级请求链路追踪
  • 🔒 API 认证 — Bearer Token 保护全部数据接口

使用场景

场景 说明
🔌 物联网 / 边缘计算 嵌入式设备上的本地数据存储,通过 REST API 远程查询
📱 移动 / 桌面应用 作为应用内数据库,替代 SQLite 的 Rust 原生方案
🧪 测试 / 原型开发 快速搭建数据层原型,无需安装独立数据库
🔐 嵌入式安全场景 单文件加密存储,无网络端口暴露(library 模式)
📦 CI/CD 管道 轻量级测试数据库,毫秒级启动

快速开始

安装

方式一:下载预编译二进制

Releases 下载对应平台的二进制文件。

方式二:从源码编译

# 确保已安装 Rust 工具链(https://rustup.rs)
cargo install rustminidb

方式三:作为依赖库(Cargo)

[dependencies]
rustminidb = "0.1"

基本使用

🔹 命令行模式

# 初始化数据库
rustminidb init --db mydata.db

# 执行单条 SQL
rustminidb exec --db mydata.db "CREATE TABLE sensors (id INT PRIMARY KEY, value FLOAT)"
rustminidb exec --db mydata.db "INSERT INTO sensors VALUES (1, 25.6)"
rustminidb exec --db mydata.db "SELECT * FROM sensors"

# 启动交互式 Shell
rustminidb shell --db mydata.db

# 启动 HTTP 服务器(无认证,仅限开发环境)
rustminidb serve --host 0.0.0.0 --port 8080 --db mydata.db

# 启动 HTTP 服务器(推荐:开启 Bearer Token 认证)
rustminidb serve --host 0.0.0.0 --port 8080 --db mydata.db --api-token "your-secret-token"

# 也可通过环境变量设置 Token(避免命令行泄露)
set RUSTMINIDB_API_TOKEN=your-secret-token
rustminidb serve --host 0.0.0.0 --port 8080 --db mydata.db

# 导出数据库为 SQL
rustminidb export --db mydata.db --output backup.sql

# 查看版本
rustminidb version

🔹 交互式 Shell 命令

shell 模式下可使用以下内置命令:

命令 说明
.tables 列出所有表
.schema 查看所有表结构
.monitor 显示运行时指标
.export 导出整个数据库为 SQL
.exit / .quit 退出 Shell
.help 显示帮助

🔹 REST API 使用

# 启动服务器(推荐开启认证)
rustminidb serve --host 0.0.0.0 --port 8080 --db mydata.db --api-token "my-secret-token"

# 执行 SQL(需在请求头中携带 Token)
curl -X POST http://localhost:8080/v1/query \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer my-secret-token" \
  -d '{"sql": "SELECT * FROM sensors"}'

# 健康检查(公开端点,无需 Token)
curl http://localhost:8080/v1/health

# 查看监控指标(需 Token)
curl -H "Authorization: Bearer my-secret-token" http://localhost:8080/v1/metrics

# 导出数据库(需 Token)
curl -H "Authorization: Bearer my-secret-token" http://localhost:8080/v1/export

🔹 嵌入式 Rust 库

use rustminidb::Database;

// 打开数据库
let db = Database::open("mydata.db").unwrap();

// 建表
db.execute("CREATE TABLE sensors (id INT PRIMARY KEY, value FLOAT)").unwrap();

// 插入数据
db.execute("INSERT INTO sensors VALUES (1, 25.6)").unwrap();

// 查询数据
let rows = db.query("SELECT * FROM sensors").unwrap();
for row in rows {
    println!("{:?}", row);
}

🔒 安全

API 访问认证

RustMinidb 内置 Bearer Token 认证 保护所有数据接口,防止未授权访问。

# 方式一:命令行参数(推荐)
rustminidb serve --api-token "your-secret-token"

# 方式二:环境变量(避免 Token 出现在进程列表)
export RUSTMINIDB_API_TOKEN="your-secret-token"
rustminidb serve

认证规则:

规则 说明
未设置 Token 所有接口完全公开(仅限开发环境)
设置 Token //v1/health 外全部接口需 Authorization: Bearer <token>
Token 为空 等同于未设置,不启用认证
认证失败 返回 HTTP 401 Unauthorized

公开端点(免认证):

端点 用途
GET / Web 管理后台页面
GET /v1/health 健康检查(用于负载均衡器监控)

安全建议:

  • 生产环境必须设置 --api-token
  • 通过环境变量 RUSTMINIDB_API_TOKEN 传入 Token,避免命令行历史泄露
  • 使用反向代理(nginx / caddy)终止 TLS/SSL,确保传输加密
  • 定期更换 Token

配置

RustMinidb 支持 TOML 配置文件,默认值如下:

[server]
host = "0.0.0.0"
port = 8080
maxConnections = 100
queryTimeoutMs = 5000

[storage]
dbPath = "data.db"
cacheSizeMb = 64

[logging]
level = "info"
format = "text"

可通过命令行参数覆盖:

rustminidb serve --host 127.0.0.1 --port 9090 --db mydb.db

SQL 支持

RustMinidb 支持以下 SQL 语法(MVP 阶段):

语句 示例
CREATE TABLE CREATE TABLE users (id INT PRIMARY KEY, name TEXT, age INT)
INSERT INSERT INTO users VALUES (1, 'Alice', 30)
SELECT SELECT * FROM users WHERE age > 20
UPDATE UPDATE users SET age = 31 WHERE id = 1
DELETE DELETE FROM users WHERE id = 2
DROP TABLE DROP TABLE IF EXISTS users

支持的数据类型:INTEGERFLOATTEXTBLOBBOOLEANTIMESTAMP

支持的比较运算符:=!=<><=>=ANDOR


数据迁移与导出

支持四种 SQL 方言导出:

# 标准格式导出
rustminidb export --db mydata.db --output export.sql

# 导出兼容 MySQL
# (可通过 Rust API 配置 dialect: SqlDialect::MySQL)

# 导出兼容 PostgreSQL
# (可通过 Rust API 配置 dialect: SqlDialect::PostgreSQL)

导出特性:

  • ✅ CREATE TABLE IF NOT EXISTS
  • ✅ 批量 INSERT(可配置每批行数)
  • ✅ DROP TABLE IF EXISTS 前缀
  • ✅ 事务包裹(BEGIN / COMMIT)
  • ✅ 表注释导出
  • ✅ 多方言类型映射
  • ✅ 进度回调

构建

# 克隆仓库
git clone https://github.com/rustminidb/rustminidb.git
cd rustminidb

# 构建(默认启用 server 特性)
cargo build --release

# 仅构建 library(无 HTTP 服务器)
cargo build --release --no-default-features

# 运行测试
cargo test --lib

# 查看帮助
./target/release/rustminidb --help

技术栈

组件 技术
编程语言 Rust (edition 2021)
存储引擎 redb (ACID, MVCC, 单文件)
SQL 解析 sqlparser-rs
REST 框架 axum
运行时 tokio
序列化 serde / bincode / serde_json
日志 tracing / tracing-subscriber

许可证

本项目基于 BSL-1.1 许可证(Boost Software License 1.0)发布。

Boost Software License - Version 1.0

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation...

相关链接