在对象存储服务端实现数据压缩的功能。
在整个云存储系统中,对象存储服务端并不是最适合做数据压缩的地方。最适合做数据压缩的地方是客户端。一个高性能的客户端不仅可以将大量小对象打包成大对象提高存储和传输的效率,也可以在客户机本地进行数据压缩,进一步节省网络带宽和存储空间。云存储系统在设计最初就包含了专门的客户端,那么一定要将数据压缩功能放在客户端,而不是服务端。
如果你的云存储系统中没有一个专门的客户端,或者用户更倾向使用通用的客户端比如浏览器,且用户上传的对象大多数都是一些适合数据压缩的文档,那么你可以考虑在服务端实现数据压缩功能,将客户上传的对象压缩起来再进行存储。
数据的传输也一样可以进行压缩。对于对象的上传来说,由于没有一个专门的客户端,我们没办法限定客户上传的数据。但是对于对象的下载,服务端可以提供一种选择,只要客户端支持,我们的接口服务就可以传输压缩后的数据给客户端。
1.8.1 版本的Go语言原支持的压缩算法包有 bzip2、flate、gzip、lzw 和 zlib 这5种。
- lzw 是 Lempel-Ziv-Welch 压缩算法的简写。这个算法的实现非常简单,甚至可以实现在硬件上,以获得非常高的压缩速度。UNIX 下被广泛使用的文件压缩工具compress 使用的就是这个算法,GIF 图像格式使用的压缩算法也是它。
- zlib 是一个软件库,实现了 RFC1950中介绍的压缩数据格式规范。它包括 LinuxMac OS X以及ioS 在内的很多平台的关键组件,PS4、Wi UXbox One 等游戏主机也使用它。它是后续 DEFLATE 和gzip 等压缩算法的一个抽象。
- flate是RFC1951中介绍的DEFLATE压缩数据格式规范,也是zip 文件使用的压缩算法。它使用了LZ77算法移除重复的字符串,并用 Hufiman 编码进一步压