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