《一起來聊聊最近很火的NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn)》要點(diǎn):
本文介紹了一起來聊聊最近很火的NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn),希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
6月23日云棲社區(qū)《NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn)》的直播順利結(jié)束,來自阿里云的ApsaraDB數(shù)據(jù)庫產(chǎn)品專家蕭少聰(鐵庵)與大家分享了通過PostgreSQL實(shí)現(xiàn)NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn).直播中,他重點(diǎn)介紹FDW原理,并結(jié)合金融報(bào)文處理、物聯(lián)網(wǎng)數(shù)據(jù)整合、企業(yè)并購重組場(chǎng)景下的具體案例,詳細(xì)講解了PostgreSQL是如何通過FDW外部數(shù)據(jù)通道功能實(shí)現(xiàn)NoSQL、大數(shù)據(jù)異構(gòu)融合以及開發(fā)效率的提升的.本次活動(dòng)整理文章、幻燈片整理如下.
幻燈片下載地址:https://oss-cn-hangzhou.aliyuncs.com/yqfiles/e95acb3cc257c377ad8df5e944760638.pdf
圖一 PostgreSQL的發(fā)展歷程
PostgreSQL的前身為ingres Database,從1973年伯克利分校的Ingres項(xiàng)目至今,PostgreSQL現(xiàn)已經(jīng)過了幾十年的發(fā)展.相比較于廣泛使用MySQL開源數(shù)據(jù)庫,我們之所以對(duì)PostgreSQL數(shù)據(jù)庫情有獨(dú)鐘,是因?yàn)槠洫?dú)特的魅力所在:
開放性更強(qiáng):PostgreSQL基于BSD/MIT協(xié)議,對(duì)所有人免費(fèi),可以任意處置,包括使用、復(fù)制、修改、合并、發(fā)表、分發(fā)、再授權(quán)或者銷售.唯一的限制是,軟件中必須包含上述版權(quán)和許可提示;相比于其它如 GPL / Apache 開源協(xié)議更開放、更適合于長遠(yuǎn)的企業(yè)戰(zhàn)略發(fā)展;
穩(wěn)定性:PostgreSQL至今已有超過40年歷史,專注于OLTP事務(wù)處理;其多程衍生產(chǎn)品已經(jīng)用于用于傳統(tǒng)金融、通訊、能源企業(yè)認(rèn)可,如:平安集團(tuán)、MasterCard、浙江移動(dòng)、日本NTT、韓國KT、國家電網(wǎng);
企業(yè)功能:在PostgreSQL 9.0中增加了大量的企業(yè)功能:
數(shù)據(jù)流式復(fù)制(9.6支持多節(jié)點(diǎn)全同步);
基于ACID的JSON及KV數(shù)據(jù)類型;
PostGIS地理信息模型;
FDW對(duì)接第三方數(shù)據(jù)源,或?qū)崿F(xiàn)Sharding;
可擴(kuò)展支持R語言、網(wǎng)絡(luò)、生物、化學(xué)等函數(shù);
唯一明確說明對(duì)SQL 2011的兼容程度>90%;
目前,PostgreSQL正面臨著巨大的機(jī)遇:首先國內(nèi)PostgreSQL使用量僅是國外的三十分之一,潛力巨大;從2011年開始,PostgreSQL在國內(nèi)的查詢指數(shù)呈現(xiàn)逐年倍增;同時(shí)眾多國內(nèi)外商業(yè)數(shù)據(jù)庫都是基于PostgreSQL,生態(tài)豐富,使其大有成為數(shù)據(jù)庫界Linux之勢(shì).
Why FDW ?
FDW全稱Foreign-Data Wrapper,簡單來說就是PostgreSQL中的外部表功能.得益于PostgreSQL源代碼的開放性,當(dāng)前已經(jīng)支持包括:MongoDB、Redis、MySQL、SQL Server、Oracle、Hadoop、Hive、Elastic Search等近30種不同的外部數(shù)據(jù)源(可點(diǎn)擊此處查看所支持的全部數(shù)據(jù)源).也就是說可以將這些數(shù)據(jù)庫當(dāng)做是PostgreSQL內(nèi)的表格直接進(jìn)行如insert、delete等操作處理.
圖二 傳統(tǒng)企業(yè)的數(shù)據(jù)操作模型
從上圖可以看出,傳統(tǒng)企業(yè)的數(shù)據(jù)操作模型中的數(shù)據(jù)庫主要使用Oracle、MSSQL或者M(jìn)ySQL等關(guān)系型數(shù)據(jù)庫;前端包括業(yè)務(wù)系統(tǒng)、OA系統(tǒng)、財(cái)務(wù)系統(tǒng)等大大小小不同的系統(tǒng),各系統(tǒng)與之對(duì)應(yīng)的數(shù)據(jù)庫也不盡相同.
當(dāng)傳統(tǒng)企業(yè)面向互聯(lián)網(wǎng)/物聯(lián)網(wǎng)進(jìn)行轉(zhuǎn)型時(shí),必須要構(gòu)建新的系統(tǒng)與數(shù)據(jù)庫.對(duì)于大部分企業(yè)而言,通常會(huì)選擇MongoDB作為其數(shù)據(jù)庫,這是因?yàn)榛ヂ?lián)網(wǎng)應(yīng)用中大量的數(shù)據(jù)是以JSON這類非結(jié)構(gòu)化模式存儲(chǔ).但MongoDB實(shí)際上不是一個(gè)關(guān)系型數(shù)據(jù)庫,因此不具有表格(Table)之類的概念.當(dāng)企業(yè)開發(fā)的新應(yīng)用需要與傳統(tǒng)的應(yīng)用進(jìn)行通信時(shí),目前采用的方法是:在原有的業(yè)務(wù)、OA等系統(tǒng)的原有程序上加入新代碼,而且新代碼操作并非傳統(tǒng)的SQL語句,而是使用MongoDB專用的語法進(jìn)行操作,這使得整體的開發(fā)變得更為復(fù)雜.
圖三 傳統(tǒng)企業(yè)整個(gè)大數(shù)據(jù)處理模型
對(duì)于傳統(tǒng)企業(yè)整合大數(shù)據(jù)處理而言,需要將數(shù)據(jù)放入到Hadoop/Spark/HBase中進(jìn)行整體分析.在這個(gè)過程中,需要將MongoDB以及傳統(tǒng)的Oracle/MSSQL/MySQL中的數(shù)據(jù)通過定期ETL清洗等方式定期傳回到大數(shù)據(jù)分析平臺(tái)中,并且利用Hadoop編寫MapReduce一系列的組件將Hadoop中的分析結(jié)果轉(zhuǎn)存系統(tǒng)的數(shù)據(jù)庫中,以供業(yè)務(wù)系統(tǒng)使用.
因此,在傳統(tǒng)企業(yè)向互聯(lián)網(wǎng)/物聯(lián)網(wǎng)轉(zhuǎn)型的過程中,會(huì)創(chuàng)造大量的軟件,而這些軟件可能是由不同的代碼語言編寫而成;同時(shí)還需要在舊的系統(tǒng)中擴(kuò)展新的代碼.總結(jié)來看,傳統(tǒng)的企業(yè)(ISV)面臨的問題可以概括成下面三點(diǎn):
時(shí)間:不抓緊時(shí)間轉(zhuǎn)型將可能錯(cuò)失良機(jī);
復(fù)雜:新架構(gòu)跨界操作多管理難;
團(tuán)隊(duì):新知識(shí)積累不足,抗風(fēng)險(xiǎn)能力低.
如何去解決這些問題呢?我們采用的方式是:PostgreSQL FDW .
圖四 PostgreSQL FDW
從上圖可以看出,通過FDW之后,可以將MongoDB/Redis等NoSQL數(shù)據(jù)庫、MySQL/SQL server等RDS關(guān)系型數(shù)據(jù)庫或者Hadoop等大數(shù)據(jù)處理平臺(tái),甚至是一些OSS/Excel等文件當(dāng)成一系列的外部表進(jìn)行操作.下面將借助具體案例進(jìn)行分析.
傳統(tǒng)企業(yè)都需要向互聯(lián)網(wǎng)、物聯(lián)網(wǎng)或者移動(dòng)端進(jìn)行轉(zhuǎn)型,在轉(zhuǎn)型的過程中一定會(huì)遇到包括JS、JSON在內(nèi)的移動(dòng)端的數(shù)據(jù)類型.一個(gè)項(xiàng)目通常會(huì)相當(dāng)復(fù)雜,在現(xiàn)有的基礎(chǔ)上以最少量的改動(dòng)實(shí)現(xiàn)代碼的快速迭代,完成新的功能是非常重要的.目前,可借助PostgreSQL協(xié)助實(shí)現(xiàn)“敏捷項(xiàng)目”轉(zhuǎn)型,通過使用FDW打破NoSQL和BigData的障礙,快速成型,充分發(fā)揮現(xiàn)有團(tuán)隊(duì)的SQL價(jià)值.通過SQL開發(fā)方式快速進(jìn)入新領(lǐng)域,再進(jìn)行代碼向非關(guān)系型處理(JSON)或大數(shù)據(jù)處理的深度優(yōu)化抽離開始,實(shí)例數(shù)據(jù)庫架構(gòu)的“敏捷”轉(zhuǎn)型.
目前PostgreSQL 通過支持JSON數(shù)據(jù)類型,在傳統(tǒng)行業(yè)轉(zhuǎn)型的過程中,可以將傳統(tǒng)用戶數(shù)據(jù)場(chǎng)景輕松轉(zhuǎn)換成移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)場(chǎng)景.通過全SQL在PostgreSQL中進(jìn)行JSON數(shù)據(jù)操作,并可以對(duì)JSON中的某個(gè)屬性進(jìn)行索引以提高查詢性能.實(shí)現(xiàn)NoSQL + SQL的有機(jī)整合,實(shí)現(xiàn)一類NewSQL的處理模型,同時(shí)在PostgreSQL中的JSON處理完全遵循ACID的數(shù)據(jù)庫原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨(dú)立性)、持久性(Durability)要求.直接符合傳統(tǒng)企業(yè)對(duì)于業(yè)務(wù)數(shù)據(jù)的可靠性、穩(wěn)定性等需求,避免讓用戶為適應(yīng)NoSQL數(shù)據(jù)庫的CAP“最終一致”原理而不得不馬上調(diào)整現(xiàn)有業(yè)務(wù)模型的窘境.
圖五 SQL與JSON結(jié)合
由此上圖可見通過PostgreSQL我們可以在一個(gè)SQL中操作原始的關(guān)系型數(shù)據(jù),同時(shí)又可以進(jìn)行JSON數(shù)據(jù)的整合處理.這為我們系統(tǒng)的“轉(zhuǎn)型”開發(fā)爭取到大量時(shí)間.但盡管部分的數(shù)據(jù)和JSON類型可以用PostgreSQL進(jìn)行處理實(shí)現(xiàn),解決了關(guān)系型數(shù)據(jù)庫跟物聯(lián)網(wǎng)對(duì)接的問題.當(dāng)業(yè)務(wù)擴(kuò)展到一定規(guī)模后,MongoDB數(shù)據(jù)庫的需求依然會(huì)逐步展現(xiàn),一是當(dāng)JSON數(shù)據(jù)不要求ACID時(shí)MongoDB處理性能更高,二是當(dāng)前體系下MongoDB擴(kuò)展性事好;同時(shí)還可能需要用到Hadoop進(jìn)行大數(shù)據(jù)分析,這又形成了非常復(fù)雜的架構(gòu)和較大的任務(wù)量.針對(duì)這種情況,可以通過引入FDW模型加以解決.
圖六 FDW實(shí)現(xiàn)“敏捷項(xiàng)目”成型
在FDW模型中,傳統(tǒng)的系統(tǒng)業(yè)務(wù)依舊直接對(duì)應(yīng)于Oracle/MSSQL/MySQL傳統(tǒng)的關(guān)系型數(shù)據(jù)庫;通過引入PostgreSQL作為中介庫,也就是中間的處理節(jié)點(diǎn),以便提供FDW和SQL的操作;新的互聯(lián)網(wǎng)應(yīng)用連接到MongoDB數(shù)據(jù)庫中;通過在PostgreSQL中建立FDW與MongoDB的通道,將MongoDB中的數(shù)據(jù)當(dāng)成PostgreSQL的數(shù)據(jù)表;在舊的業(yè)務(wù)系統(tǒng)中,僅需簡單的SQL擴(kuò)展就可以訪問到MongoDB的數(shù)據(jù);此外,PostgreSQL同樣可以通過FDW與傳統(tǒng)的數(shù)據(jù)庫打通;最后,大數(shù)據(jù)處理平臺(tái)以及OSS等文件也可以通過FDW與原來的業(yè)務(wù)系統(tǒng)進(jìn)行連接.
接下來看一下,在金融行業(yè)諸如報(bào)文處理等操作時(shí)FDW的是如何發(fā)揮作用的.
圖七 FDW在金融報(bào)文處理中的應(yīng)用
金融的報(bào)文有很多種處理方式,其中一種方式是將單個(gè)格式化文件上傳到某個(gè)文件目錄下;在數(shù)據(jù)庫中,通過存儲(chǔ)過程定期任務(wù)讀取文件列表,在文件列表內(nèi)直接將數(shù)據(jù)讀出、匯總,經(jīng)過計(jì)算之后重新入庫.
在PostgreSQL中,同樣可以利用FDW實(shí)現(xiàn)金融報(bào)文的處理.例如前端的前置系統(tǒng)會(huì)不停地將文件上傳到OSS(這是一個(gè)阿里云的對(duì)象存儲(chǔ)服務(wù),用戶可以將各種文件或?qū)ο蟠鎯?chǔ)于這個(gè)服務(wù)引擎中),FDW就可以訪問OSS讀取這些文件,具體操作如下圖所示:
圖八 FDW實(shí)現(xiàn)OSS操作
從上圖可以看到,整體過程首先需要?jiǎng)?chuàng)建oss_fdw的插件;然后創(chuàng)建server,用于定位到OSS中的數(shù)據(jù)位置;接著創(chuàng)建基于OSS文件目錄的名部表,將目錄下所有文件的數(shù)據(jù)以表的形式展現(xiàn);通過表的方式對(duì)OSS中的數(shù)據(jù)進(jìn)行訪問;再將OSS中的數(shù)據(jù)寫入到PostgreSQL數(shù)據(jù)庫中;數(shù)據(jù)并行的從 ossexample 裝載到 example 中;最后,可以看到 oss_fdw 能夠正確估計(jì) oss 上的文件大小,正確的規(guī)劃查詢計(jì)劃.
FDW:物聯(lián)網(wǎng)數(shù)據(jù)整合
現(xiàn)在來看一下物聯(lián)網(wǎng)數(shù)據(jù)整合的過程.在物聯(lián)網(wǎng)環(huán)境中,有智能手環(huán)、車載系統(tǒng)等設(shè)備產(chǎn)生的大量的非格式化數(shù)據(jù)存儲(chǔ)在MongoDB中.目前常用的模式是通過應(yīng)用程序硬編碼打通服務(wù)器上的關(guān)系數(shù)據(jù)庫和大數(shù)據(jù)庫處理平臺(tái).
圖九 FDW用于物聯(lián)網(wǎng)數(shù)據(jù)整合
上圖是將物聯(lián)網(wǎng)環(huán)境整合到PostgreSQL中的具體示意圖,應(yīng)用程序通過MongoDB的語法對(duì)存儲(chǔ)在MongoDB數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行操作.當(dāng)需要高效開發(fā)時(shí),通過FDW利用SQL操作快速地實(shí)現(xiàn)對(duì)MongoDB的操作;此外,在PostgreSQL中的PostGIS的系統(tǒng),支持復(fù)雜的地理信息的計(jì)算,車載系統(tǒng)等路徑信息可通過PostGIS先預(yù)處理,然后再輸送到大數(shù)據(jù)處理平臺(tái)中.
PostgreSQL也可以與MongoDB直接操作,通過表的處理方式處理一些無需硬編碼的操作.對(duì)于那些需要快速、高性能處理的業(yè)務(wù),可以通過MapReduce進(jìn)行處理性能優(yōu)化.
值得注意的是,由于所有的操作經(jīng)過FDW進(jìn)行轉(zhuǎn)換,如果選用的FDW的組件并不能將所有的查詢、分析等操作下發(fā)到Hadoop或MongoDB中處理,這時(shí)就需要將數(shù)據(jù)從Hadoop或MongoDB中讀入,然后再通過PostgreSQL進(jìn)行分析處后傳遞給應(yīng)用端,這樣的方式在提升開發(fā)效率的同時(shí),會(huì)導(dǎo)致一定的性能損耗.
FDW:解決企業(yè)并購重組問題
企業(yè)并購是很多開發(fā)商都會(huì)碰到的問題,母公司和其他并購的公司使用的數(shù)據(jù)庫可能完全不同,總部會(huì)有自己的數(shù)據(jù)庫要求.傳統(tǒng)的模式是通過硬編碼,將數(shù)據(jù)先匯總到總部,然后總部再做其他的處理;同時(shí)總部有新的數(shù)據(jù)出現(xiàn)時(shí),需要再將這些數(shù)據(jù)下發(fā)到子公司內(nèi).整個(gè)編碼操作非常冗余復(fù)雜,不僅延長了企業(yè)并購的時(shí)間,同時(shí)也增加了開發(fā)和管理難度.
圖十 FDW解決企業(yè)并購重組問題
如上圖所示,通過FDW的形式,將所有的子公司與總部系統(tǒng)打通,即便子公司的數(shù)據(jù)庫在異地,FDW依然可以通過互聯(lián)網(wǎng)的形式連接到數(shù)據(jù)庫中;總部應(yīng)用系統(tǒng)除了可添加PostgreSQL數(shù)據(jù)源實(shí)現(xiàn)對(duì)所有子公司數(shù)據(jù)進(jìn)行查詢外,也可以通過簡單的SQL操作將子公司的數(shù)據(jù)與總部數(shù)據(jù)進(jìn)行整合;甚至可以將總部數(shù)據(jù)庫與PostgreSQL進(jìn)行打通連接,這樣一來,各家子公司就可以訪問權(quán)限范圍內(nèi)的總部數(shù)據(jù).
作者:CatherinePlans
《一起來聊聊最近很火的NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn)》是否對(duì)您有啟發(fā),歡迎查看更多與《一起來聊聊最近很火的NoSQL、RDS和大數(shù)據(jù)異構(gòu)融合實(shí)戰(zhàn)》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9206.html