在对象存储服务中集成压缩算法,可以有效节省最终占用的空间,提升介质的利用效率,提高存储的收益。
选择压缩算法时,通常综合考虑对象的格式、访问频率、访问时延、存储服务的负载、存储服务器的硬件规格、存储介质的规格等。
对于高压缩比的文本类数据,通常建议在客户端应用侧完成压缩,这样除节省存储空间,还节省了传输带宽和网络传输引入的时延。
对于二进制类的文件,考虑到压缩的收益比较低,通常不建议进行压缩。
对于访问频率较低的归档类的冷数据,通常选择高压缩比的压缩算法,有助于节省空间。
对于访问频率中等的温数据,初期可采用解压吞吐量高的压缩算法,待访问量逐渐下降到一定程度之后变为冷数据,此时在后台任务中逐步转换为采用高压缩比的算法,同时兼顾访问效率和存储空间的利用率。
对于已压缩的对象,假如一定时间内访问频率超出阈值,可以还原一份非压缩的副本,通过空间换时间的方式,改善访问效率。
对于大量的小文件,比如小于1MB,可以考虑采用先聚合再压缩的策略,改善压缩算法的工作收益。
对于大的文件,比如超出10GB,可以依据压缩算法的特点,拆解为多个块,同时压缩,充分利用硬件,缩短压缩算法的工作时间,同时也可以改善访问时解压文件的效率。
实现时的关注点,如下:
- 数据的格式
- 文本,比如TXT、XML、INI、PROPERTIES、CSV、JSON、YAML等
- 二进制,比如图片、视频、音频、可执行文件等
- 压缩的算法
- 无损压缩
- 有损压缩
- 压缩算法的评估指标
- 吞吐量
- 压缩时吞吐量
- 解压时吞吐量
- CPU使用量
- 内存使用量
- 硬盘使用量
- 压缩比率
- 吞吐量
- 常见的压缩算法
- gzip
- bzip2
- zip
- lzw
- snappy
- zstd
- 专用的压缩算法
- H264
- MPEG2
- MPEG4
- JPEG
- 执行压缩操作的位置
- 客户应用
- 对象SDK
- 对象存储服务
- 执行压缩的时机
- 写入时压缩
- 后台压缩
- 对于未压缩的对象,在创建后、访问频率较低,可在后台任务中转换为压缩文件,节省存储空间
- 对于已压缩的对象,访问频率超过一定阈值,可在后台任务中创建一个非压缩的副本,通过空间换时间的方式来提升访问效率
- 压缩的粒度
- 以文件为粒度,执行压缩
- 以数据块为粒度,执行压缩
- 压缩算法的选择
- 针对所有的文件,使用统一的压缩算法
- 依据文件类型的特点,使用特定的压缩算法
- 由客户指定压缩算法