一. Greenplum簡介html
大數據是個煊赫一時的詞,各行各業都在談。一談到大數據,好多人認爲就是Hadoop。實際上Hadoop只是大數據若干處理方案中的一個。如今的SQL、NoSQL、NewSQL、Hadoop等等,都能在不一樣層面或不一樣應用上處理大數據的某些問題。而Greenplum數據庫做爲一個分佈式大規模並行處理數據庫(MPP),在大多數狀況下,更適合作大數據的存儲引擎、計算引擎和分析引擎。python
Greenplum做爲企業級數據庫產品,能夠說是世界上最早進的OLAP開源數據庫之一。Greenplum是由數個獨立的數據庫服務組合成的邏輯數據庫,簡單的說就是一個與ORACLE、 DB2同樣面向對象的關係型數據庫集羣,咱們能夠經過標準的SQL能夠對GP中的數據進行訪問存取。2015年10月,Pivotal宣佈Greenplum正式開源。sql
Greenplum爲大數據存儲、計算、挖掘而設計,擁有豐富的特性:數據庫
第一,完善的標準支持:Greenplum徹底支持ANSI SQL 2008標準和SQL OLAP 2003 擴展;從應用編程接口上講,它支持ODBC和JDBC。完善的標準支持使得系統開發、維護和管理都大爲方便。而如今的 NoSQL,NewSQL和Hadoop 對 SQL 的支持都不完善,不一樣的系統須要單獨開發和管理,且移植性很差。編程
第二,支持分佈式事務,支持ACID。保證數據的強一致性。服務器
第三,做爲分佈式數據庫,擁有良好的線性擴展能力。在國內外用戶生產環境中,具備上百個物理節點的Greenplum集羣都有不少案例。架構
第四,Greenplum有不少合做夥伴,有完善的生態系統,能夠與不少企業級產品集成,譬如SAS、Cognos、Informatic、Tableau等;也能夠不少種開源軟件集成,譬如Pentaho、Talend 等。oracle
二. Greenplum架構分佈式
數據庫構架設計中主要有Shared Everthting、Shared Nothing、Shared Disk:函數
數據庫架構類型
Shared Everthting:侷限於單一服務器(一般是價格比較昂貴的SMP服務器),徹底透明共享CPU、Memory和I/O,典型的表明SQL Server。並行處理能力是最差的,其擴展性和性能受到相應的限制。
Shared Disk:各個處理單元使用本身的私有 CPU和Memory,共享磁盤系統。典型的表明Oracle Rac, 它是數據共享,可經過增長節點來提升並行處理的能力,擴展能力較好,相似於SMP(對稱多處理)模式。這種架構須要經過一個狹窄的數據管道將全部I/O信息過濾到昂貴的共享磁盤子系統。可是當存儲器接口達到飽和的時候,增長節點並不能得到更高的性能 。
Shared Nothing:各個處理單元都有本身私有的CPU/內存/硬盤等,不存在共享資源,相似於MPP(大規模並行處理)模式,它是把某個表從物理存儲上被水平分割,並分配給多臺服務器(或多個實例),每臺服務器能夠獨立工做,各處理單元之間經過協議通訊。並行處理和擴展能力更好,只需增長服務器數就能夠增長處理能力和容量。典型表明DB2 DPF和Hadoop ,各節點相互獨立,各自處理本身的數據,處理後的結果可能向上層彙總或在節點間流轉。
Greenplum是基於軟件的海量數據並行操做的「徹底不共享」的MPP架構,將實際的數據存儲設備分紅一個個區段服務器上的小存儲單元,每一個單元都有一個鏈接本地磁盤的專用獨立的、高帶寬通道。區段服務器能夠經過徹底並行的方式處理每一個查詢,同時使用全部磁盤鏈接,並按照查詢計劃的要求在各區段間實現高效數據流動。Greenplum基於這種架構能夠幫助客戶建立數據倉庫(Greenplum從開始設計的時候就被定義成數據倉庫),充分利用低成本的商用服務器、存儲和聯網設備,經過經濟的方式升級到千萬億字節的系統,而且在處理OLAP、BI(商務智能)、數據分析和數據挖掘等任務時性能遠遠超過了通用數據庫系統。
Greenplum架構
Greenplum的組件分紅三個部分:Master Severs、Segment Severs和Master Severs與Segment Severs之間的高效互聯技術Interconnect。其中Master和Segment自己就是獨立的數據庫Sever。
Master負責創建與客戶端的鏈接和管理,進行SQL的解析並造成執行計劃生成並拆分執行計劃;把執行計劃分配給Segment的節點,收集Segment的執行結果並返回給最終應用;Master不存儲業務數據,只存儲數據字典,不負責運算,所以不會成爲系統性能的瓶頸。這也是Greenplum與傳統MPP架構數據庫的一個重要區別。
Segment負責業務數據的存儲和存取,並根據獲得執行計劃,負責處理業務數據。也就是用戶關係表的數據會打散分佈到每一個Segment節點。當進行數據訪問時,首先全部Segment並行處理與本身有關的數據,若是須要Segment能夠經過進行Innterconnect進行彼此的數據交互。Segment節點越多,數據就會打的越散,處理速度就越快。所以與Shared Everthting數據庫集羣不一樣,經過增長Segment節點服務器的數量,Greenplum的性能會成線性增加。
三. Greenplum與BI(大數據應用)
Greenplum的特色主要就是查詢速度快,數據裝載速度快,批量DML處理快。並且性能能夠隨着硬件的添加,呈線性增長,擁有很是良好的可擴展性。所以,它主要適用於面向分析的應用。好比構建企業級ODS/EDW,或者數據集市等等。
Greenplum的數據庫引擎層是基於著名的開源數據庫Postgresql的,良好的兼容了Postgresql的功能 ,這使得Greenplum在支持BI等大數據分析與挖掘方面的應用時具有優秀的兼容性和豐富的拓展能力:
(1)Postgresql有很是強大 SQL 支持能力和很是豐富的統計函數和統計語法支持,除對ANSI SQL徹底支持外,還支持好比分析函數(SQL2003 OLAP window函數),還能夠用多種語言來寫存儲過程,對於Madlib、R的支持也很好。
(2)Postgresql中的功能模塊和接口基本上99%均可以在Greenplum上使用,例如odbc、jdbc、oledb、perldbi、python psycopg2等,因此Greenplum與第三方工具(ETL工具好比HaoheDI)、BI報表集成的時候很是容易。
(3)對於postgresql的contrib中的一些經常使用模塊Greenplum提供了編譯後的模塊開箱即用,如oraface、postgis、pgcrypt等,對於其它模塊,用戶能夠自行將contrib下的代碼與Greenplum的include頭文件編譯後,將動態so庫文件部署到全部節點就可進行測試使用了。