本文介紹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>
}
)儘管該命令並不會阻塞集合上的讀寫操作,但為了降低對業務的影響,建議配套使用secondary或secondaryPreferred模式的Read preference執行。mongos預設為secondaryPreferred模式。
更多資訊請參考analyShardKey與configureQueryAnalyzer。
自動合并(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)
新增了以下操作符,支援位計算和百分位元:
欄位名 | 描述 |
| 返回Int或Long類型數值的按位與運算的結果。 |
| 返回Int或Long類型數值的按位取反運算結果。 |
| 返回Int或Long類型數值的按位或運算的結果。 |
| 返回Int或Long類型數值的按位異或運算的結果。 |
| 返回近似中位元,相當於50百分位元。 |
| 返回指定的百分位元。 |
時序集合(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的角色。新增
analyzeShardKey、balancer、queryAnalyzers相關的全域參數。serverStatus的返回結果新增更多欄位,更多資訊請參見serverStatus Output Change。