PostgreSQL在騰訊資料倉儲TDW的使用教程

來源:互聯網
上載者:User
TDW作為一個離線資料分析系統,在處理海量資料方面,通過並行計算,有很好的效能優勢。但是騰訊知道,想用一個大而全的系統解決所有問題一般也是不現實的,同樣,TDW也有它的劣勢,比如對小資料處理效能低,update/delete效能差、介面不豐富等。因此騰訊引入一個強大的開來源資料庫PostgreSQL,並對其做一些功能擴充,使之有訪問TDW資料的能力;同時騰訊在TDW中開發了一種新的儲存引擎,騰訊稱之為pgdata儲存引擎,使得TDW具備讀寫PostgreSQL中的資料的能力。

 

 

PostgreSQL 在騰訊應用概述

 


  • 主要業務情境為OLAP資料分析

    • 大部分為內部系統,少量應用於對外服務

    • 作為TDW系統的補充而存在

  • 主要應用形式為業務使用TDW提供的tPG服務

    • TDW團隊負責機器、運營和支援人員

    • 業務提交申請即可使用

  • PG與MySQL

  • MySQL可以支撐,則優先使用MySQL

  • MySQL不能滿足,再考慮使用PG

 

TDW與PostgreSQL互訪問功能的實現,對TDW是一個強有力的補充,這些主要體現在如下3點:

 


  • 彌補TDW介面不豐富的短板。TDW缺乏標準化的JDBC/ODBC,編程介面也不豐富,而PostgreSQL有社區強大的力量,提供了JDBC/ODBC, shell, C/C++, C#, python, perl等各種語言的介面,使用者通過這些豐富的介面和騰訊開發的PostgreSQL的TDW橋接工具tdwlink,訪問TDW中的資料。

  • 彌補TDW小資料分析效率底的短板。TDW在海量資料處理時,可以發揮它並存執行的優勢。但是對於小資料分析,它的效能反而不如傳統的DB。使用PostgreSQL,對於10GB以內的資料分析,可以獲得更好的效能和時間響應,一般可以在秒級返回結果,相比TDW分鐘級的響應,tPG在這種情境下更有優勢。

  • 作為TDW的pgdata儲存引擎,彌補TDW update/delete效率底下的短板。TDW作為資料倉儲系統,對於記錄級的update/delete支援不是很好。在TDW中記錄級的update/delete,會導致整個表的重寫,也就是說,即使delete一條資料,也會導致整個表重寫一遍,耗費大量系統資源。而tPG作為傳統資料庫,記錄級的update和delete效率非常高。

 

tPG 的作用

 


  • TDW資料集市,結果展示

  • 對外提供JDBC/ODBC等標準化介面

  • 提高高校的小資料分析功能

  • 提高高校的update/delete功能

 

TDW 為什麼要引入tPG

 

TDW應用推廣遇到的挑戰

 


  • TDW離線分析,不能滿足業務的結果文件庫需求

  • TDW沒有標準的JDBC、ODBC介面,難以與商業工具對接

  • TDW處理小資料、做update和delete效率低

 

解決方案

 



  • TDW不是萬能的,不可能滿足所有應用情境

  • 需要建設一套RDBMS,作為TDW的補充

    • 要方便使用者移轉已有業務,做好有工具做遷移

    • 要有標準的JDBC、ODBC介面

    • 效能要好

    • 功能容易擴充

 

為什麼選擇PostgreSQL

 


  • 完善的DB功能

    • SQL標準支援較好

    • 支援PL/pgSQL等多種過程語言

    • 支援視圖、分析函數、CTE等進階特性

  • OLAP效能超過MySQL

    • 複雜SQL效能高10倍+

    • 基於cost的SQL最佳化,調優手段更多

    • 部分索引,函數索引,cluster索引

  • 外掛程式式的功能擴充

    • 已有訪問Mysql、Redis、文本等外部資料源外掛程式

    • 很容易開發訪問TDW的外掛程式

  • TB級Database Backup與恢複(基於zfs快照技術)

    • 速度快,對上TB的資料做快照耗時小於1秒

    • 佔用空間小,新產生的快照幾乎不佔空間

    • 支援快照增量備份,支援快速rollback

 

PostgreSQL系統在TDW生態圈中的位置如下圖所示,tPG是騰訊對擴充之後的PostgreSQL的一個叫法:

 

 

下面分兩個部分對TDW與PostgreSQL的互訪問功能做一個介紹,也即是pgdata儲存引擎以及tdwlink功能。

 

pgdata 儲存引擎

 

TDW本身支援多種儲存格式,包括textfile,rcfile,pbfile,在這個基礎上,騰訊開發一種新的儲存引擎,也即pgdata儲存引擎,能夠透明的儲存以及訪問PostgreSQL中的資料,具體情況如下圖:

 

 

在使用上,只需要在建立表的時候指定為pgdata儲存引擎即可,例如使用如下語句就可以建立此類型的外表

 


 









1


create external table foo(idx bigint, str string) stored as pgdata

 

在後續訪問過程中就和使用其他TDW表一般即可,在此簡單說明一下訪問的實現方式,訪問的資料流大致如下

 

 


  1. 在解析SQL查詢語句時,先分解出每個子查詢,然後對每個子查詢總是會首先判斷當前查詢涉及的表中是pgdata外表,如果沒有DB外表則走正常的查詢語句執行流程;

  2. 如果有pgdata外表, 接著再檢查在本次查詢中涉及到的外表資料是否已經匯入,如果匯入則直接複用已經匯入的資料,如果沒有則對相應的子查詢進行加工,將其轉換為相應的標準關係型資料庫SQL語句,然後從表中擷取串連資訊,使用JDBC執行查詢語句;

  3. 將查詢結果的資料從資料庫中匯入到位於tmp目錄下的一個隨機HDFS目錄中,這個隨機目錄使用UUID產生,因此可以保證唯一性,而不與其他查詢語句產生衝突,然後將其設定為外表的資料所在的HDFS檔案路徑,Mapreduce任務會自動讀取該路徑作為任務的輸入路徑;

  4. 在該條查詢執行結束以後,並且查詢結果已經擷取成功,則清除掉這個臨時檔案。如果查詢出現了異常也會自動的清理到已經匯入的垃圾資料資訊。

 

tdwlink 功能

 

SQL標準中包含了一個名為SQL/MED也即”SQL Management of External Data”的功能, PostgreSQL在2011年的9.1版本使用一種叫Foreign Data Wrappers的機制對此標準做了唯讀支援,開發人員只需要對相應的資料來源開發相應的外掛程式即可通過PostgreSQL對遠端資料來源進行訪問。目前社區已經有很多基於此功能開發的外掛程式,諸如oracle_fdw,mysql_fdw,redis_fdw等,騰訊團隊基於PostgreSQL的這個特性,開發了具備訪問TDW資料能力的外掛程式,稱之為tdw_fdw,可以參考下圖:

 

 

為了方便使用者使用此功能,騰訊開發了一個預存程序tdwlink,使用者只需要事先配置好對應的Foreign server以及認證資訊,即可很方便的使用,例如騰訊已經定義好了tdw_svr這個server,想訪問tdw裡的test庫的test表,只需要select tdw_meta.tdwlink(‘tdw_svr’,‘test’,‘select col1, col2 from test’)即可。由於此函數是通過PostgreSQL提供的,因此可以使用PostgreSQL提供的任意介面來使用,這樣也間接的擴充了TDW所具備的提供者。這裡補充一點,騰訊的tdw_fdw外掛程式是基於PostgreSQL 9.1版本開發的,這個版本的Foreign Data Wrappers只能對外部資料源提供唯讀訪問,因此騰訊的tdw_fdw只能夠提供對TDW的唯讀訪問,而最新發行的PostgreSQL9.3版本的Foreign Data Wrappers已經提供寫支援,這個也是騰訊的tdw_fdw外掛程式後續可以進行功能擴充的地方。

 

tPG 使用的開源外掛程式

 


  • 分區管理:基於pg_partman進行改造

  • 監控:check_postgres和pgBadger

  • 緩衝預熱:pgfincore

  • 執行個體間互相訪問:dblink

  • 讀取MySQL資料:mysql_fdw

  • 中文全文檢索索引:zhparser

 

tPG 運營現狀

 

目前運營情況

 


  • 11套tPG執行個體,共約40台機器

  • 已用儲存約30TB,最大執行個體儲存達5TB

  • tPG在公司內的用總戶數100人+

  • 沒有因PG本身出過事故,使用者評價積極

 

業務類型

 


  • 對外:使用者報表

  • 對內:TDW系統,30多個業務的報表系統、資料提取系統、BI系統、營銷系統等

 

tPG 應用未來規劃

 


  • 為業務提供叢集版PG-XC服務

  • 更豐富的應用情境

    • 地理資訊(PostGis )

    • 機器學習與資料採礦(Madlib )

    • R統計分析(PL/R )


  • 接入流程自助化

    • 將tPG服務雲化,降低營運人工參與量
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.