3.7. 压缩

3.7.1. 数据库压缩选项

[database_compaction]
doc_buffer_size

指定复制缓冲区的最大大小(以字节为单位)

[database_compaction]
doc_buffer_size = 524288
checkpoint_after

在成功将指定数量的字节复制到压缩数据库后触发检查点

[database_compaction]
checkpoint_after = 5242880

3.7.2. 视图压缩选项

[view_compaction]
keyvalue_buffer_size

指定压缩期间使用的最大复制缓冲区大小(以字节为单位)

[view_compaction]
keyvalue_buffer_size = 2097152

3.7.3. 压缩守护进程

CouchDB 附带一个自动的、事件驱动的守护进程,内部称为“smoosh”,它会持续重新排列每个节点上的数据库和辅助索引文件,并根据以下参数自动压缩可以恢复最多可用空间的文件。

[smoosh]
db_channels

一个用逗号分隔的通道列表,当这些文件更新时,会向这些通道发送数据库文件名称。每个通道可以选择是否将数据库排队进行压缩;一旦一个通道将数据库排队,列表中的其他通道将不再有机会这样做。

view_channels

一个用逗号分隔的通道列表,当这些文件更新时,会向这些通道发送辅助索引文件名称。每个通道可以选择是否将索引排队进行压缩;一旦一个通道将索引排队,列表中的其他通道将不再有机会这样做。

staleness

单个文件上(昂贵的)优先级计算可以过时的分钟数,超过此时间后将重新计算。默认为 5。

cleanup_index_files

如果设置为 true,压缩守护进程将删除不再与任何设计文档关联的索引文件。默认为 false,除非节点磁盘空间不足,否则不应更改,并且仅在考虑后果之后才更改。

wait_secs

通道在开始压缩之前等待的时间,以便有时间观察系统并对首先压缩什么做出更明智的决定。很少从默认值 30(秒)更改。

[smoosh.<channel>]

以下设置控制给定压缩通道的资源分配。

capacity

通道可以容纳的最大项目数(最低优先级项目将被删除以腾出空间以容纳新项目)。默认为 9999。

concurrency

此通道中可以同时运行的最大作业数。默认为 1。

from
to

此通道允许执行压缩的时间段。每个参数的值必须遵守格式 HH:MM,其中 HH 在 [0..23] 中,MM 在 [0..59] 中。顶级守护进程配置中列出的每个通道都会持续构建其优先级队列,而不管此处定义的周期如何。默认情况下允许通道始终执行压缩。

strict_window

如果设置为 true,任何在允许周期结束时仍在运行的压缩都将被暂停,然后在下一个窗口期间恢复。它默认为 false,在这种情况下,将允许任何正在运行的压缩完成,但不会启动新的压缩。

还有一些设置共同控制通道是否将文件排队进行压缩以及它如何在其队列中优先排序文件

max_priority

每个项目的优先级必须低于此值才能被排队。默认为无穷大。

max_size

项目的长度必须不超过这么多字节才能被排队。默认为无穷大。

min_priority

项目的优先级必须至少达到这个值才能被排队。对于比率,默认为 5.0;对于松弛,默认为 16 MB。

min_changes

自上次压缩以来,项目必须至少有这么多更改才能被排队。默认为 0。目前仅适用于数据库。

min_size

项目的长度必须至少达到这么多字节才能被排队。默认为 1mb(1048576 字节)。

priority

用于计算优先级的算法。可以是比率(计算为 sizes.file/sizes.active)或松弛(计算为 sizes.file - sizes.active)。默认为比率。