MongoDB 5.0新特性概覽

阿里雲開發者發表於2021-10-16
簡介:MongoDB 5.0標誌著一個新的釋出週期的到來,以更快地交付新特性給到使用者。版本化API與線上重新分片相結合,使使用者不必擔心未來的資料庫升級以及業務變化問題;本地原生時間序列資料平臺也使MongoDB能支援更廣泛的工作負載和業務場景;新的MongoDB Shell能夠提升使用者體驗等均為MongoDB 5.0的功能。本文主要介紹MongoDB 5.0的新特性。

MongoDB 5.0標誌著一個新的釋出週期的到來,以更快地交付新特性給到使用者。版本化API與線上重新分片相結合,使使用者不必擔心未來的資料庫升級以及業務變化問題;本地原生時間序列資料平臺也使MongoDB能支援更廣泛的工作負載和業務場景;新的MongoDB Shell能夠提升使用者體驗等均為MongoDB 5.0的功能。本文主要介紹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中快速查詢該命令的語法。

 title=

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

版權宣告:本文內容由阿里雲實名註冊使用者自發貢獻,版權歸原作者所有,阿里雲開發者社群不擁有其著作權,亦不承擔相應法律責任。具體規則請檢視《阿里雲開發者社群使用者服務協議》和《阿里雲開發者社群智慧財產權保護指引》。如果您發現本社群中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社群將立刻刪除涉嫌侵權內容。

相關文章