MongoDB 4.2:讓開發、運維、安全再上新臺階

MongoDB 4.2是MongoDB當下最新的版本,這是MongoDB公司在去年的全球用戶大會正式推出的。按照軟件行業通行的慣例,大版本號才意味著軟件有重大升級,才是重大發布。不過,MongoDB 4.2被不少人認為是一次重大發布,因為此版本帶來了許多非常重要的特性,比如分佈式事務、客戶端字段級別加密、按需物化視圖以及通配符索引等,這些特性使得MongoDB能廣泛地應用到各種業務場景,尤其是一些關鍵業務場景。

一直以來,關係型數據庫是這個市場的絕對霸主,但是近些年隨著互聯網應用的普及和雲計算的興起,以MongoDB為代表的一批NoSQL數據庫迅速崛起,數據庫市場迎來了40多年最大的變化。來自於DB-Engine的市場數據顯示,MongoDB已經持續多年與Oracle、MySQL、SQL Server、PostgreSQL一起位列全球五大最流行的數據庫,其影響力已經超過傳統數據庫DB2。

誕生於2009年的MongoDB如今在全球得到非常廣泛的應用,涵蓋銀行、保險、金融、製造、電信、遊戲、互聯網等各行各業。在MongoDB市場份額不斷提升過程中,新的用戶需求也不斷湧現,特別是一些關鍵業務場景對MongoDB提出非常高的需求,MongoDB版本的不斷升級正是對這些需求的響應,這些升級反過來又促進了MongoDB更廣泛的應用,從而讓MongoDB在數據市場地位不斷鞏固和提升。

對開發人員更友好

今天,MongoDB在全球範圍得到了廣泛應用,付費客戶已經超過1.5萬,社區服務器下載量超過7000萬。這份成績對於一個挑戰者而言非常亮眼,但MongoDB顯然並不滿足於此,而是一直致力於拓展MongoDB的廣泛應用。

實際上,MongoDB一直在努力完善各種能力以滿足其在更廣泛領域,尤其是關鍵業務領域中的應用,支持事務就是其中之一。眾所周知,NoSQL數據庫的關鍵特性是靈活性、可伸縮性,其代價卻是缺乏一致性保證,因此,大部分NoSQL數據庫並不具有事務能力,這也導致這些數據庫無法在企業關鍵業務中應用。MongoDB用了6個版本來逐漸補齊這一能力。從3.0開始,MongoDB從最初的單文檔事務、到多文檔事務,最終在4.2版本中實現了對分佈式事務的支持。而且在完善過程中,使用了同樣的事務語法,比如MongoDB 4.2分佈式事務與MongoDB 4.0的多文檔事務完全相同,這意味著開發人員可以使用相同的關係式事務語法,在擴展分佈式事務時,客戶端代碼不需要修改就能無縫遷移。

除了事務之外,通配符索引是MongoDB 4.2中新增的另一個亮點功能,利用MongoDB的這個能力,開發人員可以通過建立一個通配符索引來實現為所有特徵字段建立索引,從而大大提高開發人員的開發效率。而在以往,這需要開發人員針對一個個字段分別建立索引,繁瑣而且效率低。採用通配符索引不僅能加快應用的開發和發佈速度,還能更好地支持各種創新性的應用。另外,有了通配符索引,查詢也變得更簡單。

支持片鍵值的修改也是MongoDB 4.2中新增的重要能力。作為在互聯網時代誕生的新一代數據庫產品,MongoDB的一大亮點就是其存儲和訪問海量數據的能力,這是依賴其分佈式架構實現的,包括數據的分片、擴容/縮容時數據的自動均衡、分片信息的存取以及高可用,所有這些特性的集成使得數據庫能從容應對海量數據的存儲和訪問需求。

數據的分片是由一個關鍵字段決定的,這就是片鍵,如果片鍵發生變化,傳統的方式都是刪除這條數據,然後再插入一條數據,確保新的數據能夠被重新分佈到正確的位置上。這種方式不僅麻煩,而且很難以保證原子性。MongoDB 4.2開始支持片鍵值的修改,也就是說開發者可以直接修改片鍵的值,修改後MongoDB會自動根據新的片鍵值將文檔移動新的片上。對開發者而言,這既保證了原子性又大大簡化了操作。比如,需要將數據移動到不同片上,或者需要將舊文檔歸檔到低成本的存儲上,直接修改片鍵的值就可以實現,從而大大提高了效率。

對開發者而言,MongoDB 4.2中的改進遠不止這些,其故障處理能力也得到了進一步的簡化。在分佈式網絡環境中開發應用,開發者必須在代碼中處理網絡故障。比如針對網絡抖動,開發者必須編寫代碼來捕捉和處理這類故障。為了讓開發更快捷,從MongoDB 3.6開始引入了自動寫重試功能,當網絡故障或發生MongoDB選舉導致無法寫入時,無需開發者來處理,MongoDB 的驅動會自動重試。現在MongoDB 4.2更上一層樓,引入了讀重試功能,當遇到網絡故障或主節點選舉時,驅動會自動重試一次,而且MongoDB 4.2將寫重試作為默認設置。

如果說讀寫重試的引入是簡化了開發者的工作,那麼Chart的正式發佈則是直接幫助開發者完成了MongoDB報表開發工作。傳統上要開發MongoDB的報表,要麼需要自己寫代碼,要麼使用第三方BI工具來實現,現在有了MongoDB Chart,開發者無需編寫一行代碼,只需簡單的拖拽,就可以在Chart中直接完成MongoDB數據報表,甚至可以把生成的報表嵌入到應用裡直接展現,從而使創建MongoDB報表的時間從原來幾天到現在的幾分鐘。而且,Chart可以直接識別MongoDB集合中的數據模型,指定從某個節點或分析節點來讀取數據,這樣能避免影響在線業務的進行。

系統更穩定、更好用

視圖是數據庫的基本功能之一,利用視圖可以方便程序設計、讓編碼更簡單,同時也可以提高數據安全性(如通過視圖讓授權用戶只看到允許看的數據)。視圖是動態的數據的集合,是虛擬的,並不是物理存在,計算完成後視圖中的結果也會釋放,哪怕這次查詢費了很長時間。為了保留計算結果,以便於後期高併發反覆使用,從而達到改善數據庫性能的目的,一些數據庫推出了物化視圖功能。

MongoDB從3.4版本開始支持視圖,在MongoDB 4.2則更進一步,推出了按需物化視圖功能,支持創建數據集視圖,向客戶端應用程序呈現大數據分析的結果,預計算(提前計算)或僅過濾數據集部分結果。MongoDB 4.2不需要每次重新運行全部命令,而是可以使用新的$merge運算符來更新視圖集合,還可以控制新文檔的更新方式,並可以在新視圖上使用索引以加快訪問速度。同時,物化視圖對於非分片和分片的集合都可支持,並且可以按需控制視圖的更新時間和更新方式。新的物化視圖不僅更為靈活,也讓應用訪問視圖時性能更佳。

MongoDB除了不斷完善自身的功能外,還在不斷優化與第三方的連接,為一些流行的技術提供更好的支持。比如,事件驅動已經成為了新一代實時業務處理的標準架構,而MongoDB和Kafka也是這類架構的標準組件,但兩者之間集成卻缺乏官方的支持。為了讓Kafka數據流服務和MongoDB的集成更為方便,MongoDB 4.2中提供了官方的Kafka連接器,這個連接器由MongoDB原廠開發和支持,並已經經過Kafka的認證。與其他的Kafka 連接器不同,MongoDB官方版本同時支持MongoDB作為Kafka的生產者和消費者。通過連接器可以把Kafka中的消息寫入到MongoDB的集合中;通過MongoDB Change Stream 變更流,可以將MongoDB集合中的變化直接發佈到Kafka的主題中,整個過程非常方便和簡單。

其實,MongoDB對市場主流技術跟進不止是有Kafka連接器。為了更好地支持微服務架構和Kubernetes容器環境,MongoDB 4.0就推出了Kubernetes的集成器測試版,在MongoDB 4.2中Kubernetes集成器已經正式推出。通過Kubernetes和MongoDB企業版管理工具Ops Manager的集成,企業利用Ops Manager的自動化管理能力可以通過Kubernetes部署MongoDB,還可以實現從監控、備份到擴容升級的全面管理,確保微服務、容器環境下的MongoDB健壯穩定、數據可靠。

數據更安全,管理更簡單

安全是IT系統的一個永恆的話題,對於一個管理和存儲數據的數據庫產品,安全更是一個重點。而MongoDB也是一直持續地增強其安全功能,最新的舉措就是在MongoDB 4.2中新增了客戶端加密功能。利用這個功能,用戶如果在自己的客戶端實現密鑰加密,數據庫管理員打開數據庫看到的就是密文。當今用戶越來越多地採用公有云來部署自己開發的應用,如果採用了客戶端加密,既使是提供數據庫雲服務的廠商也不知道你存的是什麼,從而很好地解決了用戶對保存在MongoDB雲數據庫中數據安全的擔心。另外,在雲環境下有很多合規性要求,需要確保雲廠商一定把數據庫徹底刪除。現在這個事情很簡單了,只要銷燬密鑰,就能保證這些數據不可讀。而且,這個功能啟用非常簡單,只要在客戶端創建一個密鑰就可以了,啟用這個功能對性能也幾乎沒有什麼影響。

實際上,安全只是系統管理員管理MongoDB的諸多關注點之一,在安全之外它們還有更為常見的需求,如管理簡單、運行可靠,MongoDB 4.2同樣也為滿足管理和運維人員的這些訴求帶來了好消息。

管理索引是數據庫管理非常重要的環節。一般來說,如果用在線的方式來建索引,可能速度會比較快,但是會導致鎖庫;如果在後臺來建,不鎖庫但創建的速度會很慢。MongoDB 4.2中推出了新的在線建索引,既有前臺建索引的速度,同時又保證不鎖庫、不鎖表、不影響業務,這個功能會讓數據庫管理員的工作大大減輕。另外,MongoDB 4.2還有很多許多改進也能提高管理員的效率,比如說初始化速度提升了15%,這就意味著擴容和恢復的速度會更快;節點的狀況切換速度提升10倍,從而讓維護窗口變得更短。

另外,在高可用性方面MongoDB 4.2也做了不少工作。比如,傳統數據庫主要是通過心跳來看CPU和服務是否正常,MongoDB 4.2把監控覆蓋到文件系統,如果CPU運行正常,但是文件系統I/O無法支持業務了,系統也會發生切換,這樣能讓可用性更高。

綜上所述,MongoDB 4.2通過支持分佈式事務、新的通配符索引、自動重試和修改分片鍵等讓開發變得更快速、更輕鬆。同時,新的物化視圖、Kafka連接器和對Kubernetes的支持以及客戶端加密等,讓應用變得更健壯。還有,MongoDB 4.2新的在線索引方式、更快的初始化速度以及更快的片鍵切換速度讓維護窗口更短,從而讓運維工作變得更輕鬆。正是通過上述這些方面的改進,使得MongoDB 4.2又一次完成了一個里程碑式的升級。

值得一提的是,隨著MongoDB 4.2的推出,老版本的MongoDB將陸續退出市場。其中就包括MongoDB 3.4。MongoDB已經宣佈,MongoDB 3.4版本在2020年1月31日停止支持,同時建議用戶將MongoDB升級到最新穩定版本(當前為4.2版本)。

停止對老版本的支持是必要之舉,這有利於MongoDB的開發團隊持續推進開發工作,將花費在舊版本上的精力全部用於新特性開發和功能增強,從而提供功能更為強大的產品和服務。對於那些缺少專業人員的用戶,如果升級有困難不妨選擇雲服務,包括MongoDB的Atlas雲服務、在中國有阿里雲提供的MongoDB雲服務等。藉助雲服務商的專業人員,用戶能徹底從數據庫日常運維工作中解脫出來,從而全力關注自己的業務,更好地推動業務的創新和發展。


分享到:


相關文章: