🎯 基于 Sea-ORM 构建的高性能、高安全性、功能丰富的数据库访问层
DBNexus 提供了一种声明式的数据库访问方法:
| ✨ 类型安全 | 🔒 权限控制 | 🏊 智能连接池 | 📊 企业级监控 |
|---|---|---|---|
| 编译时检查 | 表级 RBAC | RAII 自动管理 | Prometheus 指标 |
use ;
use *;
async
📋 目录
✨ 功能特性
| 🎯 核心功能 | ⚡ 企业级功能 |
|---|---|
| 始终可用 | 按需启用 |
🎯 核心功能(始终可用)
| 状态 | 功能 | 描述 |
|---|---|---|
| ✅ | 连接池管理 | RAII 风格的自动连接生命周期管理 |
| ✅ | 权限控制 | 基于角色的表级访问控制(RBAC) |
| ✅ | 过程宏 | 自动生成 CRUD 方法和权限检查 |
| ✅ | SQL 解析器 | 提取操作类型和目标表 |
| ✅ | 事务支持 | 完整的事务管理 |
| ✅ | 多数据库支持 | SQLite、PostgreSQL、MySQL、DuckDB |
⚡ 企业级功能
| 状态 | 功能 | 描述 |
|---|---|---|
| 🔍 | 指标监控 | Prometheus 指标导出(metrics 特性) |
| 📊 | 分布式追踪 | OpenTelemetry 集成(tracing 特性) |
| 📝 | 审计日志 | 所有操作的自动审计(audit 特性) |
| 🗄️ | 数据库迁移 | 自动迁移执行(migration 特性) |
| 🔀 | 数据分片 | 支持分片策略(sharding 特性) |
| 🌐 | 全局索引 | 跨分片查询(global-index 特性) |
| 💾 | 缓存 | oxcache 缓存(内部 moka L1 后端)(cache 特性) |
| 🔐 | 权限引擎 | 高级权限系统(permission-engine 特性) |
📦 特性预设
| 预设 | 特性 | 使用场景 |
|---|---|---|
| embedded | runtime-tokio-rustls, sqlite, config-env |
嵌入式/边缘设备超最小配置 |
| microservice | runtime-tokio-rustls, postgres, permission, sql-parser, config-env, observability |
微服务部署 |
| monolith | runtime-tokio-rustls, postgres, permission, sql-parser, yaml, data-management, security, observability |
单体应用 |
| enterprise | postgres, monolith, permission-engine |
完整企业功能 |
| all-optional | 除数据库驱动外的所有可选特性 | 所有企业功能(手动选择数据库) |
🚀 快速开始
📦 安装
在你的 Cargo.toml 中添加:
[]
= "0.3.0"
= { = "1.50", = ["rt-multi-thread", "macros"] }
= { = "2.0.0-rc.37", = ["macros"] }
💡 基本用法
🎬 5 分钟快速开始
步骤 1:定义实体
use ;
use *;
步骤 2:创建连接池
async
步骤 3:插入数据
let user = Model ;
insert.await?;
步骤 4:查询数据
let users = find_all.await?;
println!;
🔒 权限控制
use ;
use *;
// 管理员可以访问
let session = pool.get_session.await?;
find_all.await?;
// 普通用户会被拒绝
let session = pool.get_session.await?;
find_all.await?; // 错误:权限被拒绝
🎨 特性标志
⚠️ v0.2.0 破坏性变更
所有用户必须更新 Cargo.toml:
v0.1.x → v0.2.0 是破坏性变更。 cache feature 不再默认启用,多个 feature 现在显式要求 cache 必须启用。
数据库驱动(选择一个)
# SQLite(默认,嵌入式)
= { = "0.3.0", = ["sqlite"] }
# PostgreSQL
= { = "0.3.0", = ["postgres"] }
# MySQL
= { = "0.3.0", = ["mysql"] }
# DuckDB(嵌入式分析型数据库,0.3.0 新增)
= { = "0.3.0", = ["duckdb"] }
协议兼容数据库
DBNexus 通过标准协议支持以下兼容数据库(无需额外特性,使用对应协议驱动即可):
| 数据库 | 兼容协议 | 说明 |
|---|---|---|
| CockroachDB | PostgreSQL | 分布式 SQL 数据库 |
| YugabyteDB | PostgreSQL | 分布式 PostgreSQL |
| TiDB | MySQL | 分布式 HTAP 数据库 |
| MariaDB | MySQL | MySQL 兼容分支 |
| Aurora | PostgreSQL/MySQL | AWS 云原生数据库 |
运行时
# Tokio with RustLS(默认)
= { = "0.3.0", = ["runtime-tokio-rustls"] }
# Tokio with Native TLS
= { = "0.3.0", = ["runtime-tokio-native-tls"] }
# AsyncStd
= { = "0.3.0", = ["runtime-async-std"] }
可选功能
# 核心功能
# 权限控制(需要 cache 特性)
= { = "0.3.0", = ["permission", "cache"] }
# SQL 解析(需要 cache 特性)
= { = "0.3.0", = ["sql-parser", "cache"] }
# 过程宏
= { = "0.3.0", = ["macros"] }
# 企业级功能
= { = "0.3.0", = [
"metrics", # Prometheus 指标
"tracing", # 分布式追踪
"audit", # 审计日志
"migration", # 数据库迁移
"sharding", # 数据分片
"permission-engine" # 高级权限引擎
] }
# 配置
= { = "0.3.0", = [
"yaml", # YAML 配置支持
"config-toml", # TOML 配置支持
"config-env", # 环境变量(默认)
] }
📚 文档
📖 补充资源
| 资源 | 描述 |
|---|---|
| 📖 用户指南 | 使用 DBNexus 的全面指南 |
| 📘 API 参考 | 完整 API 文档 |
| 🏗️ 架构文档 | 系统架构和设计决策 |
| 📦 示例 | 可运行的代码示例 |
💻 示例
💡 真实示例
📝 高级配置
use ;
let config = DbConfig ;
let pool = with_config.await?;
🔧 环境变量
let config = from_env?;
let pool = with_config.await?;
🔄 事务处理
let session = pool.get_session.await?;
// 开始事务
session.begin_transaction.await?;
// 多个操作
insert.await?;
insert.await?;
// 提交
session.commit.await?;
📊 监控
use ;
let pool = new.await?;
// 获取连接池状态
let status = pool.status;
println!;
// 导出 Prometheus 指标
let metrics = new;
println!;
🏗️ 架构
🏗️ 系统架构
graph TD
A[应用层<br/>使用 DbPool 和 Session 的代码] --> B[DBNexus API 层<br/>DbPool, Session<br/>权限检查<br/>事务管理]
B --> C[功能模块<br/>Config, Permission, Metrics<br/>Migration, Sharding, Audit]
C --> D[连接池层<br/>连接生命周期管理<br/>健康检查<br/>RAII 保证]
D --> E[Sea-ORM / SQLx<br/>数据库驱动<br/>查询构建器]
查看 ARCHITECTURE.md 获取详细的架构文档。
🔒 安全性
🛡️ 安全特性
DBNexus 在设计时就考虑了安全性:
- 无 unsafe 代码 - 所有库代码都使用
#![forbid(unsafe_code)] - 权限强制执行 - 具有编译时验证的表级访问控制
- SQL 注入防护 - 默认使用参数化查询
- 配置路径验证 - 防止路径遍历攻击
- 速率限制 - 权限检查速率限制以防止滥用
🧪 测试
🎯 运行测试
# SQLite 测试
# PostgreSQL 测试
# MySQL 测试
# 所有测试(需要 Docker)
使用 Docker
# 启动数据库
# 运行所有测试
# 停止数据库
🤝 贡献
欢迎贡献!请查看仓库获取贡献指南。
开发设置
# 克隆仓库
# 安装 pre-commit 钩子
# 运行测试
# 运行 linter
📄 许可证
本项目采用 MIT 许可证:
🙏 致谢
🌟 基于优秀工具构建
📞 支持
⭐ Star 历史
💝 支持本项目
如果您觉得这个项目有用,请考虑给它一个 ⭐️!
由 Kirky.X 用 ❤️ 构建
© 2026 Kirky.X. All rights reserved.