本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Delta 編碼
Delta 編碼對日期時間欄很有用。
Delta 藉由記錄資料欄中彼此跟隨的值之間的差異來壓縮資料。此差異會記錄在磁碟上資料欄值之每個區塊的個別字典中。(Amazon Redshift 磁碟會佔用 1 MB。) 例如,假設資料欄包含 10 個整數,順序從 1 到 10。第一個會儲存為 4 位元組整數 (加上 1 位元組旗標)。接下來的九個會分別儲存為值為 1 的位元組,表示比前一個值多 1。
Delta 編碼附有兩個變異:
-
DELTA 會將差異記錄為 1 位元組值 (8 位元組整數)
-
DELTA32K 會將差異記錄為 2 位元組值 (16 位元組整數)
如果資料欄中的大多數值可以透過使用單一位元組進行壓縮,則 1 位元組的變化非常有效。但是,如果差異較大,則此編碼 (在最壞的情況下) 會比儲存未壓縮資料的效果差。類似邏輯適用於 16 位元版本。
如果兩個值之間的差異超過 1 位元組範圍 (DELTA) 或 2 位元組範圍 (DELTA32K),則會存放完整原始值,前面為 1 位元組旗標。1 位元組範圍從 -127 到 127,而 2 位元組範圍從 -32K 到 32K。
下表顯示數值欄的 Delta 編碼如何運作。
原始資料值 | 原始大小 (位元組) | 差異 (delta) | 壓縮值 | 壓縮大小 (位元組) |
---|---|---|---|---|
1 | 4 | 1 | 1+4 (旗標 + 實際值) | |
5 | 4 | 4 | 4 | 1 |
50 | 4 | 45 | 45 | 1 |
200 | 4 | 150 | 150 | 1+4 (旗標 + 實際值) |
185 | 4 | -15 | -15 | 1 |
220 | 4 | 35 | 35 | 1 |
221 | 4 | 1 | 1 | 1 |
合計 | 28 | 15 |