數據庫構架設計中主要有Shared Everthting、Shared Nothing、和Shared Disk:html
Shared Everthting:通常是針對單個主機,徹底透明共享CPU/MEMORY/IO,並行處理能力是最差的,典型的表明SQLServer數據庫
Shared Disk:各個處理單元使用本身的私有 CPU和Memory,共享磁盤系統。典型的表明Oracle Rac, 它是數據共享,可經過增長節點來提升並行處理的能力,擴展能力較好。其相似於SMP(對稱多處理)模式,可是當存儲器接口達到飽和的時候,增長節點並不能得到更高的性能 。服務器
Shared Nothing:各個處理單元都有本身私有的CPU/內存/硬盤等,不存在共享資源,相似於MPP(大規模並行處理)模式,各處理單元之間經過協議通訊,並行處理和擴展能力更好。典型表明DB2 DPF和hadoop ,各節點相互獨立,各自處理本身的數據,處理後的結果可能向上層彙總或在節點間流轉。網絡
咱們常說的 Sharding 其實就是Share Nothing架構,它是把某個表從物理存儲上被水平分割,並分配給多臺服務器(或多個實例),每臺服務器能夠獨立工做,具有共同的schema,好比MySQL Proxy和Google的各類架構,只需增長服務器數就能夠增長處理能力和容量。架構
MPP即大規模並行處理(Massively Parallel Processor )。 在數據庫非共享集羣中,每一個節點都有獨立的磁盤存儲系統和內存系統,業務數據根據數據庫模型和應用特色劃分到各個節點上,每臺數據節點經過專用網絡或者商業通用網絡互相鏈接,彼此協同計算,做爲總體提供數據 庫服務。非共享數據庫集羣有徹底的可伸縮性、高可用、高性能、優秀的性價比、資源共享等優點。elasticsearch
大規模並行處理(MPP)架構分佈式
Greenplum是一種基於PostgreSQL的分佈式數據庫。其採用shared nothing架構(MPP),主機,操做系統,內存,存儲都是自我控制的,不存在共享。也就是每一個節點都是一個單獨的數據庫。節點之間的信息交互是經過節點互聯網絡實現。經過將數據分佈到多個節點上來實現規模數據的存儲,經過並行查詢處理來提升查詢性能。
這個就像是把小數據庫組織起來,聯合成一個大型數據庫。將數據分片,存儲在每一個節點上。每一個節點僅查詢本身的數據。所獲得的結果再通過主節點處理獲得最終結果。經過增長節點數目達到系統線性擴展。oop
elasticsearch也是一種MPP架構的數據庫,Presto、Impala等都是MPP engine,各節點不共享資源,每一個executor能夠獨自完成數據的讀取和計算,缺點在於怕stragglers,遇到後整個engine的性能降低到該straggler的能力,所謂木桶的短板,這也是爲何MPP架構不適合異構的機器,要求各節點配置同樣。性能
Spark SQL應該仍是算作Batching Processing, 中間計算結果須要落地到磁盤,因此查詢效率沒有MPP架構的引擎(如Impala)高。操作系統
(原文地址:https://my.oschina.net/u/2000675/blog/1546160)