是否需要对网络传输数据进行压缩?如何选择压缩算法?
2015-03-25 00:00
1436 查看
版权所有。如需转载,请保留作者及出处信息:http://blog.csdn.net/jmppok/article/details/38121115
在网络网络传输过程中,最关心的就是传输效率问题。而提高传输效率最有效的方法就是对传输的数据进行压缩。但压缩数据也要耗费一定的时间,是不是压缩后一定能提高效率呢?该如何选择合适的压缩算法呢?请看本文的具体分析。
网络带宽为 N (MBps) -------------注意这里是MBps,而不是通常说的Mbps, 1MBps = 10Mbps, 1000Mbps=100MBps.
那么数据传输时间T1 = D/N
压缩速度为 Vc MB/S
解压缩速度为 Vd MB/S
那么压缩后的数据传输时间 T2 = D/Vc + D*R/N + D/Vd = D/N * ( R + N/Vc + N/Vd)
T1 = D/N
T2 = D/N*(R+N/Vc+N/vd)
发现:
如果R + N/Vc + N/Vd < 1,则压缩后传输要更快,否则压缩后传输反而更慢。
也就是压缩后传输能否更快是和压缩算法的 “压缩率”,“压缩/解压缩速度” 以及当前“带宽”相关
压缩率越小,压缩/解压缩越快,带宽越小,压缩后传输越能提高效率。而在带宽不变得情况下,压缩率越小,压缩/解压缩越快 越好。
而由于压缩率和压缩/解压缩速度成指数型反比(压缩率提高一点点,压缩/解压缩速度就大幅降低),所以在选用压缩算法时:
最好选择压缩/解压缩速度快的算法,而不必太关注压缩率(当然也不能完全不压缩)
来源:http://blog.csdn.net/zhangskd/article/details/17009111
压缩率R为 图中的 1/Ratio。
那么带入到上面公式:
LZ4:1/2.084 + N/422 + N/1820 = 0.48 + N*0.0029 也就是说在带宽N<179MBps的情况下,采用LZ4压缩能提高传输效率。
zlib:1/3.099 + N/21 + N/300 = 0.32 + N*0.051 也就是说在带宽N<13.3Mbps的情况下,采用zlib压缩才能提高传输效率,如果带宽够高,就不要压缩了,否则会更慢
5.总结
一般客户端访问服务器,需进行压缩。 (目前客户端到服务器的带宽还是比较低的)
服务器间传输,可以不压缩,或者用LZ4压缩。 (服务器间的带宽一般是1000bps,即100MBps)
在带宽 N<3.3MBps的情况下, 使用zlib要比LZ4更快。
0-3.3MBps zlib压缩传输最快,lz4压缩传输次之,普通传输最慢
3.3 - 13.3MBps lz4压缩传输最快,zlib压缩传输次之,普通传输最慢
13.3-179MBps lz4压缩传输最快,普通传输次之,zlib压缩传输 反而更慢
大于179MBps 普通传输就可以,因为网络传输速度 远远高于压缩及解压缩速度了
在网络网络传输过程中,最关心的就是传输效率问题。而提高传输效率最有效的方法就是对传输的数据进行压缩。但压缩数据也要耗费一定的时间,是不是压缩后一定能提高效率呢?该如何选择合适的压缩算法呢?请看本文的具体分析。
1.数据传输时间
假设数据大小为D (MB)网络带宽为 N (MBps) -------------注意这里是MBps,而不是通常说的Mbps, 1MBps = 10Mbps, 1000Mbps=100MBps.
那么数据传输时间T1 = D/N
2.压缩后的数据传输时间
假设压缩算法压缩率为 R ------------------ 即压缩后数据大小为D*R压缩速度为 Vc MB/S
解压缩速度为 Vd MB/S
那么压缩后的数据传输时间 T2 = D/Vc + D*R/N + D/Vd = D/N * ( R + N/Vc + N/Vd)
3.分析
对比:T1 = D/N
T2 = D/N*(R+N/Vc+N/vd)
发现:
如果R + N/Vc + N/Vd < 1,则压缩后传输要更快,否则压缩后传输反而更慢。
也就是压缩后传输能否更快是和压缩算法的 “压缩率”,“压缩/解压缩速度” 以及当前“带宽”相关
压缩率越小,压缩/解压缩越快,带宽越小,压缩后传输越能提高效率。而在带宽不变得情况下,压缩率越小,压缩/解压缩越快 越好。
而由于压缩率和压缩/解压缩速度成指数型反比(压缩率提高一点点,压缩/解压缩速度就大幅降低),所以在选用压缩算法时:
最好选择压缩/解压缩速度快的算法,而不必太关注压缩率(当然也不能完全不压缩)
4.常用压缩算法对比
这是来自网上一个常用压缩算法压缩比,压缩/解压缩速度对比图:来源:http://blog.csdn.net/zhangskd/article/details/17009111
压缩率R为 图中的 1/Ratio。
那么带入到上面公式:
LZ4:1/2.084 + N/422 + N/1820 = 0.48 + N*0.0029 也就是说在带宽N<179MBps的情况下,采用LZ4压缩能提高传输效率。
zlib:1/3.099 + N/21 + N/300 = 0.32 + N*0.051 也就是说在带宽N<13.3Mbps的情况下,采用zlib压缩才能提高传输效率,如果带宽够高,就不要压缩了,否则会更慢
5.总结
一般客户端访问服务器,需进行压缩。 (目前客户端到服务器的带宽还是比较低的)服务器间传输,可以不压缩,或者用LZ4压缩。 (服务器间的带宽一般是1000bps,即100MBps)
在带宽 N<3.3MBps的情况下, 使用zlib要比LZ4更快。
0-3.3MBps zlib压缩传输最快,lz4压缩传输次之,普通传输最慢
3.3 - 13.3MBps lz4压缩传输最快,zlib压缩传输次之,普通传输最慢
13.3-179MBps lz4压缩传输最快,普通传输次之,zlib压缩传输 反而更慢
大于179MBps 普通传输就可以,因为网络传输速度 远远高于压缩及解压缩速度了
相关文章推荐
- 是否需要对网络传输数据进行压缩?如何选择压缩算法?
- 是否须要对网络数据传输进行压缩?怎样选择压缩算法?
- 实时数据库的历史数据是否需要进行压缩?可用什么方法压缩?
- 在android需要大量使用xml进行网络传输时,如何用面向对象的思路降低xml的耦合性并增加重用性
- 算法优化,如何从120秒到0.5秒【数据结构的选择、数据类型的选择、运算优先级的选择、函数调用关系】
- 对通过网络传输的数据进行加密
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- 详解rsync算法--如何减少同步文件时的网络传输量
- Windows XP SP3环境下的OLE DB Remoting Provider和Jet Provider之间是如何进行数据传输的
- 使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- 利用CANVAS进行文件压缩传输解析是否可行
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- 服务器使用Gzip压缩数据,加快网络传输(Java 例子)
- 求救socket高手!!!! 怎样监听网络上是否有数据传输。
- 如何使用json在前后台进行数据传输
- 如何判断socket是否已经断开和防止外部攻击,只连接不传输数据
- 服务器使用Gzip压缩数据,加快网络传输(Java 例子)
- UniGui如何实现压缩传输数据?
- Browser一段时间无数据传输后,需要自动断开网络