> delta | diff | compress <
// Delta 編碼——儲存差值,而非絕對數值
序列資料
針對相鄰數值差異較小的序列資料進行最佳化。
多種變體
支援 Simple、XOR、ZigZag 等多種 Delta 編碼方式。
儲存空間效率高
降低儲存序列資料所需的位元寬度。
>> 技術資訊
Delta 編碼的運作原理:
Delta 編碼會先儲存第一個數值,接著儲存每一個相鄰數值之間的差值。這樣能將變化緩慢的資料轉換成較小的整數序列,方便達到更好的壓縮率。XOR Delta 使用位元層級的 XOR 運算取代減法。而 ZigZag 編碼則將有號整數映射為無號整數,以提升壓縮效果。
Delta 範例:
簡單 Delta: [100, 102, 107, 110, 108] → [100, 2, 5, 3, -2] XOR Delta: [15, 14, 12, 8, 0] → [15, 1, 2, 4, 8] ZigZag Delta: [10, 8, 12, 9] → [10, -2, 4, -3] → [10, 3, 8, 5](編碼後)
為什麼要使用 Delta 編碼:
- >時間序列壓縮
- >感測器資料儲存
- >音訊/視訊編碼
- >資料庫壓縮
- >網路通訊協定
>> 常見問題
什麼是 Delta 編碼?
Delta 編碼是一種資料壓縮技術,不直接儲存每一個數值,而是儲存相鄰數值之間的差值。當相鄰資料彼此相近時,差值會更小,因此需要的位元數也更少。
Simple Delta 和 XOR Delta 有何不同?
Simple Delta 使用減法(目前值 − 前一個值),而 XOR Delta 使用位元層級的 XOR 運算。XOR Delta 可以在不用擔心溢位的情況下還原原始資料,並且適合位元模式相似的資料。Simple Delta 對於數值序列來說更直覺。
什麼是 ZigZag 編碼?
ZigZag 編碼會將有號整數映射為無號整數,同時保留較小的絕對值。例如:-1 會被編碼為 1、1 編碼為 2、-2 編碼為 3 等,如此一來,小的負數也能像小的正數一樣被有效壓縮。
在哪些情況下 Delta 編碼最有效?
Delta 編碼特別適合用在排序清單、時間序列資料、連續的 ID、逐漸變化的感測器讀值、音訊取樣,以及任何相鄰數值高度相關的資料。