本文介紹ApsaraDB for MongoDB支援的版本、引擎及版本和引擎之間的適配關係,協助您選擇適合您的業務需求的執行個體。
支援版本
ApsaraDB for MongoDB支援如下版本:
您可以在執行個體運行期間手動升級資料庫版本,但版本升級後不支援降級。詳情請參見升級資料庫版本。
儲存引擎
儲存引擎 | 適用情境 | 說明 |
WiredTiger | 預設儲存引擎,適用於大多數業務情境。 | 基於BTree結構組織資料,相比MongoDB早期的MMAPv1儲存引擎效能提升明顯,且支援資料壓縮,儲存成本更低。 |
版本和儲存引擎的適配關係
儲存引擎 | 4.4及以上版本 | 4.2版本 | 4.0版本 | 3.4版本 |
WiredTiger |
|
|
|
|
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版本已下線,詳情請參見【通知】2月4日ApsaraDB for MongoDB下線3.2版本,上線4.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中增加了對唯讀視圖的支援,可以將集合中滿足某個查詢條件的資料虛擬成一個特殊的集合,使用者可以在特殊的集合上做進一步的查詢操作。