MongoDB 5.0新特性概览
MongoDB 5.0標(biāo)志著一個新的發(fā)布周期的到來,以更快地交付新特性給到用戶。版本化API與在線重新分片相結(jié)合,使用戶不必?fù)?dān)心未來的數(shù)據(jù)庫升級以及業(yè)務(wù)變化問題;本地原生時間序列數(shù)據(jù)平臺也使MongoDB能支持更廣泛的工作負(fù)載和業(yè)務(wù)場景;新的MongoDB Shell能夠提升用戶體驗等均為MongoDB 5.0的功能。本文主要介紹MongoDB 5.0的新特性。
原生時間序列平臺
MongoDB 5.0通過原生支持整個時間序列數(shù)據(jù)的生命周期(從采集、存儲、查詢、實時分析和可視化,到在線歸檔或隨著數(shù)據(jù)老化自動失效),使構(gòu)建和運行時間序列應(yīng)用程序的速度更快、成本更低。隨著MongoDB 5.0的發(fā)布,MongoDB擴展了通用的應(yīng)用數(shù)據(jù)平臺,使開發(fā)能夠更容易地處理時間序列數(shù)據(jù),進(jìn)一步擴展其在物聯(lián)網(wǎng)、金融分析、物流等方面的應(yīng)用場景。
MongoDB的時間序列集合以高度優(yōu)化和壓縮的格式自動存儲時間序列數(shù)據(jù),減少了存儲大小和I/O,以實現(xiàn)更好的性能和更大的規(guī)模。同時也縮短了開發(fā)周期,使您能夠快速建立一個針對時間序列應(yīng)用的性能和分析需求而調(diào)優(yōu)的模型。
創(chuàng)建時間序列數(shù)據(jù)集合的命令示例:
MongoDB可以無縫地調(diào)整采集頻率,并根據(jù)動態(tài)生成的時間分區(qū)自動處理無序的測量值。最新發(fā)布的MongoDB Connector for Apache Kafka實現(xiàn)了在本地支持時間序列,您可以直接從Kafka主題消息中自動創(chuàng)建時間序列集合,使您在收集數(shù)據(jù)的同時根據(jù)需要對數(shù)據(jù)進(jìn)行處理和聚合,然后寫入到MongoDB的時間序列集合。
時間序列集合自動創(chuàng)建一個按時間排序的數(shù)據(jù)聚集索引,降低查詢數(shù)據(jù)的延遲。MongoDB查詢API還擴展了窗口函數(shù),您可以運行分析性查詢(例如移動平均數(shù)和累積總和)。在關(guān)系型數(shù)據(jù)庫系統(tǒng)中,這些通常被稱為SQL分析函數(shù),并支持以行為單位定義的窗口(即三行移動平均線)。MongoDB更進(jìn)一步,還增加了指數(shù)移動平均線、導(dǎo)數(shù)和積分等強大的時間序列函數(shù),支持您以時間為單位定義窗口(例如15分鐘的移動平均線)。窗口函數(shù)可用于查詢MongoDB的時間序列和常規(guī)集合,為多種應(yīng)用類型提供了新的分析方式。另外,MongoDB 5.0也提供了新的時間運算符,包括$dateAdd、$dateSubstract、$dateDiff和$dateTrunc,使您可以通過自定義的時間窗口對數(shù)據(jù)進(jìn)行匯總和查詢。
您可以將MongoDB的時間序列數(shù)據(jù)與企業(yè)的其他數(shù)據(jù)相結(jié)合。時間序列集合可以與同一個數(shù)據(jù)庫中的常規(guī)MongoDB集合放在一起,您不必選擇一個專門的時間序列數(shù)據(jù)庫(它不能為任何其他類型的應(yīng)用提供服務(wù)),也不需要復(fù)雜的集成來混合時間序列和其他數(shù)據(jù)。MongoDB通過提供一個統(tǒng)一的平臺,讓您建立高性能和高效的時間序列應(yīng)用的同時,也為其他用例或工作負(fù)載提供支持,從而消除了整合和運行多個不同數(shù)據(jù)庫的成本和復(fù)雜性。
在線數(shù)據(jù)重新分片
| 數(shù)據(jù)庫版本 | 特點 | 實現(xiàn)方法 |
| MongoDB 5.0以前 | 重新分片過程復(fù)雜且需要手動分片。 |
|
| MongoDB 5.0開始 |
| 您可以在業(yè)務(wù)運行(數(shù)據(jù)不斷增長)的情況下,按需改變集合的分片鍵(Shard key),而不需要數(shù)據(jù)庫停機或在數(shù)據(jù)集合中進(jìn)行復(fù)雜的遷移。您只需要在MongoDB Shell中運行reshardCollection命令,選擇您需要重新分片的數(shù)據(jù)庫和集合,指定新的分片鍵即可。reshardCollection: "<database>.<collection>", key: <shardkey> 說明
|
版本化API
- 應(yīng)用程序兼容性從MongoDB 5.0開始,版本化API定義了應(yīng)用程序最常用的一組命令和參數(shù)(無論是數(shù)據(jù)庫在年度重大發(fā)布還是季度快速發(fā)布期間,這些命令均不會改變)。通過將應(yīng)用程序生命周期和數(shù)據(jù)庫生命周期解耦,您可以將驅(qū)動程序固定在MongoDB API的特定版本上,即使數(shù)據(jù)庫發(fā)生升級和改進(jìn),您的應(yīng)用程序?qū)⒖梢岳^續(xù)運行數(shù)年而不需要修改代碼。
- 靈活地添加新功能和改進(jìn)內(nèi)容版本化API支持MongoDB靈活地在每個版本中為數(shù)據(jù)庫添加新的功能和改進(jìn)內(nèi)容(以新版本兼容早期版本的方式)。當(dāng)您需要改變API時,可以增加新版本的API,并與現(xiàn)有版本化的API在同一臺服務(wù)器上同時運行。隨著MongoDB版本發(fā)布的加速,版本化API能夠使您更快、更輕松地使用到MongoDB最新版本的功能特性。
Write Concern默認(rèn)Majority級別
從MongoDB 5.0開始,Write Concern默認(rèn)級別為majority,僅當(dāng)寫入操作被應(yīng)用到Primary節(jié)點(主節(jié)點)且被持久化到大多數(shù)副本節(jié)點的日志中的時候,才會提交并返回成功,“開箱即用”地提供了更強的數(shù)據(jù)可靠性保障。
說明 Write Concern是完全可調(diào)的,您可以自定義配置Write Concern,以平衡應(yīng)用程序?qū)?shù)據(jù)庫性能和數(shù)據(jù)持久性的要求。
連接管理優(yōu)化
默認(rèn)情況下,一個客戶端連接對應(yīng)后端MongoDB服務(wù)器上的一個線程(net.serviceExecutor配置為synchronous)。創(chuàng)建、切換和銷毀線程都是消耗較大的操作,當(dāng)連接數(shù)過多時,線程會占用MongoDB服務(wù)器較多的資源。
連接數(shù)較多或創(chuàng)建連接失控的情況稱為“連接風(fēng)暴”,產(chǎn)生該情況的原因可能是多方面的,且經(jīng)常是在服務(wù)已經(jīng)受到影響的情況下發(fā)生。
針對這些情況,MongoDB 5.0采取了以下措施:
- 限制在任何時候驅(qū)動程序嘗試創(chuàng)建的連接數(shù)量,以簡單有效的方式防止數(shù)據(jù)庫服務(wù)器過載。
- 減少驅(qū)動程序監(jiān)控連接池時的檢查頻率,給無響應(yīng)或過載的服務(wù)器節(jié)點一個緩沖和恢復(fù)的機會。
- 驅(qū)動程序?qū)⒐ぷ髫?fù)載導(dǎo)向具有最健康連接池的更快的服務(wù)器,而不是從可用的服務(wù)器中隨機選擇。
以上措施,加上之前版本在mongos查詢路由層的改進(jìn),進(jìn)一步提升了MongoDB承受高并發(fā)負(fù)載的能力。
長時間運行的快照查詢
長時間運行的快照查詢(Long-Running Snapshot Queries)增加了應(yīng)用程序的通用性和彈性。您可以通過該功能運行默認(rèn)時間為5分鐘的查詢(或?qū)⑵湔{(diào)整為自定義持續(xù)時間),同時保持與實時事務(wù)性數(shù)據(jù)庫一致的快照隔離,也可以在Secondary節(jié)點(從節(jié)點)上進(jìn)行快照查詢,從而在單個集群中運行不同的工作負(fù)載,并將其擴展到不同的分片上。
MongoDB通過底層存儲引擎中一個名為Durable history的項目實現(xiàn)了長期運行的快照查詢,該項目早在MongoDB 4.4中就已實現(xiàn)。Durable history將存儲自查詢開始以來所有變化的字段值的快照。通過使用Durable history,查詢可以保持快照隔離,即使在數(shù)據(jù)發(fā)生變化的情況下,Durable history也有助于降低存儲引擎的緩存壓力,使得業(yè)務(wù)可以在高寫入負(fù)載的場景下實現(xiàn)更高的查詢吞吐量。
新版MongoDB Shell
為了提供更好的用戶體驗,MongoDB 5.0從頭開始重新設(shè)計了MongoDB Shell(mongosh),以提供一個更現(xiàn)代化的命令行體驗,以及增強可用性的功能和強大的腳本環(huán)境。新版MongoDB Shell已經(jīng)成為MongoDB平臺的默認(rèn)shell。新版MongoDB Shell引入了語法高亮、智能自動完成、上下文幫助和有用的錯誤信息,為您創(chuàng)造一個直觀、互動的體驗。
- 增強的用戶體驗
- 更容易編寫查詢和聚合,更容易閱讀結(jié)果。新版MongoDB Shell支持語法高亮功能,方便您區(qū)分字段、值和數(shù)據(jù)類型,以避免語法錯誤。如果仍然發(fā)生錯誤,新版MongoDB Shell也可以指出問題點并告訴您解決方法。
- 更快輸入查詢和命令。新版MongoDB Shell支持智能自動完成功能,即新版MongoDB Shell可以根據(jù)您連接的MongoDB的版本,為方法、命令、MQL表達(dá)式等給出自動完成選項的提示。
示例:當(dāng)您不記得某個命令的語法時,您可以直接從MongoDB Shell中快速查找該命令的語法。
- 更容易編寫查詢和聚合,更容易閱讀結(jié)果。新版MongoDB Shell支持語法高亮功能,方便您區(qū)分字段、值和數(shù)據(jù)類型,以避免語法錯誤。如果仍然發(fā)生錯誤,新版MongoDB Shell也可以指出問題點并告訴您解決方法。
- 高級腳本環(huán)境新版MongoDB Shell的腳本環(huán)境建立在Node.js REPL(交互式解釋器)之上,您在腳本中可以使用所有的Node.js API和NPM的任何模塊。您也可以從文件系統(tǒng)中加載和運行腳本(和舊版MongoDB Shell一樣,您可以繼續(xù)使用Load和Eval執(zhí)行腳本)。
- 擴展性和插件新版MongoDB Shell具有易擴展性,使您能夠使用MongoDB的所有功能以提高生產(chǎn)力。
在新版MongoDB Shell中,允許安裝Snippets插件。Snippets可以自動加載至MongoDB Shell中,且Snippets可以使用所有的Node.js API和NPM包。MongoDB也維護(hù)了一個Snippets倉庫,提供了一些有趣的功能(例如分析指定集合模式的插件),您也可以自由地配置MongoDB Shell使用您選擇的插件。
說明 插件當(dāng)前僅為MongoDB Shell的一個實驗性功能。
PyMongoArrow與數(shù)據(jù)科學(xué)
隨著新的PyMongoArrow API的發(fā)布,您可以在MongoDB上使用Python運行復(fù)雜的分析和機器學(xué)習(xí)。PyMongoArrow可以快速將簡單的MongoDB查詢結(jié)果轉(zhuǎn)換為流行的數(shù)據(jù)格式(例如Pandas數(shù)據(jù)框架和NumPy數(shù)組),幫助您簡化數(shù)據(jù)科學(xué)工作流程。
Schema驗證改進(jìn)
Schema驗證(模式驗證)是對MongoDB進(jìn)行數(shù)據(jù)應(yīng)用管理控制的一種方式。MongoDB 5.0中,模式驗證變得更加簡單和友好,當(dāng)操作驗證失敗時都會產(chǎn)生描述性的錯誤信息,幫助您了解不符合集合驗證器的驗證規(guī)則的文檔及原因,以快速識別和糾正影響驗證規(guī)則的錯誤代碼。
可恢復(fù)的索引創(chuàng)建任務(wù)
MongoDB 5.0支持將正在進(jìn)行中的索引創(chuàng)建任務(wù)在節(jié)點重新啟動后自動會恢復(fù)至原來的位置,減少計劃中維護(hù)動作對業(yè)務(wù)的影響。例如:重新啟動或升級數(shù)據(jù)庫節(jié)點時,您不需要擔(dān)心當(dāng)前正在進(jìn)行的大集合索引創(chuàng)建任務(wù)失效。
版本發(fā)布調(diào)整
由于MongoDB支持很多版本和平臺,每個發(fā)布版本都需在20多個MongoDB支持的平臺上進(jìn)行驗證,驗證工作量大,降低了MongoDB新功能的交付速度,所以從MongoDB 5.0開始,MongoDB發(fā)布的版本將分為Marjor Release(大版本)和Rapid Releases(快速發(fā)布版本),其中Rapid Releases作為開發(fā)版本提供下載和測試體驗,但不建議用在生產(chǎn)環(huán)境。
原文鏈接:https://developer.aliyun.com/article/792611?
版權(quán)聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的MongoDB 5.0新特性概览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你有一份云栖大会的IoT邀请函,请查收
- 下一篇: DataWorks 2021-08 产品