数据压缩也被称做基本压缩,或无损压缩,通常采用 LZ 系列压缩算法。数据压缩具备自包
含性:即对端解压缩方只根据数据包自己:便可进行解压还原,不须要其它任何信息。压缩比因数
据类型而异:文本数据压缩比最大,各类网页、Windows office 文件(Excel、word 等等)、PDF 其
次,对多媒体和已压缩数据基本无效。字节缓存技术又叫“字典缓存”或“超级压缩”等名称。
它经过缓存的方式在内存和硬盘中记录下流经的数据流,并以必定的大小(例如 32 字节、64 字
节或 128 字节等)为最小单位创建易于查询的索引。当之后流向广域网链路的数据流出现了大于
最小单位的相同数据时,能够将该数据替换成某个更短的符号。远端的设备可以将相应符号还原
成原始数据。
字节缓存与数据压缩的不一样之处是,字节缓存不具备自包含性。要解开压缩数据,对端设备
必须引用之前记录的历史缓存信息。为达到这一目的,字节缓存技术须要链接两端的缓存彻底同
步,因而须要在每条广域网链路两端的加速设备之间创建缓存数据同步机制。对比于数据压缩,
字节缓存的另外一优点是即便对自己不具可压性的数据类型,如多媒体或已压缩数据,只要曾经传
输过相同或相似数据,字节缓存便可以提取出所有或部分相同数据,从而大幅缩减须要传输的数
据量。字节缓存技术经过使用大量的缓存信息(包括该数据流自己之前的数据历史和其余数据流
的数据历史)来压缩当前数据,有时可以达到很是高的压缩比。 算法
1 def handle_packet(payload): 2 for i in paylod: 3 rf = hash(i) //计算指纹 4 if check(rf): //确认指纹是否符合取样标准 5 if cache.find(rf): //是否在字典中查找到相同的指纹 6 expand(rf) //向左和向右扩充匹配的字符串 7 cache.rset(rf) //更新此指纹对于的数据包,若是原数据包没有在其余地方引用,能够释放。 8 else: 9 cache.set(rf): //用此指纹更新字典
1 def handle_data(payload): 2 for i in payload: 3 rbhash = hash(i) //第一步:计算数据包的Rabin指纹 4 if check(rbhash): //第二步:根据标准选取数据包的分割点,经过分割点将数据包分割的长度近似500字节。 5 setbound(i)