Berkeley DB 文件压缩
Posted
技术标签:
【中文标题】Berkeley DB 文件压缩【英文标题】:Berkeley DB File compression 【发布时间】:2012-01-04 06:05:35 【问题描述】:这与我之前的问题Click here 结合在一起。 我们正在使用 berkeley DB 进行临时存储,然后再将其处理并存储到关系 DB 中。当大小增加超过某个点时会出现问题。现在我们必须将文件拆分为较小的文件或压缩现有文件。在此问题我想问一下压缩部分,berkeley DB是否有任何内置的压缩实用程序,或者我们是否必须以编程方式进行。如果它是内置的,那么它总是会更快。
【问题讨论】:
【参考方案1】:来自here:
根据伯克利常见问题解答,有两种优化方法(压缩前):
-
紧凑
真空
您还可以实现自己的压缩算法,如图here。
Berkeley DB VACUUM 与 SQLite 有何不同?
SQLite 将 VACUUM 命令实现为数据库转储,后跟 从该转储完成重新加载。这是一个昂贵的操作,锁定 操作期间的整个数据库。它也是一个 全有或全无操作。要么有效,要么失败,你必须 有时间再试一次。 SQLite完成后,数据库频繁 尺寸更小(文件大小更小)并且btree更好 由于按顺序插入 转储文件中的数据。 SQLite,什么时候可以工作,什么时候你负担得起 将所有人锁定在数据库之外,可以很好地处理 VACUUM。 Berkeley DB 以完全不同的方式处理这个问题。对于很多 现在发布 Berkeley DB 的 B-Tree 实现已经具备了能力 在其他操作正在进行时进行压缩。压实是一种 检查 B 树节点的过程,当小于 最优,它们被重新组织(反向拆分等)。越浅 您的 B 树,在叶子上查找数据所需的查找次数越少 节点。 Berkeley DB 可以压缩树的部分或整棵树 立刻。对于 7x24x365(五个九)操作,这是至关重要的。发展局 compact 版本不会对正在进行的数据库操作产生不利影响 而 SQLite 的方法可以。但是压缩不能解决空问题 数据库的部分(删除的数据库文件的部分 数据曾经存在)。 Berkeley DB 还支持数据库压缩 通过在文件中移动数据,然后截断文件来创建文件 将该空间返回到文件系统。从 Berkeley 5.1 版开始 DB,VACUUM 命令将压缩和压缩数据库文件。 此操作比 SQLite 的转储/加载方法花费更多时间 因为它正在做更多的工作以允许数据库保留 操作。我们相信这是正确的权衡,但如果您 不同意你总是可以在你的代码中转储/加载数据库。
【讨论】:
经过长时间的斗争。现在我确信压缩并不能提高性能。我现在已经放弃了压缩的整个想法,并考虑在硬件级别实现优化,例如 RAID。 但至少你节省了磁盘?以上是关于Berkeley DB 文件压缩的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 3.3 中打开 Berkeley 1.85 DB 文件