实验性嵌入式与远程AGPL-3.0

强类型
关系型数据库核心

NetbaDB 是用 Rust 实现的强类型关系型数据库核心。使用嵌入式 SDK 创建本地文件,或启动 netbadbd 后通过 Rust / Go 的 Protocol v1 客户端连接。

Phase 7B当前版本
Protocol v1远程协议
IndexScan已注册索引
MSRV 1.85.0dev 1.97.1

当前状态

实验性软件,实现范围已明确界定。

查询语言为有限的原生子集。项目是可编译、可测试并具备崩溃恢复的 Rust workspace,并非仅有设计说明的原型。

已实现

  • 嵌入式 Database API 与 netbadb-sdk 再导出
  • SELECT、INNER JOIN、INSERT / UPDATE / DELETE、ORDER BY、GROUP BY、聚合
  • 已注册索引、DML 维护、点查 IndexScan、ANALYZE、范围 IndexScan
  • WAL、崩溃恢复、检查点与 generation 安全的 RowId
  • netbadbd TCP 服务器、Protocol v1、双向 TLS 与按表授权
  • Rust 远程客户端、Go Protocol v1 客户端、检查 CLI 与诊断 LSP

不在当前范围

  • MVCC 与读隔离:读者可能观察到活动写者的缓冲修改
  • 并发写者与跨进程文件锁
  • SQL 索引 DDL、唯一性约束、仅索引扫描与索引连接
  • 完整 SQL:外连接、子查询、HAVING、DISTINCT、窗口函数
  • 跨表写事务
  • MCP 适配器,以及实验性磁盘格式之间的迁移

规划中

  • MCP 与其他适配器 — MCP 以及其他工具适配器。
  • 后续优化 — 索引连接、单侧 / Text 范围代价,以及由基准驱动的后续工作。

开始使用

三条受支持的接入路径。

大多数应用应从嵌入式 SDK 开始。当另一进程需要 Protocol v1 连接时使用 netbadbd。使用 CLI 可在不执行 SQL 的情况下检查目录与计划。

嵌入式 Rust

添加 netbadb-sdk,创建表文件,插入行,并在进程内运行 SQL。

开始使用

服务器与远程客户端

用部署清单启动 netbadbd,然后通过 Rust 或 Go 连接。

开始使用

离线检查

用 netbadb CLI 打开已有文件,输出目录元数据或物理计划。

开始使用

架构

稳定的分层边界。

应用语言不属于数据库的持久语义。Rust 提供嵌入式与远程 API。Go 使用独立的 Protocol v1 客户端及生成的类型化绑定。

Schema IR语言无关的表、列、物理 / 语义类型
Parser / HIR名字解析与名义类型检查
PlannerSeqScan、IndexScan、nested-loop、排序与聚合
Executor同步执行 + 三值逻辑
Storage事务、WAL、堆、已注册 B+Tree
Protocolnetbadbd、Protocol v1、TLS、授权

名义类型

相同的 u64 编码仍是不同的类型。

UserId 与 TeamId 可以共享物理表示,但其名义语义类型保持互斥。存储仅编码物理值。Canonical Schema 是语义含义的来源。

物理类型与语义类型

内部标识均为 newtype:TableId、RelationBindingId、ColumnId、PageId、RowId。在自连接中,同一张表的两个别名仍对应两个绑定。

打开时的模式身份校验

每张通过校验的表都有版本化规范字节编码与 SHA-256 指纹。堆元数据会持久化它;重开要求调用方给出完整表身份,包括语义类型与列顺序。

文档

用少量代码创建数据库。

「开始使用」页面覆盖嵌入式 SDK、索引、netbadbd 与远程客户端。源代码: github.com/sskycn/netbadb