|
作者 張友東,阿里云高級(jí)技術(shù)專家 MongoDB World 2019 上發(fā)布新版本 MongoDB 4.2 Beta,包含多項(xiàng)數(shù)據(jù)庫(kù)新特性,本文嘗試從技術(shù)角度解讀。 Full Text Search MongoDB 4.2 之前,全文搜索(Full Text Search)的能力是靠 Text Index 來(lái)支持的,在 MongoDB-4.2 里,MongoDB 直接與 Lucene 等引擎整合,在 Atlas 服務(wù)里提供全文建索的能力。 MongoDB FTS 原理
Full Text Search 示例 下面是一個(gè) Full Text Search 使用的簡(jiǎn)單示例,整個(gè)使用體驗(yàn)非常簡(jiǎn)單,除了需要在 Atlas 控制臺(tái)上建索引,其他跟正常使用 MongoDB 毫無(wú)差別,隨著這塊能力的完善,能覆蓋很多 Elastic Search 的場(chǎng)景。 Step1: 準(zhǔn)備數(shù)據(jù) Step2: Atlas 上創(chuàng)建 FTS 索引 Step3: 使用 MongoDB 客戶端做搜索,支持 Wildcard、Prefix 等多種搜索能力 Distributed Transaction MongoDB 4.0 支持副本集事務(wù),極大的豐富了應(yīng)用場(chǎng)景;4.0 的事務(wù)存在最大修改 16MB、事務(wù)執(zhí)行時(shí)間不能過(guò)長(zhǎng)的限制,在 4.2 支持分布式事務(wù)的這些問(wèn)題都解決了。分布式事務(wù)的支持也意味用戶修改分片key的內(nèi)容成為可能,因?yàn)樾薷姆制琸ey的內(nèi)容,可能會(huì)導(dǎo)致key要遷移到其他shard,而在4.2之前,無(wú)法保證這個(gè)遷移動(dòng)作(目標(biāo)上新寫、源上刪掉)的原子性,而借助分布式事務(wù),這個(gè)問(wèn)題也就迎刃而解。 4.2 支持的分布式事務(wù)是硬核技術(shù),目前具備這個(gè)能力的開源數(shù)據(jù)庫(kù)本身也不多,MongoDB 采用二階段提交的方式(細(xì)節(jié)以后再分析),實(shí)現(xiàn)在多個(gè) Shard 間發(fā)生的修改,要么同時(shí)發(fā)生,要么都不發(fā)生,保證事務(wù)的 ACID 特性。 在使用上,4.2 的分布式事務(wù)跟 4.0 副本集事務(wù)使用方式完全一樣,用戶無(wú)需關(guān)心后端數(shù)據(jù)如何分布。 High Availablity MongoDB 在保證數(shù)據(jù)庫(kù)服務(wù)可用性方面持續(xù)努力,在 4.0 提供了 Retryable Write 功能,在新的 4.2 版本,MongoDB 增加了 Retryable Read 功能,對(duì)于一些臨時(shí)的網(wǎng)絡(luò)問(wèn)題,用戶無(wú)需自己實(shí)現(xiàn)重試邏輯,MongoDB 會(huì)自動(dòng)重試處理,保證用戶業(yè)務(wù)的連續(xù)性。 Improved Query Language MongoDB 4.2 在查詢語(yǔ)言的表達(dá)能力上進(jìn)一步增強(qiáng),update、aggregation、index 等方面都有巨大的提升,具體細(xì)節(jié)等 4.2 正式版文檔發(fā)出可以詳細(xì)了解。 Update 能力增強(qiáng) 4.2 之前,Update 操作基本上都是用確定的值更新某個(gè)字段,在新版本里,Update 能根據(jù)文檔現(xiàn)有的字段內(nèi)容來(lái)生成新的更新內(nèi)容,如下的實(shí)例,根據(jù)文檔 pay、tax 字段,加起來(lái)生成一個(gè) total 字段;這個(gè)在 4.2 之前,用戶需要先讀取文檔內(nèi)容,獲取 pay、tax 字段得到結(jié)果,然后調(diào)用 Update 設(shè)置新的字段。類似的特性還有很多,基本上 Aggregation 里能表達(dá)的更新操作,4.2 的 Update 命令都能支持。 分析能力增強(qiáng) Aggregation 方面,MongoDB 也做了大量的改進(jìn),來(lái)更好的支持業(yè)務(wù)分析場(chǎng)景;比如增加merge操作符,能不斷的將增量分析結(jié)果與原來(lái)的結(jié)果進(jìn)行匯總(老的版本只支持out,把當(dāng)次分析結(jié)果寫到某個(gè)集合)。 Index 能力增強(qiáng)(Wildcard Index) 使用 MongoDB 時(shí),經(jīng)常會(huì)遇到一些場(chǎng)景,某個(gè)字段包含很多個(gè)屬性,很多屬性都可能需要用于查詢,現(xiàn)在的解決方案時(shí),針對(duì)每個(gè)屬性,必須提前知道它的訪問(wèn)行為,建立必要的索引;MongoDB 4.2 引入 Wildcard Index,可以針對(duì)一系列的字段自動(dòng)建索引,滿足豐富的查詢需求。 如下面的例子所示,書籍的 attribute 字段里包含很多熟悉,包括顏色、大小等信息,如果經(jīng)常需要根據(jù)屬性查找,可以針對(duì) attribute 字段建立 Wildcard index。 Field Level Encrytion MongoDB 除了支持 SSL、TDE 等安全機(jī)制,在 4.2 引入「字段級(jí)加密」的支持,實(shí)現(xiàn)對(duì)用戶JSON文檔的Value 進(jìn)行自動(dòng)加密。整個(gè)過(guò)程在 Driver 層完成,傳輸、存儲(chǔ)到服務(wù)端的文檔Value都是密文,MongoDB 4.2 Drvier 支持豐富的加密策略,可以針對(duì)集合、字段維度開啟加密,加密過(guò)程對(duì)開發(fā)者完全透明。 ![]() MongoDB and Kubernetes ![]() Kubernetes 是工業(yè)級(jí)的容器編排管理平臺(tái),可以使用 Kubernetes 管理 MongoDB 集群的整個(gè)生命周期,但隨著業(yè)務(wù)部署環(huán)境越來(lái)越復(fù)雜多樣化,有的可能是私有云部署、有的是公有云的部署,使得集群的管理難度也越來(lái)越高。 在新版本 MongoDB Atlas(公有云), MongoDB Cloud Manager(私有云企業(yè)版管理) 都集成了 Kubernetes operators 的支持,使得用戶可以使用 Kubernetes 統(tǒng)一管理 MongoDB 資源。 MongoDB Chart MongoDB Chart 在去年的 MongoDB World 已經(jīng)介紹過(guò)了,今年有做了多方面的增強(qiáng),算得上是一個(gè)功能比較完備的 BI 分析工具了。有了 Charts,MongoDB 也無(wú)需支持 SQL 來(lái)去對(duì)接 BI 工具了。 Charts 在使用上還是有一定學(xué)習(xí)成本的,不是特別直觀,需要配合教程,了解下運(yùn)作原理,才能得到想要的圖,比如這個(gè)例子里,針對(duì)電影集合,Released 的年份做了聚合分析,得到分布圖。 ![]() MongoDB Realm MongoDB 在4月份的時(shí)候收購(gòu)了 Realm,一個(gè)為移動(dòng)端開發(fā)而設(shè)計(jì)的新型數(shù)據(jù)庫(kù)。MongoDB 去年發(fā)布了 MongoDB Mobile 來(lái)應(yīng)對(duì)移動(dòng)端的數(shù)據(jù)存儲(chǔ)需求,在收購(gòu) Realm 后,二者會(huì)進(jìn)行深度整合,Real Core 里會(huì)借助MongoDB提供的能力,增加非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)到能力,比如 JSON、Dict、Set,讓 Realm 變得更強(qiáng)大,同時(shí)發(fā)揮 Realm 在移動(dòng)端生態(tài)以及 MongoDB 數(shù)據(jù)庫(kù)存儲(chǔ)的優(yōu)勢(shì)。 ![]() ![]() Atlas Data Lake (Beta) 在新版本 Atlas 服務(wù)里,提供了 Atlas Data Lake,能直接通過(guò) MongoDB API 訪問(wèn)存儲(chǔ)在 AWS S3 (未來(lái)支持 Azure、Google 的存儲(chǔ)服務(wù))里的數(shù)據(jù)。 ![]() 云數(shù)據(jù)庫(kù) MongoDB 版 基于飛天分布式系統(tǒng)和高性能存儲(chǔ),提供三節(jié)點(diǎn)副本集的高可用架構(gòu),容災(zāi)切換,故障遷移完全透明化。并提供專業(yè)的數(shù)據(jù)庫(kù)在線擴(kuò)容、備份回滾、性能優(yōu)化等解決方案。 |
|
|