PostgreSQL , Greenplum , HybridDB for PostgreSQL , MPP , DIRECT-IOjava
隨着互聯網的發展,數據爆炸性的增加,數據庫逐漸成爲了不少業務的絆腳石,不少業務也哭着喊着要上分佈式數據庫。python
可是,傳統的分庫分表(sharding)帶來的問題較多,得不償失git
一、 擴容不方便(須要重分佈數據)github
二、 分佈鍵變動很麻煩web
三、 分佈鍵選擇(架構設計)須要謹慎,甚至不少sharding產品不支持多個分佈鍵、或者不支持隨機分佈,致使業務不得不使用沒有任何意義的自增序列來做爲分佈鍵。正則表達式
四、 沒法支持複雜查詢。跨庫JOIN性能差,甚至只能按分佈鍵JOIN,其餘字段不支持JOIN。(由於這種產品架構數據節點之間是孤島,數據須要在孤島之間交互,須要經過上層的中間件節點,而這樣的話,若是有跨庫JOIN,就須要將數據收到中間件節點再JOIN,性能差是可想而知的,甚至打爆中間節點。)sql
五、 當須要寫入、返回大量結果集時,可能把中間件打爆。可能性很是大。數據庫
六、 分佈式事務性能差,甚至不支持分佈式事務。apache
七、 因爲各個數據節點各自爲政,實際上這種模式帶來的SQL限制多、功能缺失多數組
八、 SQL功能缺失,致使應用改形成本巨大,(實際上就是限制多)。
九、 全局一致性時間點恢復幾乎不可實現,不一樣的數據節點處於不一樣的狀態,沒有一個全局統一的快照管理和恢復機制。
傳統分庫分表最大的問題實際上仍是孤島問題,致使了一系列的問題。
一、實時寫入,經過直接寫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,插件)。
七、機器學習。
50臺機器的集羣,一些性能指標以下:
經過增長機器,能夠實現線性性能提高。