Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[建议] 在配置文件中指定压缩级别(当使用tar_gz备份格式时) #43

Closed
OptiJava opened this issue Apr 22, 2023 · 6 comments
Labels
enhancement New feature or request

Comments

@OptiJava
Copy link

就相当于在命令行中的 gzip -[1-9] xxxx

(我是萌新有说错的谅解一下,谢谢

@OptiJava OptiJava changed the title [建议] 在配置文件中指定压缩级别(当使用tar_gz压缩格式时) [建议] 在配置文件中指定压缩级别(当使用tar_gz备份格式时) Apr 22, 2023
@Fallen-Breath Fallen-Breath added the enhancement New feature or request label Apr 27, 2023
@Fallen-Breath
Copy link
Collaborator

能提供一下需求场景吗?虽然加个压缩等级参数没啥问题,但 QBM 这个插件并非是专注于压缩打包的备份插件。有什么场景是需要调整压缩等级的吗

@OptiJava
Copy link
Author

感觉最主要的需求场景是磁盘比较小(比如我们服),但是又希望槽位稍微多一点,有调整压缩率这个配置项的话就可以把压缩率调到更高缓解磁盘压力,尽管这样会大幅增加备份时间
如果觉得备份时间太长,磁盘不那么紧张,但是磁盘大小又不足以支撑plain或者tar备份格式的话,也可以适当调小压缩率缩短备份时间以及缓解压缩带来的卡顿
个人感觉加上了这个之后可定制化程度高一点,能更好的满足各个环境的需求,也可以有针对性的调优((

@Fallen-Breath
Copy link
Collaborator

除了调整压缩级别,还能调整压缩算法来控制存档体积。得做一波测试来验证实际表现

背景知识:python 的 tarfile 库支持 3 种压缩算法:gzbz2xz。其中,gzbz2 压缩算法支持调节压缩等级,范围是 1 ~ 9。在默认参数下,tarfile.open 会使用最高等级的压缩等级 9 进行压缩。

对一个 7.7 GiB 的存档进行压缩测试,结果如下:

mode level time ratio
w 16.28s 100.23%
w:gz 1 129.4s 62.76%
w:gz 6 152.28s 62.55%
w:gz 9 184.55s 62.52%
w:bz2 1 519.24s 62.70%
w:bz2 9 521.14s 62.05%
w:xz 1807.81s 61.11%

硬件:i7-11800H,频率大概在 3.9~4.0GHz;SN730 1T

没有重复测试,结果不一定精准,但是能看出量级

可见:

  • gz 压缩等级调成 1 能有效减少压缩耗时,并且压缩率也不会升高很多
  • bz 压缩算法不如 gz 压缩算法
  • xz 最慢,慢非常多,也压缩率也最低,但比 gz 也低不了太多

计划修改:

  • 增加选项 compress_level,默认值为 1。仅在 backup_formattar_gz 时有效
  • 选项 back_format 支持 tar_xz,如果真的有人想用

@OptiJava
Copy link
Author

好!(
另外之前@ishland在群里建议可以考虑zstd压缩格式,zstd压缩格式的性能和压缩率综合来看更好
这是zstd官方仓库的测试结果:
image
但是使用zstd也有一些缺点,比如需要额外安装依赖,而且zstd本身的函数个人感觉太底层了,如果可以用zstd的话,推荐pyzstd((
(我是萌新有说错的谅解一下

@Fallen-Breath
Copy link
Collaborator

存在比 gzip、lzma 更加优秀的压缩算法是很正常的现象,但需要注意,本插件并非一个专注于高质量压缩算法的插件,选择压缩算法更看重易用性和兼容性,因此这一类压缩算法不作考虑

@OptiJava
Copy link
Author

嗯(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants