丹尼尔·伯恩斯坦更新了CDB库
丹尼尔·伯恩斯坦(Daniel J. Bernstein)是密码学和安全软件开发领域的知名专家,曾开发了qmail、djbdns、NaCl、Ed25519、Curve25519和ChaCha20-Poly1305等项目。他发布了项目cdb的20250121版本,该项目提供了一个数据存储格式和配套库,用于在应用程序中嵌入键/值对数据库功能。该版本距上一次更新cdb 0.75(发布于2000年2月)已有超过25年。
新版本实现了cdb64格式,该格式已转换为使用64位类型的结构。在64位平台上,新格式允许创建高达艾字节(exabyte)大小的数据库(此前数据库大小不能超过4 GB)。数据库非常紧凑,使用4096字节的头部,每条记录附带48字节的元信息(对于32位版本,头部为2048字节,每条记录附带24字节)。访问数据库时,如果存在键,则仅需两次磁盘访问操作;如果键不存在,则仅需一次。支持原子性替换数据库,能够抵抗程序崩溃且不会阻塞读取访问。
其他变化:
- 支持使用
configure脚本构建和make install命令安装。 - 删除了测试脚本对
csh的依赖。 - 所有内部整数值已替换为定义为
long long的num类型。uint32、fmt和scan函数已被替换为使用num类型工作的函数。 - 处理缓冲区的软件接口被拆分为
inbuf和outbuf。清理了hier接口。 - 从代码中删除了未使用函数的定义。
- 停止使用包装器,如
str_len、alloc、uint32、exit、error和systype。 - 重构代码以停止使用已弃用的C语言结构,例如旧式函数定义、空原型和旧式的
main()定义。 - 使用了
const和static定义。 - 构建时启用
-Wall标志,并清理代码以消除警告。 - 编译时启用了选项
-fwrapv、-fno-delete-null-pointer-checks、-fno-strict-aliasing和-fno-strict-overflow。