全部產品
Search
文件中心

ApsaraDB for MongoDB:MongoDB 7.0新特性概覽

更新時間:Mar 13, 2025

本文介紹ApsaraDB for MongoDB7.0版本推出的新特性和最佳化項。

預覽

本文將從以下方面介紹ApsaraDB for MongoDB 7.0版本:

MongoDB 7.0的更多新特性以及最佳化項,請參見MongoDB 7.0 release-notes

可查詢加密(Queryable Encryption)

MongoDB 6.0版本中,可查詢加密功能為預覽(Preview)版本,該功能在MongoDB 7.0版本中正式發布(Generally Available),更多資訊請參見Queryable Encryption

支援分區中繼資料一致性校正

MongoDB 7.0版本中新增了checkMetadataConsistency命令,以檢查不同分區中中繼資料不一致的情況,樣本如下。

樣本1:

// Command
db.runCommand( {
   checkMetadataConsistency: 1,
   checkIndexes: true
} )

樣本2:

//mongosh
db.checkMetadataConsistency()
db.collection.checkMetadataConsistency()
sh.checkMetadataConsistency() 

您可以在日常營運中增加該巡檢項,儘早發現可能不一致的風險。更多資訊請參見checkMetadataConsistency

支援採樣查詢與分析分區鍵(analyzeShardKey)

支援基於採樣查詢(Sampled queries)的結果來分析集合的分區鍵是否合理,可以協助您更好地設計Schema以及分區鍵、更合理使用分區架構。核心命令analyzeShardKey的文法如下:

db.adminCommand(
   {
     analyzeShardKey: <string>,
     key: <shardKey>,
     keyCharacteristics: <bool>,
     readWriteDistribution: <bool>,
     sampleRate: <double>,
     sampleSize: <int>
   }
 )
說明

儘管該命令並不會阻塞集合上的讀寫操作,但為了降低對業務的影響,建議配套使用secondarysecondaryPreferred模式的Read preference執行。mongos預設為secondaryPreferred模式。

更多資訊請參考analyShardKeyconfigureQueryAnalyzer

自動合并(AutoMerger)

MongoDB 7.0為自動均衡器(Balancer)實現了一個新的自動合并器(AutoMerger),當資料或索引分布不均衡、存在過多分區或進行資料移轉時,自動合并器會合并Chunks,以均衡資料並提高效能。MongoDB 7.0預設開啟該功能,您也可以通過Balancer使用中視窗的控制該功能。

之前版本引入用於單個集合資料均衡的configureCollectionBalancing命令也支援了AutoMerge:

db.adminCommand(
   {
     configureCollectionBalancing: "<db>.<collection>",
     chunkSize: <num>,
     defragmentCollection: <bool>,
     enableAutoMerger: <bool>
   }
)

除此之外,您也可以通過mergeAllChunksOnShard命令將一個分區上所有可合并的Chunk(或Range)進行手動合并:

db.adminCommand( { mergeAllChunksOnShard: "db.coll", shard: "Shard0" } )

分區(Sharding)

除了上文提到過的AutoMerger以外,還有以下最佳化項:

  • 支援通過參數rangeDeleterHighPriority設定刪除孤兒文檔是否具備更高的優先順序。通常業務的刪除往往具有更高的優先順序, 所以該參數預設為false

  • 不再支援用於記錄目錄緩衝重新整理行為的operationsBlockedByRefresh監控指標,原因為基於mongos每個利用集合路由資訊的操作都會增加該計數器的次數。

  • 新增關於Resharding的監控指標。

  • addShard命令不再支援maxSize選項。

  • 調整config.settings集合的chunksize時,增加了合理性校正,將值限制在[1,1024]。

  • MongoDB在6.0.3版本後對Balancer策略進行若干調整:

    • Balancer不再依據分區間Chunks數量的差異,而是依據分區間資料量的差異進行均衡。

    • 將Chunk的邏輯概念轉為Range。

    • 自動分裂(auto-splitting)只會在跨分區移動時發生。

安全性

  • 支援KMIP 1.0和1.1。

  • 支援OpenSSL 3.0以及OpenSSL FIPS。

彙總(Aggregation)

新增了以下操作符,支援位計算和百分位元:

欄位名

描述

$bitAnd

返回Int或Long類型數值的按位與運算的結果。

$bitNot

返回Int或Long類型數值的按位取反運算結果。

$bitOr

返回Int或Long類型數值的按位或運算的結果。

$bitXor

返回Int或Long類型數值的按位異或運算的結果。

$median

返回近似中位元,相當於50百分位元。

$percentile

返回指定的百分位元。

時序集合(Time-Series Collection)

  • 移除了之前版本對於時序集合DELETE命令的操作限制。除了不能在多文檔事務中使用相關刪除命令外,當前DELETE命令再無其他限制。

  • COMPACT命令支援時序集合。

其他最佳化

  • 慢日誌新增了catalogCacheIndexLookupDurationMillis等欄位,更多資訊請參見log messages for slow queries

  • 支援動態調整儲存引擎事務並發度,之前預設是128,從MongoDB 7.0起,MongoDB會自動動態調整該並發度,更多資訊請參見Concurrent Storage Engine Transactions

  • currentOp新增了關於query sampling的全新欄位,更多資訊請參見currentop-metrics

  • 支援複合萬用字元索引,更多資訊請參見Compound Wildcard Indexes

  • 新增$changeStreamSplitLargeEvent運算元支援對超過16 MB的超大變更事件(change events)進行切分,更多資訊請參見Large Change Stream Events

  • 最佳化基於Slot查詢執行引擎的效能。

  • 新增Chunk遷移的指標,更多資訊請參見New Sharding Statistics for Chunk Migrations

  • 支援通過USER_ROLES系統變數來擷取當前User的角色。

  • 新增analyzeShardKeybalancerqueryAnalyzers相關的全域參數。

  • serverStatus的返回結果新增更多欄位,更多資訊請參見serverStatus Output Change