雲原生資料倉儲AnalyticDB PostgreSQL版提供PB級資料即時互動式分析、ETL/ELT、BI報表展示功能,支援資料高吞吐即時寫入與大量匯入,提供ACID保證和標準交易隔離等級,採用MPP全並行架構,是一款具有高性價比的雲原生數倉產品,提供基於阿里雲生態的公用雲和混合雲端服務。
概述
AnalyticDB PostgreSQL版支援JDBC/ODBC串連,支援SQL 2003文法標準,相容PostgreSQL,Greenplum,和部分Oracle文法,同時提供PL/pgSQL預存程序。另外在SQL基礎上,支援Apache MADLib機器學習,PostGIS地理位置分析,以及JSON/JSONB半結構化資料,圖片音頻等非結構化資料與結構化資料融合分析功能。
在部署形態層面,AnalyticDB PostgreSQL版提供阿里雲公用雲端服務,隨用隨付,支援垂直升降配和水平擴容,另外支援儲存容量獨立線上擴容;同時提供阿里雲企業版,和敏捷版DBStack混合雲部署形態,同時支援X86和ARM平台。
在第三方認證層面,AnalyticDB PostgreSQL版通過了“國際資料庫TPC官方TPC-H 30TB認證”(性價比綜合排名第一),信通院“分散式交易型資料庫基礎能力評測”(TPC-C)和“分布式AnalyticDB大規模效能認證”(640節點 TPC-DS 100TB)。
技術架構
以下為AnalyticDB PostgreSQL版的架構圖,主要包含Master Node和Compute Node兩大組件,中間通過Interconnect進行互聯通訊和資料交換傳輸。

Master Node和Compute Node提供多副本保障服務高可用和資料高可靠,同時均支援通過Scale Out水平擴充來提高叢集整體寫入查詢並發和吞吐。
模組組件
Master Node
Master Node主要負責用戶端連線協定層接入(Access Protocol),認證和鑒權(Authorization & Authentication),SQL解析(Parser),重寫(Rewrite),最佳化(Optimizer),和執行分發協調(Dispatcher)。
另外,Master Node還包含全域交易管理員(Global Transaction Manager),負責全域事務ID、快照產生和分散式交易管理;全域中繼資料目錄(Global Catalog)則記錄了使用者,庫,表,視圖,索引,分布分區等資料庫物件的中繼資料資訊。
Compute Node
Compute Node包含了一組Segment,部署形態上可以是物理機,VM或者容器。
Segment
Segment是負責具體的SQL執行和資料存放區節點。其中本地中繼資料(Local Catalog,與Master Node Global Catalog保持同步)起到加速執行的功能(Segment無需每次訪問Master Node獲得中繼資料資訊);本地交易管理員(Local Transaction Manager)提供本地事務能力;緩衝管理器(Buffer Pool)則提供了資料的讀寫緩衝,用於提升讀寫效能。
執行引擎(Query Executor)通過向量化(Vectorization)和即時編譯(JIT)等技術,相比傳統逐行計算的火山模型獲得數倍效能提升。
資料和索引(Data & Index)支援行存表,列存表,和外表以及相應索引:
行存表:資料按行存放,支援主鍵,B+樹索引,Bitmap索引,GIN索引等,適合資料即時寫入更新刪除,點查,範圍查,通過MVCC提供事務能力。
列存表:資料按列存放,高壓縮比,適合追加寫(少量更新刪除)情境。通過B+樹索引支援高效點查,同時在block層級提供min&max輕量級索引,資料可按多列進行多維排序,支援任意排序列的組合過濾,支援高效分析情境。
外表:中繼資料存放在本地系統資料表,資料存放在OSS,支援的資料格式包括ORC,Parquet,CSV,JSON,支援表分區,其中ORC和Parquet支援列過濾和謂詞下推,提升分析效能。除OSS外,同時也支援Hadoop(HDFS, Hive)外表。

組件互動
下圖展示了用戶端從建立串連到執行一條完整SQL整個過程中上述主要模組組件的互動和執行流程。

資料模型
將表資料均勻的分布到各個節點中,是發揮叢集整體IO效能,提升儲存容量,最佳化計算與網路傳輸效率的關鍵。除了預設的雜湊分布策略,AnalyticDB PostgreSQL版還支援複製分布和隨機分布。複製分布是指在每個儲存節點上都存放該表的全量資料,通常用於經常被關聯查詢的小表,在執行相應查詢時無需資料廣播或重分布環節,提升查詢效能。另外也支援隨機分布策略,主要情境是當前表欄位中無合適欄位作為hash分布列(比如會引起各個節點資料扭曲),同時該表也不小(不適合複製策略),隨機分布可以讓該表資料被均勻擺放到各節點。
在將表資料分布到各個儲存節點後,在單個節點上根據業務情境可對錶資料進行分區,在執行具體查詢時進行分區裁剪,縮小尋找和資料處理範圍。AnalyticDB PostgreSQL版支援範圍和列表分區類型,同時支援多級分區。下圖展示了一張使用者表顯示通過ID列hash分布到3個節點,然後在每個節點上按date列進行定界分割,然後再按city列進行列表分區。圖中最右邊的每個分區都對應了一份資料存放區和索引。這些分區表可以是行存表,也可以是列存表,或者外表。比如業務上完全可以對最近需要寫入的分區(Mar)使用行存表,過去已經歸檔的分區(Feb)使用列存表,出於降低成本考慮,也可以對較少查詢的分區(Jan)使用OSS外表。

資料庫物件
AnalyticDB PostgreSQL版不僅僅是關係型也是對象-關係型,資料庫的對象通常包括:表、視圖、函數、序列、索引、分區子表、外部表格等,而對象-關係型則進一步支援使用者自訂對象和它的屬性,包括資料類型、函數、操作符,域和索引,甚至複雜的資料結構也可以被建立,儲存和檢索。這些對象將按照邏輯劃分成不同的集合即組成模式(schema),每當新資料庫建立後,都會預設為資料庫建立模式public,這也是該資料庫的預設模式,並且允許每個使用者(角色)進行訪問,所有為此資料庫建立的對象一般都將預設在這個模式中。
資料庫是資料庫物件的物理集合,而模式則是資料庫內部用於組織管理資料庫對象的邏輯集合,模式之下則是各種應用程式會接觸到的對象,比如表、索引、資料類型、函數、操作符等。使用模式把資料庫物件組織成邏輯組,讓它們便於管理,允許多個使用者(角色)使用同一個資料庫不會互相干擾。
使用者(角色)是資料庫(叢集)全域範圍內的許可權控制系統,用於各種叢集範圍內所有的對象許可權管理。使用者不特定於某個單獨的資料庫,如果需要登入資料庫管理系統則必須串連到一個資料庫上,使用者可以擁有各種資料庫物件。
預設情況下,使用者看不到模式中不屬於他們所有的對象,需要對象所有者賦予相應許可權。如果已經被賦予適當的許可權,使用者也可以在別的使用者模式裡建立對象。請注意,預設每個使用者都在public模式上有建立對象的許可權,比如建立一個表並讀寫資料。
在AnalyticDB PostgreSQL版資料庫中,所有對象作為系統中繼資料將同時被儲存在Master伺服器和Segment伺服器上。
