简介
VDB 是一个面向进程内嵌入式场景的高性能键值数据库:
- 数据与应用程序运行在同一进程中;
- 采用内存映射与页式 B+ 树;
- 支持多读者、单写 MVCC 并发模型;
- 写路径通过写时复制保证旧快照不受影响;
- 提供事务提交、回滚、嵌套事务、子库和游标;
- 支持溢出页、脏页 spill、空闲页回收和崩溃恢复;
- 可选分页加密与完整性校验。
存储引擎派生自 LMDB,公共接口则是全新的现代 C++ 设计。
设计亮点
1. 真正的现代 C++ 接口
公共 API 使用 C++23 起提供的语言设施:
Env、Txn、Cursor为 move-only RAII 句柄;Dbi是可拷贝的轻量句柄;- 读取结果使用
std::span视图表达; - 可能失败的操作返回
std::expected或std::error_code; - 接口全部
noexcept,不通过异常跨越 API 边界; - 支持无状态回调的编译期桥接。
示例:
#include <vdb/vdb.hpp>
int main()
{
auto env_result = vdb::Env::create();
if (!env_result)
return 1;
auto env = std::move(*env_result);
if (env.set_mapsize(4u << 20u))
return 1;
if (env.open("data",
vdb::env_flags::create | vdb::env_flags::writemap))
return 1;
auto txn_result = env.begin();
if (!txn_result)
return 1;
auto txn = std::move(*txn_result);
auto dbi_result = txn.open_dbi();
if (!dbi_result)
return 1;
const auto dbi = *dbi_result;
if (txn.put(dbi, vdb::as_bytes("hello"), vdb::as_bytes("vdb")))
return 1;
return txn.commit() ? 1 : 0;
}2. Header-only,集成简单
VDB 没有需要编译和链接的库产物。最简单的集成方式是:
cp -r vdb/ /path/to/your/include/
c++ -std=c++23 -I/path/to/your/include app.cpp -lpthread使用 CMake 的项目也可以直接安装导出的接口目标:
find_package(vdb CONFIG REQUIRED)
target_link_libraries(app PRIVATE vdb::vdb)3. 保留成熟引擎能力
VDB 的底层存储引擎沿用 LMDB 风格设计:
- 页式 B+ 树与固定页格式;
- 双元页交替写入与崩溃恢复;
- MVCC 快照和读者槽管理;
- 单写事务、嵌套和事务回滚;
- 溢出页用于存储大值;
- 脏页预算控制与 spill;
- 空闲页延迟回收;
- 可选分页加密与校验和。
4. 工程质量内置在开发流程中
发布版本包含两道确定性回归:
- golden 字节回归:生成的数据文件与基准样本逐字节一致;
- baseline 行为回归:覆盖 writemap、prealloc、remap、enc、spill 五种模式。
此外还包括:
- ABI contract 与 ABI manifest;
- 头文件自足性检查;
- 多翻译单元 ODR 检查;
- 故障路径测试;
- C++23 与 C++26 双标准构建验证。
版本号说明
当前版本为 1.0.1.0。
版本号采用四段式:
- 前三段
1.0.1对齐上游 LMDB 基线; - 第四段
0表示 VDB 自身在该基线上的修改版本。
兼容性承诺
当前版本冻结以下契约:
- 数据库 page 格式;
- lock 文件布局;
- 事务提交与回滚语义;
- 公共句柄所有权模型;
- 公共值类型布局;
- 错误码数值;
- CMake 包名
vdb::vdb。
常规缺陷修复不会改变上述内容。
已知限制
初始版本仍有明确边界:
- 仅支持 64 位平台;
- 默认页面大小为 64KB(可配置);
- 当前面向 POSIX,已在 Cygwin 与 WSL2 环境验证;
- 最低要求 C++23,默认构建使用 C++26;
- 每个包含
vdb.hpp的翻译单元都会编译完整 header-only 实现; - 库面向嵌入式单机场景,不提供网络服务和分布式能力。
许可
VDB 的许可分两部分:
- 派生自 LMDB 的存储引擎部分遵循 OLDAP-2.8;
- 项目自身的现代 C++ 接口、重构、文档与测试遵循 BSD 3-Clause。
再分发时请同时保留 LICENSE 与 COPYRIGHT_LMDB。
相关链接
- 项目主页:https://vdb.vecdim.com/
- GitHub 仓库:https://github.com/vecdim/vdb
- 在线文档与 API 说明:见仓库
docs/目录
-快速示例:examples/quickstart.cpp
开始使用
git clone https://github.com/vecdim/vdb.git
cd vdb
cmake -S . -B build -DVDB_CXX_STANDARD=26
cmake --build buildj
ctest --test-dir build --output-on-failure如果你正在寻找一个可以直接嵌入 C++ 服务、接口现代、部署简单,同时又继承 LMDB 存储引擎语义的键值数据库,欢迎试用 VDB。