rustminidb 0.2.0

A lightweight embedded database with native REST API
docs.rs failed to build rustminidb-0.2.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

🆕 v0.2.0 新特性

特性 说明
📁 多数据库支持 同时打开多个数据库文件,API 和 Shell 中自由切换
👀 文件监听自动重载 监听 .db 文件变化,自动刷新数据库连接(--watch
🎨 全新 Logo 科技感 "R" 图标 + "RustMinidb" 块状字标启动画面
🔀 Shell 多库切换 .use <db_name> 命令切换数据库,.databases 列出所有加载库

🌐 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/databases/switch POST 切换当前数据库
/v1/databases/create POST 创建新数据库
/v1/databases/delete POST 删除数据库
/v1/import POST 数据导入

🛠️ 实用工具

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

使用场景

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

快速开始

安装

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

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

方式二:从源码编译

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

cargo install rustminidb

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

[dependencies]

rustminidb = "0.2"

基本使用

🔹 命令行模式

# 初始化数据库

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


# ── v0.2.0 新特性 ──────────────────────────────────


# 多数据库同时打开(支持任意数量)

rustminidb serve --db data1.db --db data2.db --db data3.db


# 多数据库 Shell

rustminidb shell --db orders.db --db inventory.db


# 文件监听自动重载(数据库文件变化时自动刷新)

rustminidb serve --db mydata.db --watch


# 多数据库 + 文件监听组合

rustminidb serve --db data1.db --db data2.db --db data3.db --watch


# ──────────────────────────────────────────────────


# 导出数据库为 SQL

rustminidb export --db mydata.db --output backup.sql


# 查看版本

rustminidb version

🔹 交互式 Shell 命令

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

命令 说明
.tables 列出所有表
.schema 查看所有表结构
.databases 列出所有已加载的数据库(v0.2.0)
.use <name> 切换到指定数据库(v0.2.0)
.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


# 列出所有数据库(需 Token)

curl -H "Authorization: Bearer my-secret-token" http://localhost:8080/v1/databases


# 切换数据库(需 Token)

curl -X POST http://localhost:8080/v1/databases/switch \

  -H "Content-Type: application/json" \

  -H "Authorization: Bearer my-secret-token" \

  -d '{"name": "data2.db"}'

🔹 嵌入式 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...

相关链接