View a markdown version of this page

在 Amazon DocumentDB 8.0 中管理基于字典的压缩 - Amazon DocumentDB

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

在 Amazon DocumentDB 8.0 中管理基于字典的压缩

亚马逊 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 版本不支持压缩。

性能注意事项

Zstd 压缩涉及以下权衡:

  • 存储与 CPU:与 LZ4 压缩相比,Zstd 压缩可实现更好的压缩率,但使用的 CPU 资源可能会稍多一些。

  • 初始压缩:在插入足够的文档来训练有效的字典之前,新集合可能无法实现最佳压缩。当前,如果字典收集了至少 100 个文档,则会对其进行训练。

  • 工作 Read-intensive 负载类型:由于解压缩开销,将全部数据存入缓冲区缓存的工作负载的延迟和 CPU 使用率可能会增加。

Zstd 压缩对于包含小型文档、文档数组和重复字段名的集合特别有效。

启用基于字典的压缩

对于新的集合,您可以使用以下命令启用 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” 的值。

开始使用

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

监控

您可以使用以下命令之一查看集合的压缩信息:

  • 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 的吞吐量)也很有用。