Berkeley DB - "Defragmenting" BSD DB 文件



我正在使用Berkeley DB来满足我的许多数据管理需求。但是,我注意到,当我从数据库中删除一大组值时,磁盘上数据库文件的实际大小似乎永远不会缩小。我猜 BSD DB 只是在文件内部解除分配记录,而实际上并没有回收不应该再使用的部分。

我一直在搜索 API,但我找不到任何方法可以让 BSD DB 真正"清理"文件并回收页面。是否有我只是错过了一个,或者这是创建一个较小的数据库文件以从现有数据创建一个新文件并替换旧文件的唯一方法?

我正在使用从 4.8 到 5.3 的各种版本,但我认为这并不重要。

你想要 DB->compact()。 从 C API 参考:

DB->compact() 方法压缩了 Btree、Hash 和 Recno 访问方法 数据库,并可选择返回未使用的 Btree、Hash 或 Recno 数据库页到底层文件系统。

http://docs.oracle.com/cd/E17076_02/html/api_reference/C/frame_main.html

最新更新