天天看點

阿裡雲資料庫産品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最大的三個特色:

基于成熟的GPDB及PostgreSQL生态,軟開發合作夥伴進行一次軟體開發,即可在雲上雲下同樣使用,免去遷移的煩惱,更容易實作混合雲中的資料分析支援。

支援多種混合資料類型(多達23種)的SQL統一查詢,包括:

傳統資料類型:字元、數字、浮點、日期等;

非結構化資料:JSON、XML;

特殊功能資料類型:GIS地理資訊資料、IPv4/v6網絡資料、HyperLogLog預估分析資料。

支援混合的資料存儲,包括:行存、列存、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

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/bonelee/p/6483407.html,如需轉載請自行聯系原作者