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