全部產品
Search
文件中心

ApsaraDB for MongoDB:版本及儲存引擎

更新時間:Jun 19, 2024

本文介紹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以及分區鍵、更合理使用分區架構。更多資訊請參見analyShardKeyconfigureQueryAnalyzer

  • 自動合并

    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的角色。

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

    • 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

    • 支援createcreateIndexesmodifyshardCollection等DDL語句,更多資訊,請參見Change Events

    • Change Events新增wallTime欄位,時間戳記支援多種轉換和展示運算元(包括$toDate$tsSecondstsIncrement)以方便業務消費。

  • 彙總

    推出了如下新特性以及最佳化項:

    • 分區叢集執行個體支援$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中增加了對唯讀視圖的支援,可以將集合中滿足某個查詢條件的資料虛擬成一個特殊的集合,使用者可以在特殊的集合上做進一步的查詢操作。