是否需要对网络传输数据进行压缩?如何选择压缩算法?

版权所有。如需转载,请保留作者及出处信息:http://blog.csdn.net/jmppok/article/details/38121115

在网络网络传输过程中,最关心的就是传输效率问题。而提高传输效率最有效的方法就是对传输的数据进行压缩。但压缩数据也要耗费一定的时间,是不是压缩后一定能提高效率呢?该如何选择合适的压缩算法呢?请看本文的具体分析。

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                普通传输就可以,因为网络传输速度 远远高于压缩及解压缩速度了

是否需要对网络传输数据进行压缩?如何选择压缩算法?

时间: 2024-10-31 17:56:00

是否需要对网络传输数据进行压缩?如何选择压缩算法?的相关文章

移动平台纹理压缩格式选择

1)移动平台纹理压缩格式选择2)Unity 2018是否在Mali GPU上支持Alpha 8格式3)如何在Unity自带的Navmesh上获取地面高度4)ParticleSystem无法重新播放5)UI开发中按界面的打开顺序返回到上级面板的问题 Texture Q:在这之前了解过纹理压缩的相关知识和UWA的一些推荐方式.但还是有一点小的疑问,所以在这里再次提出来,希望得到解答. 在纹理压缩格式的选择上,如果Android选用ETC,iOS选用PVRTC,因为有2的次方(ETC1和PVRTC)长

[转载]JavaEE学习篇之——网络传输数据中的密码学知识以及Tomcat中配置数字证书EE

原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/21716557 今天是学习JavaWeb的第二天,我们来了解什么呢?就了解一下Tomcat中配置数字证书的相关内容,但是在说这部分内容的时候,我们貌似得先说一下数字证书的相关概念,那说到数字证书的时候我们还得了解一些密码学的相关知识,这就是连锁反应吗?好吧不多说了,先来看一下密码学中关于网络中数据传输的知识. 首先来了解一下网络上传输数据的加密方式: 第一种是对称加密:就是

Okhttp3请求网络开启Gzip压缩

前沿 首先OkHttp3是支持Gzip解压缩的,不过我们要明白,它是支持我们在发起请求的时候自动加入header,Accept-Encoding: gzip,而我们的服务器返回的时候header中有Content-Encoding: gzip. 关于更多深入的内容呢,可以参考阅读下面这篇文章,讲的非常好! 聊聊HTTP gzip压缩与常见的Android网络框架 那么,我们在向服务器提交大量数据的时候,希望对post的数据进行gzip压缩,改怎么办? 下边给出方案! 方案 官方采用的是自定义拦截

hdu 5067 网络赛 状态压缩 或dfs

题意是给你n*m的方格 里面有最多10个格子有数  问你最少走多少步能将所有的数字移到左上角    能无限装下数字 这里介绍两种做法  dfs和状态压缩dp 1   dfs 由于每个数字之间是一定可以到达的  所有只用考虑走有数字的情况   最多10!种情况  找到做小的就行   果断的深搜       注意下优化 #include<stdio.h> #include<string.h> #include<iostream> using namespace std; s

hdu 4025 2011上海赛区网络赛E 压缩 ***

直接T了,居然可以这么剪枝 题解链接:点我 1 #include<cstdio> 2 #include<map> 3 #include<cstring> 4 #define ll __int64 5 using namespace std; 6 ll a[23],x[23][5],ans; 7 map<ll,ll>p; 8 void dfs(int d,int n,ll res,int f) 9 { 10 if(d==n){ 11 if(f) p[res]+

C语言实现Winsocket网络传输数据时乱码问题

问题描述:输入中文字符时在数据结尾总是有别的字符冒出 解决办法: recvBuf[ret] = '\0';//接收数据的数组,表示存储的数据截止,后面没有数据了 再运行,传输正常. 提示:C语言基础知识 原文地址:https://www.cnblogs.com/cttcarrotsgarden/p/10112084.html

问题和任务包004.长期投资的价值所在.网络调查.就业和风投选择.中小板.

工作本身对很多人来说最好找一家成长型和价值型的公司,喜欢刺激和最求个人最大化的除外.投资是家庭财富和个人财务自由的重要价值体现.有些本身表现为时间的价值. 长期投资的价值类型 ver1.0 成长中期,到成熟期: 持续的吸引资源的能力,核心竞争力长期能够保持甚至滚雪球壮大,并且很难被模仿. 成长早期和成长中期: 独特的理念,盈利模式合理,代表未来的合理安排,所谓第一性原理,甚至开始显现处头部效应. 成熟期: 产品建立起强大的品牌信念,产品深入人心,关键资源没有被卡住脖子. 表现像一支债券,在市场低

5.post上传和压缩、插件模拟请求

gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/xml->文本-->压缩率会很高. gzip执行流程 //1. 告知服务器.客户端支持gzip解压 * get.addHeader("Accept-Encoding", "gzip"); //2. 根据响应头得知服务器知否进行了gzip压缩 * Header[]

Hadoop I/O

HDFS中的数据完整性 HDFSZ在写入数据的时候会计算数据的校验和,针对每个由dfs.bytes.per.checksum指定字节的数据计算校验和,默认为512个字节 当客户端读取数据的时候,会对数据的校验和进行检查,如果发现数据出现损坏,则会执行以下步骤: 1.向Namenode报告其正在读取的数据块和所在的Datanode,之后会抛出ChecksumException异常 2.Namenode会将高数据块标记为损坏,让其不再处理请求,或者将该数据块复制到其他节点上 3.Namenode安排