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