引言
在當(dāng)今數(shù)據(jù)驅(qū)動的時代,企業(yè)對數(shù)據(jù)庫系統(tǒng)提出了更高要求:既需要高效處理聯(lián)機(jī)事務(wù)處理(OLTP)業(yè)務(wù),又需要對海量數(shù)據(jù)進(jìn)行快速分析(OLAP),以支持實時決策。云原生HTAP(Hybrid Transactional/Analytical Processing,混合事務(wù)/分析處理)數(shù)據(jù)庫應(yīng)運而生,旨在統(tǒng)一這兩種負(fù)載。阿里云自主研發(fā)的PolarDB,通過其In-Memory Column Index(IMCI,內(nèi)存列存索引)技術(shù),成功構(gòu)建了云原生HTAP數(shù)據(jù)庫系統(tǒng)。本白皮書的第一部分將深入解析PolarDB IMCI的核心基石:列式數(shù)據(jù)是如何存儲與處理的,及其在數(shù)據(jù)處理和存儲服務(wù)中的實現(xiàn)。
一、列式存儲:架構(gòu)的基石
傳統(tǒng)行式數(shù)據(jù)庫將同一行的所有列數(shù)據(jù)連續(xù)存儲,適合頻繁的增刪改查事務(wù)。對于分析型查詢,往往只涉及表中少數(shù)幾列,行式存儲會導(dǎo)致大量無關(guān)數(shù)據(jù)被加載進(jìn)內(nèi)存,造成I/O帶寬和CPU緩存資源的巨大浪費。
PolarDB IMCI采用了純列式存儲(Columnar Storage)作為其分析加速的核心:
- 數(shù)據(jù)組織方式:表中的每一列數(shù)據(jù)被獨立存儲在一個連續(xù)的物理塊中。例如,一張包含“訂單ID”、“用戶ID”、“商品ID”、“金額”、“時間”的表,在列存中,所有“金額”值會被集中存儲在一起,形成一個獨立的數(shù)據(jù)單元。
- 存儲結(jié)構(gòu):IMCI的列式數(shù)據(jù)并非簡單平鋪,而是采用了高度優(yōu)化的編碼格式(如字典編碼、行程編碼等)和壓縮算法。這不僅極大減少了磁盤和內(nèi)存的占用,更重要的是,壓縮后的數(shù)據(jù)在參與計算時通常可以無需解壓或僅需部分解壓,顯著提升了CPU計算效率和內(nèi)存帶寬利用率。
- 與行存共存:PolarDB的HTAP架構(gòu)并非取代原有行式存儲(用于OLTP),而是新增了列式存儲副本。數(shù)據(jù)通過日志流實時、異步地從行存同步到列存,從而保證分析查詢能訪問到近乎實時的數(shù)據(jù),同時不影響前端事務(wù)處理的性能。
二、列式數(shù)據(jù)的處理:向量化執(zhí)行引擎
高效的列式存儲需要匹配專用的查詢處理引擎才能發(fā)揮最大威力。PolarDB IMCI采用了業(yè)界先進(jìn)的向量化執(zhí)行引擎(Vectorized Execution Engine),摒棄了傳統(tǒng)數(shù)據(jù)庫一次處理一行的“火山模型”。
- 批處理模式:向量化引擎以“批”(Batch)為單位處理數(shù)據(jù),每次操作處理列數(shù)據(jù)中的一個數(shù)據(jù)塊(例如1024個值)。這與列式存儲的物理布局完美契合,可以一次性將一列中的連續(xù)數(shù)據(jù)塊加載到CPU緩存。
- SIMD指令優(yōu)化:現(xiàn)代CPU提供的單指令多數(shù)據(jù)流(SIMD)指令,允許一條指令同時對多個數(shù)據(jù)執(zhí)行相同操作。列存中連續(xù)、類型統(tǒng)一的數(shù)據(jù)是應(yīng)用SIMD優(yōu)化的理想場景。IMCI的引擎充分利用SIMD,對比較、聚合、算術(shù)運算等操作進(jìn)行極致加速,將CPU的并行計算能力發(fā)揮到極致。
- 減少虛函數(shù)調(diào)用:向量化處理按列進(jìn)行,整個批量的操作可以通過緊湊的循環(huán)完成,避免了傳統(tǒng)行處理模型中大量的條件判斷和虛函數(shù)調(diào)用開銷,極大提升了CPU流水線的效率。
三、數(shù)據(jù)處理與存儲服務(wù):云原生的融合
PolarDB IMCI的列式數(shù)據(jù)存儲與處理并非孤立存在,而是深度融入其云原生架構(gòu),構(gòu)成統(tǒng)一、彈性、高可用的數(shù)據(jù)處理與存儲服務(wù)。
- 計算與存儲分離:PolarDB基于Cloud-Native架構(gòu),實現(xiàn)了計算節(jié)點(處理SQL請求、執(zhí)行事務(wù)或分析)與存儲節(jié)點(持久化數(shù)據(jù))的分離。列式存儲作為共享存儲層的一部分,可以被所有計算節(jié)點(包括專用于OLAP的只讀列存節(jié)點)高速訪問。這種分離使得計算資源可以根據(jù)OLTP和OLAP的負(fù)載獨立、彈性地擴(kuò)縮容。
- 實時同步與服務(wù)化:行存與列存之間的數(shù)據(jù)同步通過高性能日志回放機(jī)制實現(xiàn),延遲可低至毫秒級。對用戶而言,列存數(shù)據(jù)作為一項“服務(wù)”透明可用。用戶提交的分析查詢,優(yōu)化器會根據(jù)代價自動選擇是訪問行存還是列存索引,無需修改應(yīng)用。
- 統(tǒng)一的服務(wù)體驗:在PolarDB的HTAP服務(wù)中,用戶通過一個統(tǒng)一的數(shù)據(jù)庫端點(Endpoint)進(jìn)行訪問。系統(tǒng)內(nèi)部自動將事務(wù)路由到行存計算節(jié)點,將復(fù)雜分析查詢路由到搭載IMCI的列存計算節(jié)點。數(shù)據(jù)處理(計算)與數(shù)據(jù)存儲(行/列存)作為后端一體化的服務(wù)提供,保障了數(shù)據(jù)強一致性和服務(wù)的連續(xù)性。
- 智能自適應(yīng):IMCI支持動態(tài)增減列,并能根據(jù)查詢負(fù)載模式自動進(jìn)行數(shù)據(jù)重組和優(yōu)化,使得存儲與處理服務(wù)具備自適應(yīng)性。
結(jié)論
PolarDB IMCI通過創(chuàng)新的列式數(shù)據(jù)存儲與向量化處理技術(shù),為云原生數(shù)據(jù)庫注入了強大的實時分析能力。列式存儲以其高效壓縮和IO友好性奠定了高性能分析的基礎(chǔ);向量化執(zhí)行引擎則充分利用現(xiàn)代硬件特性,將列存的數(shù)據(jù)布局優(yōu)勢轉(zhuǎn)化為極致的查詢速度。這一切最終通過云原生的計算存儲分離架構(gòu),被封裝成彈性、透明、統(tǒng)一的數(shù)據(jù)處理與存儲服務(wù),使得企業(yè)能夠在一個數(shù)據(jù)庫系統(tǒng)中同時應(yīng)對高并發(fā)事務(wù)與即席大數(shù)據(jù)分析的雙重挑戰(zhàn),真正實現(xiàn)了HTAP的價值。
(此為白皮書系列第一部分,后續(xù)部分將深入探討查詢優(yōu)化、資源隔離、實時一致性等關(guān)鍵技術(shù)。)