refactor porject structure to imporove readability and maintainability (#32)
English
MuduDB 是一个内置应用运行时的开源关系型数据库。
使用 C, C#, Go, JavaScript, Python 或 Rust 构建以数据为中心的实时应用,打包成 MuduDB 应用,直接部署到数据库中。
你的应用逻辑紧贴数据运行,减少数据搬运、简化系统架构,并实现低延迟执行。
应用服务器 + 数据库,合二为一。
让应用运行在数据所在的地方。
过程编译为 WebAssembly 组件,再与 DDL(数据定义语言,即过程所操作的表结构)、初始数据和描述符打包成 .mpk(MuduDB 软件包)。将软件包安装到 mudud 后,客户端即可调用其中的过程。
.mpk
mudud
原生应用也可以显式选择独立分发的 adapter runtime,以本地应用的方式运行;该模式下各语言的入口见语言与运行方式。
Rust 过程通过 Entity trait 将查询结果映射为结构体。构建步骤中的 mgen check-sql 对照 DDL 检查 SQL;语言编译器负责类型检查,两者都不能代替运行时测试。
Entity
mgen check-sql
内核负责存储、事务、查询执行和调度,运行时负责加载和执行 WebAssembly 组件。过程通过系统调用访问内核,由内核统一管理事务与调度。
运行时采用按核 worker 模型,Linux I/O 路径使用 io_uring。设计取舍见运行时架构,源码组织见下表。
io_uring
仓库按 crates/ 下的多个独立 Cargo workspace 组织,workspace 之间通过 path 依赖连接。所有 workspace 共享仓库根目录下的同一个 target/ 目录(在 .cargo/config.toml 中配置)。
crates/
target/
.cargo/config.toml
crates/common
mudu
mudu_sys*
mudu_type
mudu_binding
mudu_contract
sql_parser
sys_interface
mudu_client
crates/db-kernel
mudu_kernel
mudu_runtime
mudu_adapter
sys_interface_standalone
testing
crates/sdk
mududb
bindings/
mudu_api/
example/mpk
wallet
tpcc
ycsb
crates/tools
mcli
mgen
mtp
mpm-build
mpm-crate
mpm-install
依赖方向严格单向:common ← db-kernel ← sdk,tools 仅依赖 common。
common
db-kernel
sdk
tools
构建或检查某个 workspace 时,进入对应目录执行:
cd crates/db-kernel && cargo build --release
script/shell/check_all.sh 会依次对所有 workspace 执行 cargo fmt --check、cargo clippy --workspace --all-targets -- -D warnings 和 cargo test --no-run --workspace。
script/shell/check_all.sh
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --no-run --workspace
MuduDB 采用 Apache License 2.0 许可证。
MuduDB 是一个数据库系统,它使构建面向数据的应用程序更加容易,并能够将其应用业务逻辑直接运行在数据库环境内部。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MuduDB
English
MuduDB 是一个内置应用运行时的开源关系型数据库。
使用 C, C#, Go, JavaScript, Python 或 Rust 构建以数据为中心的实时应用,打包成 MuduDB 应用,直接部署到数据库中。
你的应用逻辑紧贴数据运行,减少数据搬运、简化系统架构,并实现低延迟执行。
应用服务器 + 数据库,合二为一。
让应用运行在数据所在的地方。
从这里开始
执行方式
过程编译为 WebAssembly 组件,再与 DDL(数据定义语言,即过程所操作的表结构)、初始数据和描述符打包成
.mpk(MuduDB 软件包)。将软件包安装到mudud后,客户端即可调用其中的过程。原生应用也可以显式选择独立分发的 adapter runtime,以本地应用的方式运行;该模式下各语言的入口见语言与运行方式。
Rust 过程通过
Entitytrait 将查询结果映射为结构体。构建步骤中的mgen check-sql对照 DDL 检查 SQL;语言编译器负责类型检查,两者都不能代替运行时测试。架构
内核负责存储、事务、查询执行和调度,运行时负责加载和执行 WebAssembly 组件。过程通过系统调用访问内核,由内核统一管理事务与调度。
运行时采用按核 worker 模型,Linux I/O 路径使用
io_uring。设计取舍见运行时架构,源码组织见下表。项目结构
仓库按
crates/下的多个独立 Cargo workspace 组织,workspace 之间通过 path 依赖连接。所有 workspace 共享仓库根目录下的同一个target/目录(在.cargo/config.toml中配置)。crates/commonmudu(核心类型/错误码)、mudu_sys*(操作系统/异步抽象)、mudu_type、mudu_binding、mudu_contract(线协议)、sql_parser、sys_interface、mudu_client(TCP/JSON 客户端)以及各类工具库。crates/db-kernelmudu_kernel(引擎)、mudu_runtime(WASM 宿主、HTTP/pgwire 服务)、mudud(服务器守护进程)、mudu_adapter(存储适配器)、sys_interface_standalone、testing(集成测试)。crates/sdkmududb(面向应用的 facade)、语言绑定(bindings/、mudu_api/)。example/mpkwallet、tpcc、ycsb等),独立 workspace。crates/toolsmcli(命令行客户端)、mgen(代码生成器)、mtp(转译器)、mpm-build/mpm-crate/mpm-install(MPK 打包)。依赖方向严格单向:
common←db-kernel←sdk,tools仅依赖common。构建或检查某个 workspace 时,进入对应目录执行:
script/shell/check_all.sh会依次对所有 workspace 执行cargo fmt --check、cargo clippy --workspace --all-targets -- -D warnings和cargo test --no-run --workspace。文档导航
许可证
MuduDB 采用 Apache License 2.0 许可证。