

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

# 在 Amazon DocumentDB 8.0 中管理基于字典的压缩
<a name="dict-compression"></a>

亚马逊 DocumentDB 8.0 引入了一种新的文档压缩算法 zstd，作为 LZ4 的改进替代方案。当您通过选择 Zstd 作为压缩算法对 Amazon DocumentDB 8.0 集合启用字典压缩时，将对您的馆藏中的文档进行采样以创建自定义压缩字典。使用此字典和 zstd 算法压缩新的和更新的文档。与标准压缩方法相比，这种方法通常可以实现更高的压缩率，特别是对于具有一致文档架构或重复字段名的集合。

Lz4 是一种专为快速压缩和解压缩而设计的算法。众所周知，它对CPU的影响很小，同时可以实现明显的压缩。Zstd 是一种通用算法，在默认设置下，它使用的 CPU 更多，但压缩率比 lz4 更好。字典的使用进一步提高了大多数 JSON 文档的压缩率。Zstd 算法的一些优点是：
+ 降低存储成本：更高的压缩比意味着更少的存储使用量和更低的成本。
+ 较低 I/O：压缩后的文档需要更少 I/O，从而有可能提高性能。
+ 针对您的馆藏进行了优化：该词典专门针对您的馆藏的数据模式进行了训练。

**注意**  
Dictionary-based 亚马逊 DocumentDB 3.6、4.0 和 5.0 版本不支持压缩。

## 性能注意事项
<a name="perf-considerations"></a>

Zstd 压缩涉及以下权衡：
+ 存储与 CPU：与 LZ4 压缩相比，Zstd 压缩可实现更好的压缩率，但使用的 CPU 资源可能会稍多一些。
+ 初始压缩：在插入足够的文档来训练有效的字典之前，新集合可能无法实现最佳压缩。当前，如果字典收集了至少 100 个文档，则会对其进行训练。
+ 工作 Read-intensive 负载类型：由于解压缩开销，将全部数据存入缓冲区缓存的工作负载的延迟和 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\_collection\_compression” 的值。

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

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

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

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

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

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

CollStats 指标：
+ storageSize
+ size

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