本文介紹云數據庫MongoDB支持的版本、引擎及版本和引擎之間的適配關系,幫助您選擇適合您的業務需求的實例。
支持版本
云數據庫MongoDB支持如下版本:
您可以在實例運行期間手動升級數據庫版本,但版本升級后不支持降級。詳情請參見升級數據庫版本。
存儲引擎
存儲引擎 | 適用場景 | 說明 |
WiredTiger | 默認存儲引擎,適用于大多數業務場景。 | 基于BTree結構組織數據,相比MongoDB早期的MMAPv1存儲引擎性能提升明顯,且支持數據壓縮,存儲成本更低。 |
RocksDB(已下線) | 適用于大量寫且少讀的場景。 | 基于LSM tree結構組織數據,針對性優化數據寫入,將隨機寫入轉換成了順序寫入,能保證持續高效的數據寫入。 |
TerarkDB(已下線) | 適用于多讀少寫或批量寫大量讀的場景。 | 借助TerarkDB的全局壓縮技術,在提高壓縮率的同時,能大幅提高隨機查詢的性能。 |
版本和存儲引擎的適配關系
存儲引擎 | 4.4及以上版本 | 4.2版本 | 4.0版本 | 3.4版本 |
WiredTiger |
|
|
|
|
RocksDB(已下線) | - | - | - |
|
TerarkDB(已下線) | - | - | - | 分片集群實例 |
MongoDB 7.0版本說明
新推出可查詢加密(Queryable Encryption)、分片元數據一致性校驗、采樣查詢與分析分片鍵(analyzeShardKey)和自動合并(AutoMerger)功能,并在分片(Sharding)、時序集合(Time-Series Collection)、聚合(Aggregation)和安全性等方面進行了增強優化。
可查詢加密
在MongoDB 6.0版本中,可查詢加密功能為預覽(Preview)版本,該功能在MongoDB 7.0版本中正式發布(Generally Available),更多信息請參見Queryable Encryption。
分片元數據一致性校驗
MongoDB7.0版本中新增了checkMetadataConsistency命令,以檢查不同分片中元數據不一致的情況。您可以在日常運維中增加該巡檢項,盡早發現可能不一致的風險。更多信息請參見checkMetadataConsistency。
采樣查詢與分析分片鍵
支持基于采樣查詢(Sampled queries)的結果來分析集合的分片鍵是否合理,可以幫助您更好地設計Schema以及分片鍵、更合理使用分片架構。更多信息請參見analyShardKey與configureQueryAnalyzer。
自動合并
MongoDB 7.0為自動均衡器(Balancer)實現了一個新的自動合并器(AutoMerger),當數據或索引分布不均衡、存在過多分片或進行數據遷移時,自動合并器會合并Chunks,以均衡數據并提高性能。MongoDB 7.0默認開啟該功能,您也可以通過Balancer活動窗口的控制該功能。
分片
支持通過參數
rangeDeleterHighPriority
設置刪除孤兒文檔是否具備更高的優先級。通常業務的刪除往往具有更高的優先級, 所以該參數默認為false。不再支持用于記錄目錄緩存刷新行為的
operationsBlockedByRefresh
監控指標,原因為基于mongos每個利用集合路由信息的操作都會增加該計數器的次數。新增關于Resharding的監控指標。
addShard命令不再支持
maxSize
選項。調整
config.settings
集合的chunksize時,增加了合理性校驗,將值限制在[1,1024]。MongoDB在6.0.3版本后對Balancer策略進行若干調整:
Balancer不再依據分片間Chunks數量的差異,而是依據分片間數據量的差異進行均衡。
將Chunk的邏輯概念轉為Range。
自動分裂(auto-splitting)只會在跨分片移動時發生。
時序集合
移除了之前版本對于時序集合DELETE命令的操作限制。除了不能在多文檔事務中使用相關刪除命令外,當前DELETE命令再無其他限制。
COMPACT命令支持時序集合。
聚合
新增了以下操作符,支持位計算和百分位數:
字段名
描述
$bitAnd
返回Int或Long類型數值的按位與運算的結果。
$bitNot
返回Int或Long類型數值的按位取反運算結果。
$bitOr
返回Int或Long類型數值的按位或運算的結果。
$bitXor
返回Int或Long類型數值的按位異或運算的結果。
$median
返回近似中位數,相當于50百分位數。
$percentile
返回指定的百分位數。
安全性
支持KMIP 1.0和1.1。
支持OpenSSL 3.0以及OpenSSL FIPS。
其他優化
慢日志新增了
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。
MongoDB 6.0版本說明
新推出可查詢加密(Queryable Encryption)和集群同步(Cluster-to-Cluster Sync)功能,并在時序集合(Time Series Collection)、變更流(Change Streams)、聚合(Aggregation)、查詢(Query)、彈性和安全性方面進行了增強優化。
可查詢加密
允許用戶從客戶端加密敏感數據,將其作為完全隨機的加密數據存儲在數據庫服務器端,并對加密數據進行豐富的查詢。
可查詢加密只允許在客戶端查看敏感數據的明文,在查詢到達服務器端時會同時包含從KMS獲取的加密密鑰,然后在服務器端以密文進行查詢并返回,最后在客戶端利用密鑰解密后以明文呈現。
集群同步
推出了新的同步工具mongosync,它能支持跨任何環境(包括混合環境、Atlas、本地以及邊緣環境)的數據同步(兩個MongoDB實例間連續且單向的數據同步)。用戶還可以實時控制和監控整個同步過程,按需啟動、停止、恢復甚至反轉同步。
時序集合
分別從索引、查詢以及排序多個方面增強了時序集合。
引入二級和復合索引,以改善讀取性能。
引入針對時空數據的地理位置索引(Geo-Indexing),將地理信息添加到時序數據,有助于更好地分析涉及距離和位置的場景。
場景示例:跟蹤夏日冷鏈運輸車的溫度變化情況、監測特定航線上的貨運船燃料消耗。
優化對時序數據的
last point
查詢,不再需要掃描整個集合后才能查詢到最后一個數據點。優化對時序數據的排序,通過時間以及元數據字段上的聚簇索引(Clustered Index)和二級索引(Secondary Index)更高效地完成排序操作。
變更流
推出了如下新特性以及優化項:
支持查看變更前的視圖(Pre-image)。
說明MongoDB 6.0之前的版本僅支持查看變更后的視圖,從MongoDB 6.0版本開始,支持查看變更前后的視圖。前后視圖的更多信息,請參見Change Streams with Document Pre- and Post-Images。
支持
create
、createIndexes
、modify
和shardCollection
等DDL語句,更多信息,請參見Change Events。Change Events新增
wallTime
字段,時間戳支持多種轉換和展示算子(包括$toDate
、$tsSeconds
和tsIncrement
)以方便業務消費。
聚合
推出了如下新特性以及優化項:
分片集群實例支持
$lookup
和$graphLookup
。改進
$lookup
對JOINS的支持。改進
$graphLookup
對圖遍歷的支持。提升
$lookup
性能,部分場景中性能提升可達百倍。
說明$lookup
和$graphLookup
的更多信息,請參見$lookup (aggregation)和$graphLookup (aggregation)。查詢
新增
$maxN
、$topN
、$minN
、$bottomN
、$lastN
和$sortArray
等操作符。通過操作符可以將更多的計算從業務層下沉到數據庫中,使得業務層更加輕量化。說明操作符的更多信息,請參見Aggregation Pipeline Operators。
彈性
推出了如下新特性以及優化項:
將數據塊(Chunk)規格的默認值從64 MB調整為128 MB,有效降低了數據遷移頻率以及網絡和路由層的開銷。
支持
configureCollectionBalancing
命令,此命令支持的功能如下:支持為不同的分片表設置不同的數據塊規格。
示例:數據規模特別大的分片表,將數據塊規格調整到256 MB。數據規模相對較小但希望在分片上分布更均勻的分片表,將數據塊規格調整到64 MB或32 MB。
支持主動對集合進行碎片整理。
相較于
compact
命令,configureCollectionBalancing
命令提供了更好的碎片整理服務,有效降低了磁盤空間占用率。
說明configureCollectionBalancing
命令的更多信息,請參見configureCollectionBalancing。安全性
對客戶端字段級加密(CSFLE, Client-Side Field-Level Encryption)功能進行了優化。CSFLE將支持任何符合密鑰管理互通協議(KMIP,Key Management Interoperability Protocol)的密鑰管理提供商,即除了基于KeyFile的本地密鑰管理外,MongoDB支持通過KMIP與第三方密鑰管理設備集成,為用戶提供更安全的保障。
說明客戶端字段級加密功能被廣泛應用于敏感數據的管理中,尤其是數據遷移的場景。
MongoDB 5.0版本說明
標志著一個新的發布周期的到來,以更快地交付新特性給到用戶。
原生時間序列平臺
通過原生支持整個時間序列數據的生命周期(從采集、存儲、查詢、實時分析和可視化,到在線歸檔或隨著數據老化自動失效),使構建和運行時間序列應用程序的速度更快、成本更低。隨著MongoDB 5.0的發布,MongoDB擴展了通用的應用數據平臺,使開發能夠更容易地處理時間序列數據,進一步擴展其在物聯網、金融分析、物流等方面的應用場景。
在線重新分片
您可以在業務運行(數據不斷增長)的情況下,按需改變集合的分片鍵(Shard key),而不需要數據庫停機或在數據集合中進行復雜的遷移。您只需要在MongoDB Shell中運行reshardCollection命令,選擇您需要重新分片的數據庫和集合,指定新的分片鍵即可。
reshardCollection: "<database>.<collection>", key: <shardkey>
說明<database>:需要重新分片的數據庫名稱。
<collection>:需要重新分片的集合名稱。
<shardkey>:分片鍵的名稱。
當您調用reshardCollection命令時,MongoDB會克隆現有集合,然后將現有集合中所有oplog應用到新集合中,當所有oplog被使用后,MongoDB會自動切換到新集合,并在后臺刪除舊集合。
版本化API
版本化API支持MongoDB靈活地在每個版本中為數據庫添加新的功能和改進內容(以新版本兼容早期版本的方式)。當您需要改變API時,可以增加新版本的API,并與現有版本化的API在同一臺服務器上同時運行。隨著MongoDB版本發布的加速,版本化API能夠使您更快、更輕松地使用到MongoDB最新版本的功能特性。
版本化API定義了應用程序最常用的一組命令和參數(無論是數據庫在年度重大發布還是季度快速發布期間,這些命令均不會改變)。通過將應用程序生命周期和數據庫生命周期解耦,您可以將驅動程序固定在MongoDB API的特定版本上,即使數據庫發生升級和改進,您的應用程序將可以繼續運行數年而不需要修改代碼。
Write Concern默認Majority級別
從MongoDB 5.0開始,Write Concern默認級別為majority,僅當寫入操作被應用到Primary節點(主節點)且被持久化到大多數副本節點的日志中的時候,才會提交并返回成功,“開箱即用”地提供了更強的數據可靠性保障。
長時間運行的快照查詢
長時間運行的快照查詢(Long-Running Snapshot Queries)增加了應用程序的通用性和彈性。您可以通過該功能運行默認時間為5分鐘的查詢(或將其調整為自定義持續時間),同時保持與實時事務性數據庫一致的快照隔離,也可以在Secondary節點(從節點)上進行快照查詢,從而在單個集群中運行不同的工作負載,并將其擴展到不同的分片上。
新版MongoDB Shell
為了提供更好的用戶體驗,MongoDB 5.0從頭開始重新設計了MongoDB Shell(mongosh),以提供一個更現代化的命令行體驗,以及增強可用性的功能和強大的腳本環境。新版MongoDB Shell已經成為MongoDB平臺的默認Shell。新版MongoDB Shell引入了語法高亮、智能自動完成、上下文幫助和有用的錯誤信息,為您創造一個直觀、互動的體驗。
版本發布調整
從MongoDB 5.0開始,MongoDB發布的版本將分為Major Release(大版本)和Rapid Releases(快速發布版本),其中Rapid Releases作為開發版本提供下載和測試體驗,但不建議用在生產環境。
MongoDB 4.4版本說明
針對之前版本中用戶呼聲最高的痛點重點進行了改進。
Hidden Indexes
隱藏現有的索引,保證該索引在后續的查詢中不會被使用,用來觀察目標低效率索引的刪除是否會導致業務性能抖動,如不造成影響即可放心刪除該低效率索引。
Refinable Shard Keys
增加一個或多個Suffix Field來改善現有的文檔在Chunk上的分布問題,避免所有訪問集中在某個單一分片上,分散服務器的壓力。
Compound Hashed Shard Keys
支持在復合索引中指定單個哈希字段,在極大程度上簡化業務邏輯的復雜性。
Hedged Reads
在分片集群實例下,支持將一個讀請求同時發送給某個分片中的兩個副本集成員,并選擇響應最快的返回結果來恢復客戶端,以實現降低請求延遲的目的。
Streaming Replication
主庫Oplog主動流向備庫,相比之前版本的備庫輪詢方式,節省了近一半的往返時間,提升了主備復制的性能。
Simultaneous Indexing
主庫與備庫的索引創建操作同步進行,大幅減少主備庫在索引創建過程中產生的延遲,保證備庫能及時訪問到最新的數據。
Mirrored Reads
主節點會按一定的比例把讀流量復制到備庫上執行,保證從節點承載一定的讀流量,緩解業務的訪問延遲。
Resumable Initial Sync
在主備庫全量同步過程中,提供斷點續傳功能,避免因網絡斷連而導致全量同步工作從頭進行。
Time-Based Oplog Retention
支持自定義指定Oplog的保留時長,避免主庫Oplog被清理觸發全量同步。
Union
新增$unionWith stage用于實現類似于SQL的
union all
功能,增強了MongoDB的查詢能力。Custom Aggregation Expressions
新增$accumulator和$function用來實現自定義的Aggregation Expression,完善接口統一性和用戶體驗。
更多MongoDB 4.4版本的新功能,請參見MongoDB 4.4功能概覽。
MongoDB 4.2版本說明
采用二段提交方式,保證分片集群事務的ACID特性,極大拓展了適用的業務場景。
分布式事務
采用二段提交方式,保證分片集群事務的ACID特性,極大拓展了MongoDB的業務場景,實現從NoSQL到NewSQL的飛躍。
可重試讀
增加可重試讀功能,提供弱網環境下自動重試能力,降低業務端的邏輯復雜性,保證用戶業務的連續性。
通配符索引
對于非確定字段,支持創建通配符索引覆蓋一個文檔下的多個特征字段,管理方便且使用靈活。
字段級加密
驅動層面支持字段級加密,可以針對特定的敏感信息(例如賬號、密碼、價格、手機號等)單獨加密。避免全庫加密,提升業務靈活性和安全性。
物化視圖
通過最新的物化視圖可以緩存計算結果,避免重復計算提升運行效率,減少邏輯復雜度。
MongoDB 4.0版本說明
更適用于金融等對事務有依賴且使用NoSQL特性的場景。
跨文檔事務支持
首個支持跨文檔事務的NoSQL云數據庫,將文檔模型的速度,靈活性、功能與ACID保證相結合。
遷移速度提升40%
并發的讀取和寫入,使得新增的Shard節點能更快地完成數據遷移以承載業務壓力。
讀性能大幅擴展
借助事務特性,Secondary節點不再因為同步日志而阻塞讀取請求。 阿里云同時在全體系版本支持多節點擴展功能,可大幅提升業務讀取能力。
MongoDB 3.4版本說明
在性能和安全性等方面較3.2版本均有不同程度的提升。
MongoDB 3.2版本已下線,詳情請參見【通知】11月22日云數據庫MongoDB版3.2版本下線。
更快的主備同步
在同步數據的同時建立所有索引(以前的版本僅建立_id索引)。同時在同步數據的階段,Secondary節點不斷讀取新的oplog信息,確保Secondary節點的local數據庫具備足夠的存儲空間來存儲臨時數據。
更高效的負載均衡
3.2及以前版本中,分片集群的負載均衡由Mongos節點負責,多個Mongos節點會搶一個分布式鎖,由搶鎖成功的Mongos節點執行負載均衡任務,在Shard節點間遷移塊;而在3.4版本中,負載均衡由ConfigServer節點中的Primary節點負責,負載均衡的并發度和效率上均有大幅提升。
更豐富的aggregation操作
在3.4版本增加了大量的aggregation操作符,可支持更強的數據分析能力。例如,
bucket
能便捷地對數據進行分類;$grahpLookup
相較于3.2版本的$lookup
能支持更復雜的關系運算;$addFields
使得文檔操作更豐富(例如將某些字段求和存儲為新的字段)。支持Sharding Zones
分片集群里引入了Zone的概念,主要取代現在的tag-aware sharding機制,能將某些數據分配到指定的一個或多個Shard節點中,該特性極大地方便sharding cluster的跨機房部署。
支持Collation
在之前的版本里,文檔里存儲的字符串不論是中英文還是大小寫,一律按字節來對比;引入Collation后,支持對字符串的內容進行解讀,可以按使用的locale進行對比,也支持在對比時忽略大小寫。
支持只讀視圖(Read-only views)
在3.4中增加了對只讀視圖的支持,可以將集合中滿足某個查詢條件的數據虛擬成一個特殊的集合,用戶可以在特殊的集合上做進一步的查詢操作。