这与我之前的问题Click here一起提供。 我们正在使用berkeley DB进行临时存储,然后将其处理并存储到关系数据库中。当大小增加超过某一点时会出现问题。现在我们必须将文件拆分成较小的文件或压缩现有文件。问题我想询问压缩部分,berkeley DB是否有任何内置的压缩实用程序,或者我们是否必须以编程方式进行。如果它是内置的,那么它总是会更快。
答案 0 :(得分:2)
来自here:
根据伯克利常见问题解答,有两种方法可以优化它(压缩前):
您还可以按照here所示实现自己的压缩算法。
Berkeley DB VACUUM与SQLite有何不同?
SQLite的 将VACUUM命令实现为数据库转储,后跟a 完全从该转储重新加载。这是一项昂贵的操作,锁定 操作期间的整个数据库。它也是一个 全部或全部操作。无论是工作还是失败,你必须这样做 有时再试一次。当SQLite完成时,数据库经常出现 尺寸更小(文件尺寸更小),btree更好 由于有序的密钥插入而组织(比较浅) 转储文件中的数据。 SQLite,当它工作,当你负担得起 将所有人锁定在数据库之外,可以很好地完成VACUUM。 Berkeley DB以完全不同的方式解决这个问题。对于很多 现在发布Berkeley DB的B-Tree实现已经具备了这种能力 紧凑而其他操作在飞行中。压缩是一种 检查B树节点的过程,当小于 最佳,它们被重新组织(反向拆分等)。越浅 你的B-Tree,在叶子上查找数据所需的查找次数就越少 节点。 Berkeley DB可以压缩树的部分或整个树 立刻。对于7x24x365(五个九)的操作,这是至关重要的。 BDB Compact版本不会对正在进行的数据库操作产生不利影响 而SQLite的方法确实如此。但压缩并不能解决空洞问题 数据库的各个部分(数据库文件的段被删除 数据曾经存在)。 Berkeley DB还支持压缩数据库 通过在文件中移动数据,然后截断文件来获取文件 将该空间返回给文件系统。截至Berkeley的5.1版 DB,VACUUM命令将压缩和压缩数据库文件。 此操作比SQLite的转储/加载方法花费更多时间 因为它正在做更多工作以允许数据库保留 操作。我们相信这是正确的权衡,但如果你 不同意您可以随时在代码中转储/加载数据库。