• 是否须要对网络数据传输进行压缩?怎样选择压缩算法?


    版权全部。

    如需转载。请保留作者及出处信息: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.总结

      一般client訪问server,需进行压缩。 (眼下client到server的带宽还是比較低的)

      server间传输,能够不压缩。或者用LZ4压缩。 (server间的带宽通常是1000bps。即100MBps)


      在带宽 N<3.3MBps的情况下, 使用zlib要比LZ4更快。


     0-3.3MBps                       zlib压缩传输最快。lz4压缩传输次之。普通传输最慢

     3.3 - 13.3MBps               lz4压缩传输最快。zlib压缩传输次之,普通传输最慢

     13.3-179MBps                lz4压缩传输最快,普通传输次之。zlib压缩传输 反而更慢

      大于179MBps                普通传输就能够,由于网络传输速度 远远高于压缩及解压缩速度了


     

              


         

  • 相关阅读:
    大爽python系列教程 书单
    大爽Python入门教程 71 认识类`class`
    大爽Python入门教程 72 面向对象编程 使用类`class`组织代码
    大爽Python入门教程 75 异常处理 try ... except Exception
    大爽Python入门教程 73 面向对象编程 封装、继承、多态
    大爽Python入门教程 82 Python 库(Library)、包(Package)、模块(Module)
    大爽Python入门练习题 51 实践练习一 简单购物系统(控制台实现)
    大爽Python入门教程 81 导入`import`
    大爽Python入门教程 74 实践演示 控制台版本——简易回合战斗
    大爽Python入门练习题 52 实践练习二 推箱子游戏(控制台实现)
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7324869.html
Copyright © 2020-2023  润新知