數據壓縮也被稱做基本壓縮,或無損壓縮,通常採用 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)