

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 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: Compressed documents require less I/O，可能会提高性能。
+ 针对您的馆藏进行了优化：该词典是专门针对您的馆藏的数据模式进行训练的。

**注意**  
亚马逊 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>

亚马逊 DocumentDB 8.0 默认开启了 Zstd 压缩。您可以随时通过在集群参数组中将 “default\$1compression” 的值设置为禁用来将其关闭。必须注意的是，从 Amazon DocumentDB 8.0 开始，“启用” 不再是默认压缩的有效选择，您必须从 Zstd 和中进行选择。 LZ4

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

您可以使用以下命令之一查看集合的压缩信息：
+ db.runCommand (\$1collstats: “myCollection”\$1) 或
+ db.collection.stats ()

以下命令返回可用于计算压缩率的密钥统计信息：
+ compression.algorith：使用的算法（“lz4” 或 “zstd”）
+ 存储大小：压缩后集合使用的实际存储空间。请注意，此数字包括碎片（即数据库页面中未使用的空间）
+ avgObjSize：解压缩后的馆藏文档的平均逻辑大小。请注意，如果您的馆藏包含超过 2 万个文档，则此数字将是基于 2 万个文档样本的近似值。
+ size：未压缩的集合的逻辑大小。该数字是 avgObjSize 通过乘以集合中的文档总数得出的，因此，如果 avgObjSize 是近似值，则该数字也将是近似值。
+ count：馆藏中的文档数 

在评估基于字典的压缩时，以下 CloudWatch 指标可能会有所帮助：
+ CPUUtilization
+ FreeableMemory
+ VolumeBytesUsed
+ VolumeReadIOPs
+ VolumeWriteIOPs

CollStats 指标：
+ storageSize
+ size

此外，跟踪特定于您的应用程序的指标（例如延迟和每种查询类型或 API 的吞吐量）也很有用。