

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

# 管理集合層級文件壓縮
<a name="doc-compression"></a>

Amazon DocumentDB 5.0 集合層級文件壓縮可讓您壓縮集合中的文件，以降低儲存和 IO 成本。您可以在集合層級啟用文件壓縮，並視需要檢視壓縮指標，方法是透過壓縮文件的儲存大小和壓縮狀態等壓縮指標來測量儲存增益。Amazon DocumentDB 5.0 使用 LZ4 壓縮演算法來壓縮文件。

Amazon DocumentDB 支援從 5.0 版開始的文件壓縮。以下是集合層級文件壓縮函數：
+ **預設行為** — 5.0 叢集上新集合的預設壓縮設定是由叢集參數 決定。 `default_collection_compression`此參數預設為「停用」。
+ **壓縮現有集合** — 可使用 `collMod`命令變更現有集合的壓縮設定。
+ **變更壓縮閾值** — 預設壓縮閾值為 2KB。您可以使用 `createCollection`命令為新集合指定此值，並使用 `collMod`命令為現有集合變更此值。

**注意**  
Amazon DocumentDB 3.6 版和 4.0 版不支援 Amazon DocumentDB 文件壓縮。

**Topics**
+ [管理文件壓縮](#manage-compression)
+ [監控文件壓縮](#monitoring-compression)

## 管理文件壓縮
<a name="manage-compression"></a>

### 在集合中啟用文件壓縮
<a name="enabling-collection-compression"></a>

使用 `db.createCollection()`方法在 Amazon DocumentDB 5.0 上建立集合時啟用文件壓縮：

```
db.createCollection( sample_collection,{
    storageEngine : {
        documentDB: {
            compression:{enable: <true | false>}
        }
    }
})
```

### 在叢集中啟用文件壓縮
<a name="enabling-cluster-compression"></a>

叢集層級上的所有新集合預設都可以啟用文件壓縮，方法是將叢集參數設定為`default_collection_compression`「啟用」。當此參數設為「啟用」時，叢集上新建立的集合預設會啟用壓縮，壓縮閾值為 2 KB。

### 壓縮現有的集合
<a name="compress-existing-collections"></a>

您也可以使用 `collMod`操作並指定下列`storageEngine`組態，修改現有集合的壓縮設定。請注意，使用此命令所做的變更僅適用於新插入/更新的文件，且先前插入文件的壓縮不會變更。

```
db.runCommand({ 
    collMod: "orders", 
    storageEngine: { 
        documentDB: {compression: {enable: <true | false>} }
    }
})
```

### 設定壓縮閾值
<a name="set-compression-threshold"></a>

根據預設，壓縮集合的壓縮閾值為 2032 個位元組。建立啟用壓縮的新集合時，可以在 `createCollection`命令中設定此閾值：

```
db.createCollection( sample_collection, {
    storageEngine : {
        documentDB: {
            compression: {
                enable: true,
                threshold: <128 - 8000>
            }
        }
    }
})
```

您也可以使用 `collMod`操作並指定下列`storageEngine`組態，修改現有壓縮集合的壓縮閾值：

```
db.runCommand({ 
    collMod: "orders", 
    storageEngine: { 
        documentDB: {
            compression: {
                enable: true,
                threshold: <128 - 8000>
            }
        }
    }
})
```

請注意，壓縮閾值只能設定為介於 128 到 8000 位元組之間的值。此外，指定壓縮閾值時，需要將 `enable`選項設定為「true」。

## 監控文件壓縮
<a name="monitoring-compression"></a>

您可以檢查集合是否已壓縮，並計算其壓縮比率，如下所示。

從 mongo shell 執行 `db.printCollectionStats()`或 `db.collection.stats()`命令來檢視壓縮統計資料。輸出會顯示您可以比較的原始大小和壓縮大小，以分析文件壓縮的儲存增益。在此範例中，名為「sample\$1collection」的集合統計資料如下所示。擴展係數 1024\$11024 用於輸出 `size`和 `storageSize` 值，以 MB 為單位。

```
db.sample_collection.stats(1024*1024)
```

以下是上述命令輸出的範例：

```
{
    "ns" : "test.sample_collection",
    "count" : 1000000,
    "size" : 3906.3,
    "avgObjSize" : 4096,
    "storageSize" : 1953.1, 
    compression:{"enabled" : true,"threshold" : 2032},
    ...
}
```
+ **size** - 文件集合的原始大小。
+ **avgObjSize** - 壓縮前的平均文件大小，四捨五入為第一個小數。度量單位為位元組。
+ **storageSize** - 壓縮後集合的儲存大小。度量單位為位元組。
+ **已啟用** - 指出是否啟用或停用壓縮。

若要計算實際壓縮比率，請將集合大小除以儲存大小 （大小/storageSize)。針對上述範例，計算為 3906.3/1953.1，其轉換為 2：1 壓縮率。