本文介紹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以前 | 重新分區過程複雜且需要手動分區。 |
|
| MongoDB 5.0開始 |
| 您可以在業務運行(資料不斷增長)的情況下,按需改變集合的分區鍵(Shard key),而不需要資料庫停機或在資料集合中進行複雜的遷移。您只需要在MongoDB Shell中運行reshardCollection命令,選擇您需要重新分區的資料庫和集合,指定新的分區鍵即可。說明
|
版本化API
- 應用程式相容性
從MongoDB 5.0開始,版本化API定義了應用程式最常用的一組命令和參數(無論是資料庫在年度重大發布還是季度快速發布期間,這些命令均不會改變)。通過將應用程式生命週期和資料庫生命週期解耦,您可以將驅動程式固定在MongoDB API的特定版本上,即使資料庫發生升級和改進,您的應用程式將可以繼續運行數年而不需要修改代碼。
- 靈活地添加新功能和改進內容
版本化API支援MongoDB靈活地在每個版本中為資料庫添加新的功能和改進內容(以新版本相容早期版本的方式)。當您需要改變API時,可以增加新版本的API,並與現有版本化的API在同一台伺服器上同時運行。隨著MongoDB版本發布的加速,版本化API能夠使您更快、更輕鬆地使用到MongoDB最新版本的功能特性。
Write Concern預設Majority層級
串連管理最佳化
預設情況下,一個用戶端串連對應後端MongoDB伺服器上的一個線程(net.serviceExecutor配置為synchronous)。建立、切換和銷毀線程都是消耗較大的操作,當串連數過多時,線程會佔用MongoDB伺服器較多的資源。
串連數較多或建立串連失控的情況稱為“串連風暴”,產生該情況的原因可能是多方面的,且經常是在服務已經受到影響的情況下發生。
- 限制在任何時候驅動程式嘗試建立的串連數量,以簡單有效方式防止資料庫伺服器過載。
- 減少驅動程式監控串連池時的檢查頻率,給無響應或過載的伺服器節點一個緩衝和恢複的機會。
- 驅動程式將工作負載導向具有最健康串連池的更快的伺服器,而不是從可用的伺服器中隨機播放。
以上措施,加上之前版本在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。