# berkeleydb **Repository Path**: mskk/berkeleydb ## Basic Information - **Project Name**: berkeleydb - **Description**: Berkeley DB Release 18.1, library version 18.1.40: (May 29, 2020) This is Berkeley DB Release 18.1.40 from Oracle. - **Primary Language**: Unknown - **License**: UPL-1.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-09 - **Last Updated**: 2026-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Berkeley DB ## 项目简介 Berkeley DB 是 Oracle 提供的一个高性能嵌入式数据库库。本仓库包含 **Release 18.1.40 (2020年5月29日)** 版本的源码。这是 Berkeley DB 在 Gitee 上的镜像仓库。 Berkeley DB 不是一个关系型数据库(RDBMS),而是一个嵌入式键值存储库,它直接链接到应用程序中,无需网络访问或独立的数据库进程。 ## 主要特性 - **多种数据访问方法**:支持 B树、哈希表、定长队列和变长记录存储 - **完整事务支持**:提供 ACID 事务特性 - **高并发访问**:支持多线程和多进程并发访问 - **复制功能**:内置主从复制和自动故障转移 - **分区支持**:支持水平分区以提高性能 - **加密支持**:提供透明数据加密 - **多语言 API**:支持 C、C++、Java、C#、Tcl、Perl 等语言 ## 系统架构 Berkeley DB 由五个核心子系统组成: 1. **存储管理子系统** - 负责数据的物理存储和组织 2. **内存池管理子系统** - 管理数据库页面的缓存 3. **事务子系统** - 提供事务的 ACID 保证 4. **锁子系统** - 处理并发访问的锁机制 5. **日志子系统** - 记录数据变更以支持恢复 ## 项目结构 ``` berkeleydb/ ├── build_unix/ # Unix/Linux 构建配置 ├── build_vxworks/ # VxWorks 嵌入式系统构建配置 ├── build_windows/ # Windows Visual Studio 项目 ├── dist/ # 发行配置和构建脚本 ├── docs/ # HTML 格式 API 文档 ├── pdf/ # PDF 格式文档(安装指南、API 参考等) └── LICENSE # 开源许可证文件 ``` ## 文档资源 ### HTML 文档 - 完整 API 参考:[docs/api_reference/C/frame_main.html](docs/api_reference/C/frame_main.html) - 官方在线文档:[Oracle Berkeley DB 技术文档](https://docs.oracle.com/en/database/berkeley-db/) ### PDF 文档(位于 pdf/ 目录) | 文档 | 说明 | |------|------| | BDB_Installation.pdf | 安装指南,涵盖多平台多语言 | | BDB_Prog_Reference.pdf | 编程参考手册,阐述原理和使用方法 | | BDB-Porting-Guide.pdf | 版本迁移指南 | | BDB_Prog_Reference.pdf | C 语言 API 参考 | | BerkeleyDB-Core-C-GSG.pdf | C 语言入门教程 | | BerkeleyDB-Core-C-Txn.pdf | 事务处理指南 | | Replication-C-GSG.pdf | 复制功能指南 | ## 编译安装 ### Unix/Linux 系统 ```bash cd build_unix ./build.sh ``` 或者使用 dist/ 目录下的 configure 脚本: ```bash cd dist ./configure [选项] make make install ``` ### Windows 系统 使用 Visual Studio 打开相应的解决方案文件: - `build_windows/Berkeley_DB_vs2015.sln` (VS2015) - `build_windows/Berkeley_DB_vs2012.sln` (VS2012) - 其他版本类似 ### VxWorks 系统 使用对应版本的 Makefile: - `build_vxworks/Makefile.6x` - `build_vxworks/Makefile.7` ## 快速开始 ### 基本编程步骤 使用 Berkeley DB 的典型流程: ```c #include int main() { DB_ENV *dbenv; DB *dbp; int ret; // 1. 创建环境 ret = db_env_create(&dbenv, 0); if (ret != 0) { fprintf(stderr, "创建环境失败: %s\n", db_strerror(ret)); return 1; } // 2. 配置环境 dbenv->set_errfile(dbenv, stderr); dbenv->set_errpfx(dbenv, "myapp"); dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0); // 3. 打开环境 ret = dbenv->open(dbenv, "/data/db", DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN, 0644); if (ret != 0) { dbenv->err(dbenv, ret, "环境打开失败"); return 1; } // 4. 创建数据库 ret = db_create(&dbp, dbenv, 0); if (ret != 0) { dbenv->err(dbenv, ret, "数据库创建失败"); return 1; } // 5. 打开数据库 ret = dbp->open(dbp, NULL, "mydb.db", NULL, DB_BTREE, DB_CREATE, 0644); if (ret != 0) { dbp->err(dbp, ret, "数据库打开失败"); return 1; } // 6. 数据操作 (put/get/delete) DBT key, data; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = "hello"; key.size = 5; data.data = "world"; data.size = 5; dbp->put(dbp, NULL, &key, &data, 0); memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = "hello"; key.size = 5; dbp->get(dbp, NULL, &key, &data, 0); printf("找到: %s\n", (char*)data.data); // 7. 关闭资源 dbp->close(dbp, 0); dbenv->close(dbenv, 0); return 0; } ``` ## 数据存储类型 Berkeley DB 支持四种数据组织方式: | 类型 | 常量 | 说明 | |------|------|------| | B树 | `DB_BTREE` | 默认类型,支持范围查询和排序 | | 哈希 | `DB_HASH` | 适合等值查询的大数据集 | | 队列 | `DB_QUEUE` | 定长记录,支持高效尾部插入 | | 记录号 | `DB_RECNO` | 变长记录,基于记录号访问 | | 堆 | `DB_HEAP` | 无键值存储,按 RID 访问 | ## 事务处理 ### 事务模式 - **自动提交** (`DB_AUTO_COMMIT`):每个操作作为独立事务 - **显式事务**:使用 `txn_begin()` / `txn_commit()` 控制 ### 事务隔离级别 - `DB_READ_UNCOMMITTED` - 读未提交 - `DB_READ_COMMITTED` - 读已提交 - `DB_TXN_SNAPSHOT` - 快照隔离(可重复读) ### 检查点 定期调用检查点以确保数据持久性: ```c dbenv->txn_checkpoint(dbenv, 0, 0, DB_CHECKPOINT); ``` ## 复制功能 Berkeley DB 提供两种复制实现方式: 1. **Replication Manager**:简化配置,适合大多数场景 2. **Replication Base API**:底层 API,提供最大灵活性 ### 复制配置示例 ```c // 启用复制 dbenv->rep_set_nsites(dbenv, 3); dbenv->rep_set_priority(dbenv, 100); // 启动复制 dbenv->rep_start(dbenv, NULL, DB_REP_MASTER); // 处理复制事件 ``` ## 实用工具 项目中包含多种命令行工具: | 工具 | 功能 | |------|------| | `db_archive` | 归档日志文件 | | `db_checkpoint` | 执行检查点 | | `db_deadlock` | 检测和解决死锁 | | `db_dump` | 导出数据库内容 | | `db_load` | 导入数据 | | `db_recover` | 恢复数据库 | | `db_verify` | 验证数据库完整性 | | `db_stat` | 显示统计信息 | ## 编译选项 ### 配置选项 常用 configure 选项: ```bash ./configure \ --enable-cxx # 启用 C++ 支持 --enable-java # 启用 Java 支持 --enable-sql # 启用 SQL 接口 --enable-replication # 启用复制功能 --with-tcl # Tcl 绑定目录 ``` ## 示例程序 项目包含丰富的示例程序,位于 `build_windows/` 和 `build_vxworks/` 目录下: - `ex_access` - 基本访问方法示例 - `ex_bulk` - 批量操作示例 - `ex_env` - 环境配置示例 - `ex_tpcb` - 事务处理基准测试 - `ex_rep_mgr` - 复制管理器示例 ## 常见问题 ### 1. 数据库文件位置 数据库文件默认创建在环境目录下,可通过 `set_data_dir()` 指定其他目录。 ### 2. 缓存大小设置 合理设置缓存大小对性能至关重要,建议根据数据量和访问模式调整。 ### 3. 日志管理 定期使用 `db_archive` 工具清理不再需要的日志文件。 ### 4. 并发限制 默认锁表大小可能需要根据并发访问量进行调整。 ## 技术支持 - **官方论坛**:[Oracle Berkeley DB OTN 论坛](https://forums.oracle.com/forums/forum.jspa?forumID=271) - **官方文档**:[Oracle Berkeley DB 文档](https://docs.oracle.com/en/database/berkeley-db/) ## 许可证 本项目遵循 Berkeley DB 原有的许可证协议。具体许可证信息请参阅 LICENSE 文件。 ## 版本历史 详细变更日志请参阅 [changelog.md](changelog.md)。 --- **注意**:本仓库是 Oracle Berkeley DB 的镜像版本,如需官方支持请访问 Oracle 技术网络。