TiDB 最初是作為一個(gè)分布式 OLTP 數(shù)據(jù)庫開發(fā)的,但隨著越來越多的用戶將其用于 AP 環(huán)境,并且給了我們很多積極的反饋,讓我們決定,將 TiDB 打造成一個(gè)支持 OLTP + OLAP 的 HTAP 數(shù)據(jù)庫。為了達(dá)到這個(gè)目標(biāo),我也在思考,如何讓 TiKV 更好的支持行列混存。剛好最近一段時(shí)間研究了一些相關(guān)的知識,這里簡單總結(jié)歸納一下,先看看業(yè)界的一些方案,然后在想想后續(xù)我們會如何去做。
PAX
將 PAX 放在第一個(gè)主要是因?yàn)?Spanner 在最新的論文里面提到了這種方案,貌似他們也采用了。PAX 融合了 NSM 和 DSM 的優(yōu)點(diǎn),在一個(gè) page 里面,使用 mini page 來存放不同的 attributes。關(guān)于 PAX,詳細(xì)可以我之前的一篇文章。
使用 PAX 好處在于更好的利用 CPU 以及緩存,對于不同的 attribute 可以使用不同的壓縮方式,另外,對于現(xiàn)有的 NSM 系統(tǒng),可以非常方便的使用 PAX 改寫。
但 PAX 也并不是萬能的,因?yàn)槭且粋€(gè) page 讀取,所以有時(shí)候不相關(guān)的 attribute 數(shù)據(jù)還是會讀出來。雖然 PAX 相比 NSM 對于緩存的利用更加高效,但還是不能做到 DSM 那種程度。另外,一些 DSM 的 vectorized processing 等特性,仍然不能很好的用在 PAX 上面。
PAX 雖然是十幾年前就提出的一套方案,但現(xiàn)在主流的 HTAP 系統(tǒng)真的很少用到,除了 Spanner 公開之外(話說我對它是否已經(jīng)大規(guī)模用在 Spanner 上面,以及性能怎樣是存疑的),業(yè)界還猜測 Oracle 也有用到,這個(gè)如果有人清楚,麻煩確認(rèn)一下。
Fractured Mirrors
Fractured Mirrors 的理念主要源于 paper A Case for Fractured Mirrors,這篇 paper 雖然看起來很復(fù)雜,但核心理念就是寫數(shù)據(jù)的時(shí)候,寫兩份,一份 NSM,一份 DSM,根據(jù)不同的查詢語句路由到不同的 storage 上面。
通常,服務(wù)器都會做 raid,所以其實(shí)寫兩份的開銷并不會很大,對于 TiKV 來說,因?yàn)樘焐娜北?,沒準(zhǔn) Fractured Mirrors 是一個(gè)比較合適的方案,譬如我們可以用一個(gè)副本作為 NSM,兩個(gè)作為 DSM,然后查詢的時(shí)候路由到不同的副本上面去。這套機(jī)制看起來是很美好的,但其實(shí)難度也很大,畢竟要維護(hù)兩套高性能的 storage 方案,這已經(jīng)不是一般的 team 能 hold 住的。
FSM
FSM 將一個(gè) table,分成了不同的 Tile,每個(gè) Tile 聚合了相關(guān)的 attributes,Tile 可以認(rèn)為是 DSM,然后 Tile 里面則是使用 DSM 存儲。不同于 PAX 只有一種特定的 page 格式,F(xiàn)SM 會根據(jù)實(shí)際的查詢等統(tǒng)計(jì)信息,動態(tài)的進(jìn)行變更底層結(jié)構(gòu)的。關(guān)于 FSM,詳細(xì)可以參考我之前寫的一篇文章。
對于 FSM 來說,如果我們預(yù)先就能很好的設(shè)計(jì)出一個(gè) Tile 到底包含哪些 attributes,那么就能非常高效的處理了。但大家知道,這在現(xiàn)實(shí)中是不可能的,畢竟我們的業(yè)務(wù)也可能會不斷變化。我們需要很好的設(shè)計(jì)一套系統(tǒng),實(shí)際根據(jù)外面的查詢請求變化,動態(tài)的去調(diào)整底層的 Tile 結(jié)構(gòu),這個(gè)難度是非常大的。我覺得唯一可行的就是引入機(jī)器學(xué)習(xí),畢竟已經(jīng)有 paper 說了如何根據(jù)機(jī)器學(xué)習(xí)來優(yōu)化 SQL 的查詢計(jì)劃了。
小結(jié)
上面就是最近一些關(guān)于行列混存的總結(jié),這里并沒有提及 Kudu,因?yàn)槲矣X得 Kudu 后面還需要更深入的研究一下。后續(xù)到底 TiKV 如何去支持 HTAP,我們還會持續(xù)在考察業(yè)界方案一段時(shí)間,然后在思考如何去做,也非常歡迎在這方面有經(jīng)驗(yàn)的同學(xué)加入,一起將 TiDB 做成全球頂級的 HTAP 系統(tǒng)。