6月23日雲栖社群《nosql、rds和大資料異構融合實戰》的直播順利結束,來自阿裡雲的apsaradb資料庫産品專家蕭少聰(鐵庵)與大家分享了通過postgresql實作nosql、rds和大資料異構融合實戰。直播中,他重點介紹fdw原理,并結合金融封包處理、物聯網資料整合、企業并購重組場景下的具體案例,詳細講解了postgresql是如何通過fdw外部資料通道功能實作nosql、大資料異構融合以及開發效率的提升的。本次活動整理文章、視訊、幻燈片整理如下。
直播視訊:

(點選圖檔檢視視訊)
<b>why postgresql ?</b><b></b>
<b>圖一 </b><b>postgresql的發展曆程</b><b></b>
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的<b>json</b>及kv資料類型;
postgis地理資訊模型;
fdw對接第三方資料源,或實作sharding;
可擴充支援r語言、網絡、生物、化學等函數;
唯一明确說明對sql 2011的相容程度>90%;
目前,postgresql正面臨着巨大的機遇:首先國内postgresql使用量僅是國外的三十分之一,潛力巨大;從2011年開始,postgresql在國内的查詢指數呈現逐年倍增;同時衆多國内外商業資料庫都是基于postgresql,生态豐富,使其大有成為資料庫界linux之勢。
<b></b>
<b>why fdw ?</b><b></b>
首先來看一下傳統企業現有的資料操作模型。
<b>圖二 傳統企業的資料操作模型</b><b></b>
從上圖可以看出,傳統企業的資料操作模型中的資料庫主要使用oracle、mssql或者mysql等關系型資料庫;前端包括業務系統、oa系統、财務系統等大大小小不同的系統,各系統與之對應的資料庫也不盡相同。
當傳統企業面向網際網路/物聯網進行轉型時,必須要建構新的系統與資料庫。對于大部分企業而言,通常會選擇mongodb作為其資料庫,這是因為網際網路應用中大量的資料是以<b>json</b>這類非結構化模式存儲。但mongodb實際上不是一個關系型資料庫,是以不具有表格(table)之類的概念。當企業開發的新應用需要與傳統的應用進行通信時,目前采用的方法是:在原有的業務、oa等系統的原有程式上加入新代碼,而且新代碼操作并非傳統的sql語句,而是使用mongodb專用的文法進行操作,這使得整體的開發變得更為複雜。
<b>圖三 傳統企業整個大資料處理模型</b><b></b>
對于傳統企業整合大資料處理而言,需要将資料放入到hadoop/spark/hbase中進行整體分析。在這個過程中,需要将mongodb以及傳統的oracle/mssql/mysql中的資料通過定期etl清洗等方式定期傳回到大資料分析平台中,并且利用hadoop編寫mapreduce一系列的元件将hadoop中的分析結果轉存系統的資料庫中,以供業務系統使用。
是以,在傳統企業向網際網路/物聯網轉型的過程中,會創造大量的軟體,而這些軟體可能是由不同的代碼語言編寫而成;同時還需要在舊的系統中擴充新的代碼。總結來看,傳統的企業(isv)面臨的問題可以概括成下面三點:
時間:不抓緊時間轉型将可能錯失良機;
複雜:新架構跨界操作多管理難;
團隊:新知識積累不足,抗風險能力低。
如何去解決這些問題呢?我們采用的方式是:postgresql fdw 。
<b>圖四 postgresql fdw</b><b></b>
從上圖可以看出,通過fdw之後,可以将mongodb/redis等nosql資料庫、mysql/sql server等rds關系型資料庫或者hadoop等大資料處理平台,甚至是一些oss/excel等檔案當成一系列的外部表進行操作。下面将借助具體案例進行分析。
<b>fdw: sql everything加速傳統行業轉型</b>
傳統企業都需要向網際網路、物聯網或者移動端進行轉型,在轉型的過程中一定會遇到包括js、<b>json</b>在内的移動端的資料類型。一個項目通常會相當複雜,在現有的基礎上以最少量的改動實作代碼的快速疊代,完成新的功能是非常重要的。目前,可借助postgresql協助實作“靈活項目”轉型,通過使用fdw打破nosql和bigdata的障礙,快速成型,充分發揮現有團隊的sql價值。通過sql開發方式快速進入新領域,再進行代碼向非關系型處理(json)或大資料處理的深度優化抽離開始,執行個體資料庫架構的“靈活”轉型。
目前postgresql 通過支援<b>json</b><b>資料類型</b>,在傳統行業轉型的過程中,可以将傳統使用者資料場景輕松轉換成移動網際網路資料場景。通過全sql在postgresql中進行json資料操作,并可以對json中的某個屬性進行索引以提高查詢性能。實作nosql + sql的有機整合,實作一類newsql的處理模型,同時在postgresql中的json處理完全遵循acid的資料庫原子性(atomicity)、一緻性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)要求。直接符合傳統企業對于業務資料的可靠性、穩定性等需求,避免讓使用者為适應nosql資料庫的cap“最終一緻”原理而不得不馬上調整現有業務模型的窘境。
<b>圖五 sql與json結合</b>
由此上圖可見通過postgresql我們可以在一個sql中操作原始的關系型資料,同時又可以進行json資料的整合處理。這為我們系統的“轉型”開發争取到大量時間。但盡管部分的資料和<b>json</b>類型可以用postgresql進行處理實作,解決了關系型資料庫跟物聯網對接的問題。當業務擴充到一定規模後,mongodb資料庫的需求依然會逐漸展現,一是當json資料不要求acid時mongodb處理性能更高,二是目前體系下mongodb擴充性事好;同時還可能需要用到hadoop進行大資料分析,這又形成了非常複雜的架構和較大的任務量。針對這種情況,可以通過引入fdw模型加以解決。
<b>圖六 fdw實作“靈活項目”成型</b><b></b>
在fdw模型中,傳統的系統業務依舊直接對應于oracle/mssql/mysql傳統的關系型資料庫;通過引入postgresql作為中介庫,也就是中間的處理節點,以便提供fdw和sql的操作;新的網際網路應用連接配接到mongodb資料庫中;通過在postgresql中建立fdw與mongodb的通道,将mongodb中的資料當成postgresql的資料表;在舊的業務系統中,僅需簡單的sql擴充就可以通路到mongodb的資料;此外,postgresql同樣可以通過fdw與傳統的資料庫打通;最後,大資料處理平台以及oss等檔案也可以通過fdw與原來的業務系統進行連接配接。
<b>fdw:金融封包處理</b><b></b>
接下來看一下,在金融行業諸如封包處理等操作時fdw的是如何發揮作用的。
<b>圖七 fdw在金融封包進行中的應用</b><b></b>
金融的封包有很多種處理方式,其中一種方式是将單個格式化檔案上傳到某個檔案目錄下;在資料庫中,通過存儲過程定期任務讀取檔案清單,在檔案清單内直接将資料讀出、彙總,經過計算之後重新入庫。
在postgresql中,同樣可以利用fdw實作金融封包的處理。例如前端的前置系統會不停地将檔案上傳到oss(這是一個阿裡雲的對象存儲服務,使用者可以将各種檔案或對象存儲于這個服務引擎中),fdw就可以通路oss讀取這些檔案,具體操作如下圖所示:
<b>圖八 fdw實作oss操作</b><b></b>
從上圖可以看到,整體過程首先需要建立oss_fdw的插件;然後建立server,用于定位到oss中的資料位置;接着建立基于oss檔案目錄的名部表,将目錄下所有檔案的資料以表的形式展現;通過表的方式對oss中的資料進行通路;再将oss中的資料寫入到postgresql資料庫中;資料并行的從 ossexample 裝載到 example 中;最後,可以看到 oss_fdw 能夠正确估計 oss 上的檔案大小,正确的規劃查詢計劃。
<b>fdw:物聯網資料整合</b><b></b>
現在來看一下物聯網資料整合的過程。在物聯網環境中,有智能手環、車載系統等裝置産生的大量的非格式化資料存儲在mongodb中。目前常用的模式是通過應用程式寫死打通伺服器上的關系資料庫和大資料庫處理平台。
<b>圖九 fdw用于物聯網資料整合</b><b></b>
上圖是将物聯網環境整合到postgresql中的具體示意圖,應用程式通過mongodb的文法對存儲在mongodb資料庫中資料進行操作。當需要高效開發時,通過fdw利用sql操作快速地實作對mongodb的操作;此外,在postgresql中的postgis的系統,支援複雜的地理資訊的計算,車載系統等路徑資訊可通過postgis先預處理,然後再輸送到大資料處理平台中。
postgresql也可以與mongodb直接操作,通過表的處理方式處理一些無需寫死的操作。對于那些需要快速、高性能處理的業務,可以通過mapreduce進行處理性能優化。
值得注意的是,由于所有的操作經過fdw進行轉換,如果選用的fdw的元件并不能将所有的查詢、分析等操作下發到hadoop或mongodb中處理,這時就需要将資料從hadoop或mongodb中讀入,然後再通過postgresql進行分析處後傳遞給應用端,這樣的方式在提升開發效率的同時,會導緻一定的性能損耗。
<b>fdw:解決企業并購重組問題</b><b></b>
企業并購是很多開發商都會碰到的問題,母公司和其他并購的公司使用的資料庫可能完全不同,總部會有自己的資料庫要求。傳統的模式是通過寫死,将資料先彙總到總部,然後總部再做其他的處理;同時總部有新的資料出現時,需要再将這些資料下發到子公司内。整個編碼操作非常備援複雜,不僅延長了企業并購的時間,同時也增加了開發和管理難度。
<b>圖十 fdw解決企業并購重組問題</b><b></b>
如上圖所示,通過fdw的形式,将所有的子公司與總部系統打通,即便子公司的資料庫在異地,fdw依然可以通過網際網路的形式連接配接到資料庫中;總部應用系統除了可添加postgresql資料源實作對所有子公司資料進行查詢外,也可以通過簡單的sql操作将子公司的資料與總部資料進行整合;甚至可以将總部資料庫與postgresql進行打通連接配接,這樣一來,各家子公司就可以通路權限範圍内的總部資料。
<b>總結</b><b></b>
postgresql是一個非常強大、功能齊全的開源資料庫,本文重點介紹的隻是fdw和<b>json</b>處理,未來期待更多的開發者成為postgresql新生的一代,共同推進其在國内的發展。
<b>關于分享者</b><b></b>
蕭少聰(鐵庵) ,postgresql中國使用者會創始人之一、阿裡雲apsaradb for rds postgresql/ppas産品專家、enterprisedb認證資料庫專家、redhat rhca認證架構師。
相關系列文章:
<a href="https://yq.aliyun.com/articles/39629">《21天搭建推薦系統:實作“千人千面”個性化推薦》</a>
<a href="https://yq.aliyun.com/articles/53733">《美女程式媛:教你玩轉雲存儲——資料上雲實戰》</a>
<a href="https://yq.aliyun.com/edu/lesson/play/214">《幹貨:阿裡雲雲資料庫postgresql最佳實踐》</a>
<a href="https://yq.aliyun.com/articles/45426">《虎嗅網架構演進》</a>
<a href="https://yq.aliyun.com/edu/lesson/play/174">《faceu的分布式資料庫實戰》</a>
<a href="https://yq.aliyun.com/articles/18132/">《微網誌:内部docker技術揭秘》</a>
<a href="https://yq.aliyun.com/articles/15260">《有貨:六層混合雲架構打造中國最潮生态圈》</a>
<a href="https://yq.aliyun.com/articles/11259">《美柚:最懂女性app背後的混合雲架構與大資料服務》</a>
<a href="https://yq.aliyun.com/articles/8896">《塗鴉科技:支撐從零暴增數十億資料的背後,竟無專職運維! 》</a>
<a href="https://yq.aliyun.com/articles/8530">《爆款app小咖秀:服務端架構設計分享》</a>
<a href="https://yq.aliyun.com/articles/8306">《空格app:雲上多場景技術架構實踐與經驗》</a>
<a href="https://yq.aliyun.com/articles/8189">《驢媽媽:基于混合雲的旅遊産品資料分析系統》</a>
<a href="https://yq.aliyun.com/articles/7548">《遊族網絡:如何運維千台以上遊戲雲伺服器》</a>
<a href="https://yq.aliyun.com/edu/lesson/play/91">《淘寶丁奇:如何解決影響mysql使用的9大問題》</a>