SecScoreDB 是一个专为 SecScore 项目设计的高性能、轻量级数据库系统。它不仅提供了基于文件的持久化存储和动态字段管理,还内置了功能强大的 WebSocket 服务器,支持远程访问、实时订阅和细粒度的权限控制。
本项目采用 C++23 标准编写,利用现代 C++ 特性(Concepts, Ranges, Template Metaprogramming)保证了代码的高效与类型安全。
- 轻量级持久化:基于二进制文件的本地存储,高效且跨平台。
- 动态 Schema:支持运行时定义数据模型(Student, Group),支持 Int, Double, String 类型。
- 类型安全:通过
DynamicWrapper提供编译期和运行时的类型检查。 - Lambda 查询:支持使用 C++ Lambda 表达式进行灵活的数据过滤。
- 自动序列化:集成
cereal库,实现透明的数据序列化。
- 标准协议:基于 JSON 的 WebSocket 通信协议 (v1.3)。
- 权限控制 (RBAC):内置用户系统,支持
root(管理员)、普通用户和只读用户。 - 实时订阅 (Pub/Sub):支持客户端订阅数据变更,服务端主动推送更新。
- 高级查询:支持分页 (
offset/limit)、排序和复杂逻辑组合查询。 - 安全机制:支持 WSS(需反向代理),严格的越权访问检查。
- SecScoreDB (Library): 核心数据库逻辑库。
- SecScoreDB-Websockets (Server): 基于
ixwebsocket的独立服务器程序。 - SecScoreDB_UnitTests: 单元测试套件。
- SecScoreDB_E2ETests: WebSocket 端到端集成测试。
本项目依赖以下开源库(通过 vcpkg 管理):
- nlohmann/json - JSON 处理
- cereal - 序列化
- ixwebsocket - WebSocket 网络库
- googletest - 测试框架
- 编译器: 支持 C++23 (MSVC v143+ / GCC 14+ / Clang 17+)
- 构建工具: CMake 3.28+
- 包管理器: vcpkg
# 1. 克隆项目
git clone https://github.com/YourRepo/SecScoreDB.git
cd SecScoreDB
# 2. 配置 CMake (使用 vcpkg 工具链)
# 请确保 VCPKG_ROOT 环境变量已设置,或直接指定路径
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
# 3. 编译
cmake --build build --config Release编译完成后,运行 SecScoreDB-Websockets 可执行文件:
# 启动服务 (默认端口 8765)
./build/Release/SecScoreDB-Websockets --port 8765 --db ./my_database
# 首次启动建议指定管理员密码
./build/Release/SecScoreDB-Websockets --admin-pass "my_secret_password"详细的通信协议文档请参考 SecScoreDB-WebSockets.md。
#include "SecScoreDB.h"
// 定义 Schema
SchemaDef stuSchema{
{"name", FieldType::String},
{"age", FieldType::Int},
{"score", FieldType::Double}
};
// 初始化数据库
SecScoreDB db("./test_db");
db.initStudentSchema(stuSchema);
// 创建数据
auto student = db.createStudent(1001);
student["name"] = std::string("Alice");
student["age"] = 20;
student["score"] = 95.5;
// 查询数据
auto results = db.queryStudent([](const Student& s) {
return (int)s["age"] >= 18;
});项目包含完善的单元测试和端到端测试。
# 运行单元测试
./build/Release/SecScoreDB_UnitTests
# 运行 WebSocket E2E 测试 (需先启动服务器)
# 1. 启动服务器
./build/Release/SecScoreDB-Websockets --port 11451 --db ./testdata_e2e
# 2. 运行测试
./build/Release/SecScoreDB_E2ETests本项目采用 LGPL 许可证。详见 LICENSE 文件。