天天看點

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開始

1.運作reshardCollection指令即可啟動重新分片。

2.重新分片的過程高效。

并不是簡單地重新平衡資料,而是在背景将所有目前集合的資料複制并重新寫入新集合,同時與應用程式新的寫入保持同步。

3.重新分片是完全自動化的。

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

4.通過使用線上重新分片,可以友善地在開發或測試環境中評估不同分片鍵的效果,也可以在您需要時修改分片鍵。

您可以在業務運作(資料不斷增長)的情況下,按需改變集合的分片鍵(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引入了文法高亮、智能自動完成、上下文幫助和有用的錯誤資訊,為您創造一個直覺、互動的體驗。

1.增強的使用者體驗

  • 更容易編寫查詢和聚合,更容易閱讀結果。

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

  • 更快輸入查詢和指令。

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

示例:當您不記得某個指令的文法時,您可以直接從MongoDB Shell中快速查找該指令的文法。

MongoDB 5.0新特性概覽

2.進階腳本環境

新版MongoDB Shell的腳本環境建立在Node.js REPL(互動式解釋器)之上,您在腳本中可以使用所有的Node.js API和NPM的任何子產品。您也可以從檔案系統中加載和運作腳本(和舊版MongoDB Shell一樣,您可以繼續使用Load和Eval執行腳本)。

3.擴充性和插件

新版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釋出的版本将分為Marjor Release(大版本)和Rapid Releases(快速釋出版本),其中Rapid Releases作為開發版本提供下載下傳和測試體驗,但不建議用在生産環境。