tencent cloud

文档反馈

7.0 新特性速览

最后更新时间:2024-10-25 11:19:23
    本文列出云数据库 MongoDB 7.0 推出的主要特性。具体信息,请参见 MongoDB 7.0 release-notes

    基于插槽的查询执行引擎性能提升

    MongoDB 7.0 版本中的基于槽的查询执行引擎(Slot-Based Query Execution Engine)是对之前版本的进一步优化和扩展。这项技术通过将查询操作分解成一系列的“槽”(slot),每个槽负责处理查询的一个特定部分,从而允许更细粒度的并行处理。这样的设计使得数据库在处理复杂查询时能够更加高效,尤其是在处理包含 $group 或 $lookup 阶段的聚合管道查询时,新引擎能够提供更好的性能表现。

    分片键分析

    MongoDB 7.0 版本中引入的 analyzeShardKey 命令和 db.collection.analyzeShardKey() 方法是用于分析集合的分片键性能的重要工具。这些工具基于采样查询的结果来评估分片键的合理性,从而帮助设计更优的 Schema 以及分片键,使得数据在分片集群中的分布更加合理,提高查询效率。
    analyzeShardKey 命令的基本语法如下:
    db.adminCommand({
    analyzeShardKey: <string>,
    key: <shardKey>,
    keyCharacteristics: <bool>,
    readWriteDistribution: <bool>,
    sampleRate: <double>,
    sampleSize: <int>
    })
    analyzeShardKey 字段:指定要分析的集合的命名空间。
    key 字段:定义要分析的分片键。这可以是未分片集合或分片集合的候选分片键,也可以是分片集合的当前分片键。
    keyCharacteristics 字段:决定是否计算分片键的特征指标,如关联基数、频率和单调性。
    readWriteDistribution 字段:决定是否计算读写分布的指标。
    sampleRate 字段:定义计算分片键特征指标时,集合中要进行采样的文档所占的比例。
    sampleSize 字段:定义计算分片键特征相关指标时要采样的文档数量。
    说明:
    使用 configureQueryAnalyzer 命令或 db.collection.configureQueryAnalyzer() 方法可配置查询分析器对在集合上运行的查询进行采样。

    可查询加密(Queryable Encryption)

    MongoDB 7.0 版本中引入的可查询加密(Queryable Encryption)是一项重要的安全特性,允许用户在客户端加密敏感数据字段,并将这些字段以完全随机化的加密数据形式存储在数据库服务器端。同时,还支持对加密数据运行表达性查询。以下是可查询加密的一些关键点:
    数据加密与查询:可查询加密允许客户端加密敏感数据字段,并在数据库服务器端以加密形式存储这些字段。同时,支持对加密数据执行等值和范围查询 。
    加密与解密过程:敏感数据在整个生命周期内(包括传输中、静态存储时、使用中、日志中、备份中)都被加密,只有在客户端才会被解密。
    自动加密与显式加密:可查询加密可以通过自动加密或显式加密的方式实现。自动加密允许执行加密的读取和写入操作,而无需添加对加密和解密字段的显式调用。显式加密则允许通过 MongoDB 驱动程序的加密库执行加密读写操作,但这需要在应用程序中指定使用此库进行加密的逻辑 。
    密钥管理:在生产环境中使用可查询加密时,必须使用远程密钥管理系统(KMS)来存储加密密钥。

    自动合并(AutoMerger)

    MongoDB 7.0 版本中引入的自动合并器(AutoMerger)是自动均衡器(Balancer)的一个重要组成部分,它旨在优化分片集群中的数据分布。自动合并器会在数据或索引分布不均衡、存在过多分片或进行数据迁移时自动运行,它会自动合并满足特定合并要求的 chunks。每隔 autoMergerIntervalSecs 秒执行一次自动合并操作。管理员可以通过 configureCollectionBalancing 命令启用或禁用自动合并器,例如:
    db.adminCommand({
    configureCollectionBalancing: "<db>.<collection>",
    chunkSize: <num>,
    defragmentCollection: <bool>,
    enableAutoMerger: <bool>
    })

    新的聚合操作符:$median 和 $percentile

    $median 聚合操作符:用于计算输入值的中位数。中位数是将数值按大小顺序排列后位于中间的值。如果输入值的数量是奇数,中位数就是中间的数值;如果是偶数,则中位数是中间两个数值的平均值。如下示例按 category 分组,并计算每个组的 value 字段的中位数。
    db.collection.aggregate([
    {
    $group: {
    _id: "$category",
    medianValue: { $median: { input: "$value" } }
    }
    }
    ])
    $percentile 操作符:用于计算输入数组中指定百分位的值。百分位是指在一组数据中,有百分之多少的数据项小于或等于这个值。如下示例按 category 分组,并计算每个组的 value 字段的 90 百分位数。
    db.collection.aggregate([
    {
    $group: {
    _id: "$category",
    percentileValue: { $percentile: { input: "$value", p: 0.90, method: "approximate" } }
    }
    }
    ])

    复合通配符索引(Compound Wildcard Indexes)

    MongoDB 7.0 版本中引入的复合通配符索引(Compound Wildcard Indexes)是一项新特性,允许在多个字段上创建索引,其中可以包含一个通配符项和多个非通配符项。这种索引对于具有灵活模式的文档特别有用,即文档字段名称在集合中可能不同。如下示例,使用 wildcardProjection 来指定索引中应包含哪些子字段。通配符索引项 $**指定集合中的每个字段,而 wildcardProjection 限制索引到指定的字段 "customFields.addr"和 "customFields.name"。更多信息,请参见 Compound Wildcard Indexes
    db.runCommand({
    createIndexes: "salesData",
    indexes: [
    {
    key: {
    tenantId: 1,
    "$**": 1
    },
    name: "tenant_customFields_projection",
    wildcardProjection: {
    "customFields.addr": 1,
    "customFields.name": 1
    }
    }
    ]
    })

    其他特性

    ChangeStream 支持超大变更事件,新增了 $changeStreamSplitLargeEvent 阶段,支持对超过16MB的超大变更事件进行切分。具体信息,请参见 Large Change Stream Events
    慢查询日志增加了新的字段 catalogCacheIndexLookupDurationMillis,用于记录操作在索引缓存中获取索引信息所花费的时间,有助于更精确地分析和诊断查询性能问题,特别是在涉及索引查找的操作中。具体信息,请参见 log messages for slow queries
    WT 引擎动态限流:自动动态调整 WT 存储引擎的事务并发度,以优化数据库在高负载下的性能。具体信息,请参见 Concurrent Storage Engine Transactions
    安全性提升,支持 KMIP 1.0和1.1,以及 OpenSSL 3.0和 OpenSSL FIPS,增强了数据安全性。
    新增了用于监控 Chunk 迁移的统计指标。具体信息,请参见 New Sharding Statistics for Chunk Migrations
    元数据一致性检查,MongoDB 7.0 版本中引入的 checkMetadataConsistency 命令用于检查分片集群中的元数据一致性问题。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持