从 CouchDB 数据库中清除所有非当前数据的推荐程序是什么?

问题描述

假设我有一个包含 100 条记录的数据库,每条记录有 1000 次修订,另外还有 100,000 个删除的文档,每个文档都有广泛的修订历史。此外,我们还有一个视图文档和一些芒果索引。

对于这种假设情况,我们假设我无法删除和重建数据库。复制安全也不是问题。

如果我需要创建某种脚本,利用 curl 来清除数据库中所有未使用的数据,以便运行此脚本的结果与删除和重建数据库完全相同,只有 100 条记录,并且只有一个修订版-file,我该怎么做?

解决方法

对于您假设的情况,您可以执行以下操作:

  1. 备份 100 个所需文件
  2. 删除数据库中的所有文档
  3. 使用 Purge API 删除修订历史
  4. 重新创建 100 个所需文件

在现实场景中节省磁盘空间和 BTree 大小的更安全方法是:

  1. 正确配置 CouchDB 的 compaction settings 以不包含太多修订
  2. 仅清除以后不再修改的文档。