傳統分庫分表(sharding)的缺陷與破解之法

標籤

PostgreSQL , Greenplum , HybridDB for PostgreSQL , MPP , DIRECT-IOjava

背景

隨着互聯網的發展,數據爆炸性的增加,數據庫逐漸成爲了不少業務的絆腳石,不少業務也哭着喊着要上分佈式數據庫。python

pic

可是,傳統的分庫分表(sharding)帶來的問題較多,得不償失git

傳統分庫分表問題

一、 擴容不方便(須要重分佈數據)github

二、 分佈鍵變動很麻煩web

三、 分佈鍵選擇(架構設計)須要謹慎,甚至不少sharding產品不支持多個分佈鍵、或者不支持隨機分佈,致使業務不得不使用沒有任何意義的自增序列來做爲分佈鍵。正則表達式

四、 沒法支持複雜查詢。跨庫JOIN性能差,甚至只能按分佈鍵JOIN,其餘字段不支持JOIN。(由於這種產品架構數據節點之間是孤島,數據須要在孤島之間交互,須要經過上層的中間件節點,而這樣的話,若是有跨庫JOIN,就須要將數據收到中間件節點再JOIN,性能差是可想而知的,甚至打爆中間節點。)sql

五、 當須要寫入、返回大量結果集時,可能把中間件打爆。可能性很是大。數據庫

六、 分佈式事務性能差,甚至不支持分佈式事務。apache

七、 因爲各個數據節點各自爲政,實際上這種模式帶來的SQL限制多、功能缺失多數組

八、 SQL功能缺失,致使應用改形成本巨大,(實際上就是限制多)。

九、 全局一致性時間點恢復幾乎不可實現,不一樣的數據節點處於不一樣的狀態,沒有一個全局統一的快照管理和恢復機制。

傳統分庫分表最大的問題實際上仍是孤島問題,致使了一系列的問題。

HybridDB for PG如何破解這些問題

pic

一、實時寫入,經過直接寫segment(能夠作成對業務透明),實現了單機25萬行/s的寫入能力。經過擴展計算節點,能夠擴展整個集羣的寫入能力。

二、批量導入,經過OSS_EXT,走OSS通道實時寫入,咱們測試過50臺機器的機器,達到了100億(5.5TB)數據,1251秒導入的性能。

三、全局一致性,HDB PG基於數據庫的ACID標準設計,是一個總體,支持全局事務。支持全局一致性。

四、點查,點查能力,每一個節點能夠實現100萬TPS。經過擴展計算節點,能夠擴展整個集羣的點查TPS能力。

五、複雜查詢,核心是MASTER節點的分佈式執行計劃,MASTER節點收到用戶請求後,生成分佈式執行計劃,並下發給計算節點並行執行。

六、大結果集查詢,經過遊標,實現大結果集的查詢,分頁,接收等。

七、UDF,用戶可使用java, python, plpgsql等語言,在HDB PG中實現業務邏輯,實現複雜的查詢場景需求。

八、任意列JOIN,因爲HDB PG數據節點直接能夠重分佈數據,不須要走MASTER節點,所以,不須要維表,就能夠實現任意列的JOIN,GROUP BY,DISTINCT等。

九、任意distinct,同上。

十、任意group by,同上。

《HybridDB PostgreSQL "Sort、Group、distinct 聚合、JOIN" 不害怕數據傾斜的黑科技和原理 - 多階段聚合》

十一、MASTER不承擔計算,因爲MASTER節點不承擔計算,因此不會成爲計算瓶頸,包括排序在內(MASTER節點採用MERGE SORT,幾乎不耗費資源)。

十二、機器學習,經過madlib插件,實現了數據庫內部的機器學習。

相關資料

http://madlib.incubator.apache.org/

https://pypi.python.org/pypi/pymadlib/0.1.4

https://github.com/pivotalsoftware/PivotalR

https://cran.r-project.org/web/packages/PivotalR/PivotalR.pdf

https://cran.r-project.org/web/packages/PivotalR/vignettes/pivotalr.pdf

1三、擴展功能:

資源隔離,經過資源隊列,能夠管理不一樣的用戶資源使用狀況。

HLL,是一個估值插件,能夠存儲估值數據。

行列混合存儲,行列混合存儲,支持壓縮。

分佈鍵,支持任意鍵做爲分佈鍵,同時支持隨機分佈,支持多列做爲分佈鍵。不須要強制分佈鍵。

分區表,支持多級分區,範圍分區,枚舉分區。

空間數據,支持PostGIS,能夠管理空間數據。

JSON,支持JSON數據類型。

數組,支持多值類型。

全文檢索,支持全文檢索類型。

正則表達式,支持正則表達式查詢語法。

OSS,支持冷熱分離存儲。

總結

HybridDB for PostgreSQL屬於MPP架構,解決了幾類問題,實現了HTAP(OLTP和OLAP混合業務):

一、高併發小事務(實時寫入、點查),

二、實時複雜大型計算,

三、批處理,

四、冷熱數據分離,

五、資源隔離,

六、容量、功能擴展性,

容量水平擴展(支持兩種擴容模式,一種原地擴容,一種跨集羣擴容),功能(UDF,plpython, pljava, plpgsql,插件)。

七、機器學習。

HybridDB for PG 性能指標

50臺機器的集羣,一些性能指標以下:

經過增長機器,能夠實現線性性能提高。

pic

pic

pic

參考

《HTAP數據庫(OLTP+OLAP) - sharding 和 共享分佈式存儲 數據庫架構 優缺點》

閱讀原文http://click.aliyun.com/m/41126/

相關文章
相關標籤/搜索