Berkeley DB文件压缩

时间:2012-01-04 06:05:35

标签: berkeley-db-je

这与我之前的问题Click here一起提供。 我们正在使用berkeley DB进行临时存储,然后将其处理并存储到关系数据库中。当大小增加超过某一点时会出现问题。现在我们必须将文件拆分成较小的文件或压缩现有文件。问题我想询问压缩部分,berkeley DB是否有任何内置的压缩​​实用程序,或者我们是否必须以编程方式进行。如果它是内置的,那么它总是会更快。

1 个答案:

答案 0 :(得分:2)

来自here

根据伯克利常见问题解答,有两种方法可以优化它(压缩前):

  1. 紧凑
  2. 真空
  3. 您还可以按照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的转储/加载方法花费更多时间   因为它正在做更多工作以允许数据库保留   操作。我们相信这是正确的权衡,但如果你   不同意您可以随时在代码中转储/加载数据库。