阿里雲數據庫產品HybridDB簡介——OLAP數據庫,支持行列混合存儲,基於數據庫Greenplum的開源版本,並且吸收PostgreSQL精髓


為什么會有HybridDB的誕生?它經歷了怎樣的研發歷程?它的應用場景和情況是怎樣的?帶着這些問題,InfoQ對阿里雲的數據庫專家兼Postgres中國社區/中國用戶會主席蕭少聰先生進行了采訪,以下文字整理自采訪文稿。

業界早期使用數據時,尤其是OLTP場景下,通常選擇非分布式的關系型數據庫,如MySQL、SQLServer、Oracle、PostgreSQL即可滿足大部份的需求。

OLAP中主流數據庫遭遇瓶頸

從技術角度而言,OLAP場景,不僅涉及的數據量大而且要求分析的結果實時返回,對應的SQL查詢十分復雜。如何做到技術性能和業務功能權衡,對於數據庫而言是一個重大考驗。

已有的兩個主流開源數據庫,MySQL和PostgreSQL都是針對OLTP環境的,在OLAP在線分析需求下它們的性能明顯不足。特別是MySQL在大規模分析操作時多表Join的性能是當前互聯網用戶的一大痛點。

在OLAP發展的早期,其操作並沒有專門的數據庫支撐,直接就與OLTP業務放在同一個數據庫中完成。但隨着業務量的增加,OLAP每次要分析的數據量越來越大,這樣的分析操作執行時就會導致數據庫的業務交易下降。因此業界開始將OLTP、OLAP拆分成兩套不同的數據庫進行處理,OLTP數據庫中的數據通過ETL軟件持續或定期抽取到OLAP數據庫,讓業務交易與報表分析進行分離。

而新的問題很快又到來了,聯互網爆發后數據量也激增,OLTP的業務庫可以保存比較少的數據量如3個月到半年,但OLAP的數據量將可能要保存幾年甚至更多。單台服務服務的性能上限已經無法滿足OLAP分析數據持續增加所帶來的壓力,因此催生出如阿里HybridDB這樣的大規模並行處理(Massive Parallel Processing,MPP)分布式OLAP數據庫。

新的分布式OLAP數據庫

在提供HybridDB方案之前,我們會給用戶提供如分庫分表等處理方案,但這樣的方案對於SQL查詢內容不確定的OLAP業務並不友好。當用戶需要進行多個數據表的組合操作時,由於數據需要跨服務器進行大規模的聚合,性能十分低下。這個問題在HybridDB中也同樣會出現,所幸的是,Greenplum Database開源項目中借助平行的數據擴展技術及interconnect的專用協議,通過自定義的網絡協議有效地解決了網絡瓶頸的問題。這也是我們選擇基於Greenplum Database開源項目的原因之一。

簡單來說,MPP是一種平衡的性能擴張模型。以HybridDB的模型為列,每個節點可存放的數據量及計算能力為1Core / 8GB Mem / 80GB SSD(即將開放500GB HDD版本),如果用戶80GB以內的數據在這樣的計算單元中,可以在毫秒內查詢出結果,那將數據計算能力及容量平衡擴展到上百TB甚至PB時,用戶查詢“等比”數據量時依然可以達到毫秒級別。

MPP分布式OLAP數據庫系統架構已經發展了有10多年之久,十分成熟,當前使用這類系統的企業都是中大型公司。OLAP是一個很大的市場,有別於如同EMR(Hadoop)的大數據分析市場,它要求海量數據的SQL查詢在幾分鍾、幾秒,甚至毫秒級返回結果,因此對於服務器、網絡及數據庫軟件本身的架構都提出了很高的要求。

技術攻堅之路

2015年10月Greenplum Database由Pivotal開源后,阿里雲PostgreSQL內核團隊便開始進行深度的調研,於2016年開始進行產品的研發工作,到今年7月份我們對用戶開放了公測邀請並准備正式商業化的工作。

揭秘HybridDB方案

HybridDB基於開源Greenplum Database(內核實際上就是PostgreSQL)項目的MPP分布式數據倉庫,與PostgreSQL不同,HybridDB可以實現橫向擴展,提供用戶需要的百GB到百TB的高性能分析能力。

HybridDB最大的三個特色:

  1. 基於成熟的GPDB及PostgreSQL生態,軟開發合作伙伴進行一次軟件開發,即可在雲上雲下同樣使用,免去遷移的煩惱,更容易實現混合雲中的數據分析支持。
  2. 支持多種混合數據類型(多達23種)的SQL統一查詢,包括:

    傳統數據類型:字符、數字、浮點、日期等;

    非結構化數據:JSON、XML;

    特殊功能數據類型:GIS地理信息數據、IPv4/v6網絡數據、HyperLogLog預估分析數據。

  3. 支持混合的數據存儲,包括:行存、列存、SSD/HDD本地存儲、OSS雲存儲,未來更將支持“存儲計算分離”,用戶可以更為靈活在進行資源的購買及分配。

那么,HybridDB在OLAP讀取中都做了哪些優化?

優化方面從引擎底層我們針對阿里雲的硬件及網絡特點,進行的源碼級別的深度優化,特別是在網絡調度上進行了針對性的處理,提高跨網絡數據節點的吞吐能力。同時在用戶業務層中對特殊數據類型進行擴展,如果物聯網中的JSON數據類型是Greenplum Database所不支持的,HybridDB通過直接支持這一數據類型,避免用戶自行進行非結果化的解析,同時提供基於函數的JSON屬性級索引,提高數據庫處理JSON的檢索性能。

數據存儲

1、本地存儲

HybridDB的本地存儲分為行儲存和列存儲兩種方式。行存儲和列存儲各有長處。行存適合於近線數據的分析,特別是要求查詢結果返回表中某幾跳符合條件記錄的所有字段的情況。列存適合用於數據的統計分析。

那么兩者的適用情況是怎樣的呢?舉例說明:在行存的情況下,如果一個用於存放用戶的表中有20個字段,但我們只要統計用戶年齡的平均值,這時數據庫要對用戶表進行全表掃描,遍歷所有行的所有數據;但如果使用列存,數據庫只要定位到這一列,然后只掃描這一列的數據就可以得到所有的結果,性能上相比列存理論上就會直接快20倍,加上HybridDB將數據分布式存儲到多個計算節點,性能將再次提高幾倍,達到100倍性能提升是十分常見。

HybridDB是混合兩者搭配使用的。用戶可以配搭進行使用,定義不同的表使用不同的存儲方式,讓用戶適應不同的業務場景,並進行數據生態周期的管理。如6個月內的數據可能要經常獲取全行數據,因此使用行存儲,6個月后的數據通過列存儲進行保存提高分析匯總操作的查詢性能。

2、外部存儲

高性能的數據分析是在本地存儲完成的。OSS作為外部存儲,HybridDB可以將OSS中的CSV格式化文本作為外部表進行數據查詢,同時還可以對這些外部表進行寫入操作。寫入到OSS的數據可以提供給RDS for PostgreSQL或EMR等雲數據庫服務進行讀取及處理,因此也同時實現了數據的無縫打通。

同時我們也將支持“存儲計算分析”的模型,在這樣模型上我們平時甚至可以只通過OSS進行數據的存儲,當需要進行計算時再開啟足夠的計算節點進行數據分析處理,計算處理結束后關閉計算節點資源以節省使用成本。

。。。

 

轉自:http://www.infoq.com/cn/news/2016/12/MySQL-PostgreSQL-Greenplum


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM