全部產品
Search
文件中心

ApsaraDB for MongoDB:MongoDB 5.0新特性概覽

更新時間:Feb 28, 2024

本文介紹MongoDB 5.0的主要新特性。

背景資訊

MongoDB 5.0標誌著一個新的發布周期的到來,以更快地交付新特性給使用者。例如:版本化API與線上重新分區相結合,使使用者不必擔心未來的資料庫升級以及業務變化問題;本地原生時間序列資料平台使MongoDB能夠支援更廣泛的工作負載和業務情境;新的MongoDB Shell能夠提升使用者體驗等均為MongoDB 5.0的功能。

原生時間序列平台

MongoDB 5.0通過原生支援整個時間序列資料的生命週期(從採集、儲存、查詢、即時分析和可視化,到線上歸檔或隨著資料老化自動失效),使構建和已耗用時間序列應用程式的速度更快、成本更低。隨著MongoDB 5.0的發布,MongoDB擴充了通用的應用資料平台,使開發能夠更容易地處理時間序列資料,進一步擴充其在物聯網、金融分析、物流等方面的應用情境。

MongoDB的時間序列集合以高度最佳化和壓縮的格式自動儲存時間序列資料,減少了儲存大小和I/O,以實現更好的效能和更大的規模。同時也縮短了開發週期,使您能夠快速建立一個針對時間序列應用的效能和分析需求而調優的模型。

建立時間序列資料集合的命令樣本:
db.createCollection("collection_name",{ timeseries: { timeField: "timestamp" } } )

MongoDB可以無縫地調整採集頻率,並根據動態產生的時間分區自動處理無序的測量值。最新發行的MongoDB Connector for Apache Kafka實現了在本地支援時間序列,您可以直接從Kafka主題訊息中自動建立時間序列集合,使您在收集資料的同時根據需要對資料進行處理和彙總,然後寫入到MongoDB的時間序列集合。

時間序列集合自動建立一個按時間排序的資料叢集索引,降低查詢資料的延遲。MongoDB查詢API還擴充了視窗函數,您可以運行分析性查詢(例如移動平均數和累積總和)。在關係型資料庫系統中,這些通常被稱為SQL分析函數,並支援以行為單位定義的視窗(即三行移動平均線)。MongoDB更進一步,還增加了指數移動平均、導數和積分等強大的時間序列函數,支援您以時間為單位定義視窗(例如15分鐘的移動平均線)。視窗函數可用於查詢MongoDB的時間序列和常規集合,為多種應用類型提供了新的分析方式。另外,MongoDB 5.0也提供了新的時間運算子,包括$dateAdd$dateSubstract$dateDiff$dateTrunc,使您可以通過自訂的時間視窗對資料進行匯總和查詢。

您可以將MongoDB的時間序列資料與企業的其他資料相結合。時間序列集合可以與同一個資料庫中的常規MongoDB集合放在一起,您不必選擇一個專門的時間序列資料庫(它不能為任何其他類型的應用提供服務),也不需要複雜的整合來混合時間序列和其他資料。MongoDB通過提供一個統一的平台,讓您建立高效能和高效的時間序列應用的同時,也為其他用例或工作負載提供支援,從而消除了整合和運行多個不同資料庫的成本和複雜性。

線上資料重新分區

資料庫版本特點實現方法
MongoDB 5.0以前重新分區過程複雜且需要手動分區。
  • 方法一:先dump整個集合,然後用新的分區鍵把資料庫重新載入到一個新的集合中。

    由於這是一個需要離線處理的過程,因此您的應用程式在重新載入完成之前需要中斷停服較長時間。例如:在一個三分區的叢集上dump和重新載入一個10 TB以上的集合可能需要幾天時間。

  • 方法二:建立一個分區叢集並重新設定集合的分區鍵,然後通過定製遷移方式,將舊分區叢集中需要重新分區的集合,按新的分區鍵寫入到新的分區叢集中。
    • 該過程中需要您自行處理查詢路由和遷移邏輯、不斷檢查遷移進度,以確保所有資料移轉成功。
    • 定製遷移是高度複雜的、勞動密集型的、有風險的任務,而且耗時很長。例如:某個MongoDB使用者花了三個月才完成100億個document的遷移。
MongoDB 5.0開始
  • 運行reshardCollection命令即可啟動重新分區。
  • 重新分區的過程高效。

    並不是簡單地重新平衡資料,而是在後台將所有當前集合的資料複製並重新寫入新集合,同時與應用程式新的寫入保持同步。

  • 重新分區是完全自動化的。

    將重新分區花費的時間從幾周或幾個月壓縮到幾分鐘或幾小時,避免了冗長繁雜的手動資料移轉。

  • 通過使用線上重新分區,可以方便地在開發或測試環境中評估不同分區鍵的效果,也可以在您需要時修改分區鍵。
您可以在業務運行(資料不斷增長)的情況下,按需改變集合的分區鍵(Shard key),而不需要資料庫停機或在資料集合中進行複雜的遷移。您只需要在MongoDB Shell中運行reshardCollection命令,選擇您需要重新分區的資料庫和集合,指定新的分區鍵即可。
reshardCollection: "<database>.<collection>", key: <shardkey>
說明
  • <database>:需要重新分區的資料庫名稱。
  • <collection>:需要重新分區的集合名稱。
  • <shardkey>:分區鍵的名稱。
  • 當您調用reshardCollection命令時,MongoDB會複製現有集合,然後將現有集合中所有oplog應用到新集合中,當所有oplog被使用後,MongoDB會自動切換到新集合,並在後台刪除舊集合。

版本化API

  • 應用程式相容性

    從MongoDB 5.0開始,版本化API定義了應用程式最常用的一組命令和參數(無論是資料庫在年度重大發布還是季度快速發布期間,這些命令均不會改變)。通過將應用程式生命週期和資料庫生命週期解耦,您可以將驅動程式固定在MongoDB API的特定版本上,即使資料庫發生升級和改進,您的應用程式將可以繼續運行數年而不需要修改代碼。

  • 靈活地添加新功能和改進內容

    版本化API支援MongoDB靈活地在每個版本中為資料庫添加新的功能和改進內容(以新版本相容早期版本的方式)。當您需要改變API時,可以增加新版本的API,並與現有版本化的API在同一台伺服器上同時運行。隨著MongoDB版本發布的加速,版本化API能夠使您更快、更輕鬆地使用到MongoDB最新版本的功能特性。

Write Concern預設Majority層級

從MongoDB 5.0開始,Write Concern預設層級為majority,僅當寫入操作被應用到Primary節點(主節點)且被持久化到大多數副本節點的日誌中的時候,才會提交並返回成功,“開箱即用”地提供了更強的資料可靠性保障。
說明 Write Concern是完全可調的,您可以自訂配置Write Concern,以平衡應用程式對資料庫效能和資料持久性的要求。

串連管理最佳化

預設情況下,一個用戶端串連對應後端MongoDB伺服器上的一個線程(net.serviceExecutor配置為synchronous)。建立、切換和銷毀線程都是消耗較大的操作,當串連數過多時,線程會佔用MongoDB伺服器較多的資源。

串連數較多或建立串連失控的情況稱為“串連風暴”,產生該情況的原因可能是多方面的,且經常是在服務已經受到影響的情況下發生。

針對這些情況,MongoDB 5.0採取了以下措施:
  • 限制在任何時候驅動程式嘗試建立的串連數量,以簡單有效方式防止資料庫伺服器過載。
  • 減少驅動程式監控串連池時的檢查頻率,給無響應或過載的伺服器節點一個緩衝和恢複的機會。
  • 驅動程式將工作負載導向具有最健康串連池的更快的伺服器,而不是從可用的伺服器中隨機播放。

以上措施,加上之前版本在mongos查詢路由層的改進,進一步提升了MongoDB承受高並發負載的能力。

長時間啟動並執行快照查詢

長時間啟動並執行快照查詢(Long-Running Snapshot Queries)增加了應用程式的通用性和彈性。您可以通過該功能運行預設時間為5分鐘的查詢(或將其調整為自訂期間),同時保持與即時事務性資料庫一致的快照隔離,也可以在Secondary節點(從節點)上進行快照查詢,從而在單個叢集中運行不同的工作負載,並將其擴充到不同的分區上。

MongoDB通過底層儲存引擎中一個名為Durable history的專案實現了長期啟動並執行快照查詢,該專案早在MongoDB 4.4中就已實現。Durable history將儲存自查詢開始以來所有變化的欄位值的快照。通過使用Durable history,查詢可以保持快照隔離,即使在資料發生變化的情況下,Durable history也有助於降低儲存引擎的緩衝壓力,使得業務可以在高寫入負載的情境下實現更高的查詢輸送量。

新版MongoDB Shell

為了提供更好的使用者體驗,MongoDB 5.0從頭開始重新設計了MongoDB Shell(mongosh),以提供一個更現代化的命令列體驗,以及增強可用性的功能和強大的指令碼環境。新版MongoDB Shell已經成為MongoDB平台的預設Shell。新版MongoDB Shell引入了文法高亮、智能自動完成、上下文協助和有用的錯誤資訊,為您創造一個直觀、互動的體驗。

  • 增強使用者體驗
    • 更容易編寫查詢和彙總,更容易閱讀結果。

      新版MongoDB Shell支援文法高亮功能,方便您區分欄位、值和資料類型,以避免語法錯誤。如果仍然發生錯誤,新版MongoDB Shell也可以指出問題點並告訴您解決方案。

    • 更快輸入查詢和命令。

      新版MongoDB Shell支援智能自動完成功能,即新版MongoDB Shell可以根據您串連的MongoDB的版本,為方法、命令、MQL運算式等給出自動完成選項的提示。

      樣本:當您不記得某個命令的文法時,您可以直接從MongoDB Shell中快速尋找該命令的文法。尋找命令的文法
  • 進階指令碼環境

    新版MongoDB Shell的指令碼環境建立在Node.js REPL(互動式解譯器)之上,您在指令碼中可以使用所有的Node.js API和NPM的任何模組。您也可以從檔案系統中載入和運行指令碼(和舊版MongoDB Shell一樣,您可以繼續使用Load和Eval執行指令碼)。

  • 擴充性和外掛程式

    新版MongoDB Shell具有易擴充性,使您能夠使用MongoDB的所有功能以提高生產力。

    在新版MongoDB Shell中,允許安裝Snippets外掛程式。Snippets可以自動載入至MongoDB Shell中,且Snippets可以使用所有的Node.js API和NPM包。MongoDB也維護了一個Snippets倉庫,提供了一些有趣的功能(例如分析指定集合模式的外掛程式),您也可以自由地配置MongoDB Shell使用您選擇的外掛程式。
    說明 外掛程式當前僅為MongoDB Shell的一個實驗性功能。

PyMongoArrow與資料科學

隨著新的PyMongoArrow API的發布,您可以在MongoDB上使用Python運行複雜的分析和機器學習。PyMongoArrow可以快速將簡單的MongoDB查詢結果轉換為流行的資料格式(例如Pandas資料架構和NumPy數組),協助您簡化資料科學工作流程。

Schema驗證改進

Schema驗證(模式驗證)是對MongoDB進行資料應用管理控制的一種方式。MongoDB 5.0中,模式驗證變得更加簡單和友好,當操作驗證失敗時都會產生描述性的錯誤資訊,協助您瞭解不符合集合驗證器的驗證規則的文檔及原因,以快速識別和糾正影響驗證規則的錯誤碼。

可恢複的索引建立任務

MongoDB 5.0支援將進行中中的索引建立任務在節點重新啟動後自動會恢複至原來的位置,減少計劃中維護動作對業務的影響。例如:重新啟動或升級資料庫節點時,您不需要擔心當前進行中的大集合索引建立任務失效。

版本發布調整

由於MongoDB支援很多版本和平台,每個發布版本都需在20多個MongoDB支援的平台上進行驗證,驗證工作量大,降低了MongoDB新功能的交付速度,所以從MongoDB 5.0開始,MongoDB發布的版本將分為Major Release(大版本)和Rapid Releases(快速發布版本),其中Rapid Releases作為開發版本提供下載和測試體驗,但不建議用在生產環境。

更多特性

關於MongoDB 5.0更多特性,請參見MongoDB 5.0