

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon DocumentDB 8.0 中管理字典型壓縮
<a name="dict-compression"></a>

Amazon DocumentDB 8.0 引進新的文件壓縮演算法 zstd，作為 LZ4 的改善替代方案。當您選取 Zstd 做為壓縮演算法，在 Amazon DocumentDB 8.0 集合上啟用字典壓縮時，會取樣集合中的文件，以建立自訂壓縮字典。新的和更新的文件會使用此字典和 zstd 演算法壓縮。這種方法通常會達到比標準壓縮方法更高的壓縮比率，特別是對於具有一致文件結構描述或重複欄位名稱的集合。

Lz4 是一種專為快速壓縮和解壓縮所設計的演算法。已知在 CPU 上很亮，同時實現明顯的壓縮。Zstd 是一種一般用途演算法，具有預設設定，使用更多的 CPU，但壓縮率比 lz4 更好。字典的使用可進一步改善大多數 JSON 文件的壓縮。Zstd 演算法的一些優點如下：
+ 降低儲存成本：較高的壓縮比率意味著更低的儲存用量和更低的成本。
+ 較低的 I/O：壓縮的文件需要較少的 I/O，可能改善效能。
+ 針對您的集合進行最佳化：字典專門針對集合的資料模式進行訓練。

**注意**  
Amazon DocumentDB 3.6、4.0 和 5.0 版不支援字典型壓縮。

## 效能考量
<a name="perf-considerations"></a>

Zstd 壓縮涉及下列權衡：
+ 儲存體與 CPU 的比較：Zstd 壓縮可實現更好的壓縮率，但相較於 LZ4 壓縮，可能會使用稍微多一點的 CPU 資源。
+ 初始壓縮：在插入足夠的文件來訓練有效的字典之前，新集合可能無法達到最佳壓縮。目前，如果集合至少 100 個文件，則會訓練字典。
+ 工作負載類型：讀取密集型工作負載，其中整個資料都符合緩衝區快取，可能會因為解壓縮負荷而增加延遲和 CPU 用量。

Zstd 壓縮對於具有小型文件、文件陣列和重複欄位名稱的集合特別有效。

## 啟用字典型壓縮
<a name="enabling-zstd"></a>

對於新集合，您可以使用下列命令來啟用 Zstd 壓縮：

```
db.createCollection("myCollection", 
    { 
        storageEngine: { 
            documentDB: { 
                compression: {
                    enable: true,
                    algorithm: "zstd"
                } 
            }
        }
    }
 )
```

您也可以在現有集合上啟用或修改壓縮：

```
db.runCommand({ 
    collMod: "myCollection", 
    storageEngine: { 
        documentDB: { 
            compression: {
                enable: true,
                algorithm: "zstd"
            } 
        }
    }
 })
```

若要啟用叢集上所有集合的 Zstd 演算法，您可以修改叢集參數群組，以選取「zstd」作為參數「default\$1collection\$1compression」的值。

## 開始使用
<a name="getting-started"></a>

Amazon DocumentDB 8.0 預設會開啟 Zstd 壓縮。您一律可以在叢集參數群組中將 ‘default\$1compression’ 的值設定為停用，以將其關閉。請注意，從 Amazon DocumentDB 8.0 開始，「啟用」不再是 default\$1compression 的有效選擇，您必須從 Zstd 和 LZ4 中選取。

## 監控
<a name="monitoring"></a>

您可以使用下列其中一個命令來檢視集合的壓縮資訊：
+ db.runCommand(\$1 collStats： "myCollection" \$1) 或
+ db.collection.stats()

這些命令會傳回可用於計算壓縮比率的金鑰統計資料：
+ compression.algorithm：使用的演算法 ("lz4" 或 "zstd")
+ storageSize：壓縮後集合使用的實際儲存體。請注意，此數字包含分段 （也就是資料庫頁面中未使用的空間）
+ avgObjSize：解壓縮集合文件的平均邏輯大小。請注意，如果您的集合有超過 20，000 個文件，則此數字將根據 20，000 個文件的範例進行估算。
+ size：沒有壓縮的集合邏輯大小。此數字是透過將 avgObjSize 乘以集合中的文件總數來取得，因此如果 avgObjSize 是近似值，則此數字也會是近似值。
+ 計數：集合中的文件數量 

下列 CloudWatch 指標在評估字典型壓縮時很有幫助：
+ CPUUtilization
+ FreeableMemory
+ VolumeBytesUsed
+ VolumeReadIOPs
+ VolumeWriteIOPs

collStats 指標：
+ storageSize
+ size

此外，追蹤應用程式特定的指標很有用，例如每個查詢類型或 API 的延遲和輸送量。