使用 Rust 實(shí)現(xiàn)的現(xiàn)代化實(shí)時(shí)開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)
作者:碼農(nóng)世界
TensorBase 的元數(shù)據(jù)層、運(yùn)行時(shí)層和存儲(chǔ)層。在存儲(chǔ)層,TensorBase 非經(jīng)典的列式存儲(chǔ)。這其中最重要的,我們給出了一個(gè)反重力設(shè)計(jì):No LSM。我們不再使用在目前開(kāi)源數(shù)據(jù)庫(kù)及大數(shù)據(jù)平臺(tái)流行的 LSM Tree(Log Structured Merge Tree)數(shù)據(jù)結(jié)構(gòu)。
一、簡(jiǎn)單介紹
TensorBase 是使用 Rust 實(shí)現(xiàn)的現(xiàn)代化實(shí)時(shí)開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)。
二、特性
- All in Rust。TensorBase 稱(chēng)已經(jīng)在日常測(cè)試中經(jīng)歷數(shù)十 TB 的數(shù)據(jù)注入錘煉,是目前 Rust 社區(qū)中,面向用戶(hù)特別是中小企業(yè)實(shí)際場(chǎng)景深度優(yōu)化的、生產(chǎn)完成度最高的通用數(shù)據(jù)倉(cāng)庫(kù)類(lèi)項(xiàng)目。
- 開(kāi)箱即用。TensorBase 已經(jīng)支持從數(shù)據(jù)插入或?qū)氲讲樵?xún)完整數(shù)據(jù)倉(cāng)庫(kù)流程,具備了較高的早期完成度,用戶(hù)可以從 TensorBase 的 Release 頁(yè)下載相關(guān) Linux 環(huán)境下的二進(jìn)制文件,進(jìn)行嘗試。(Windows 10 的 WSL2 目前應(yīng)該也可以使用)
- 兼容 ClickHouse 協(xié)議。ClickHouse 是一個(gè) C++ 編寫(xiě)的數(shù)據(jù)倉(cāng)庫(kù)。TensorBase 則使用 Rust 語(yǔ)言從頭開(kāi)始實(shí)現(xiàn)了一個(gè)高性能的 ClickHouse SQL 方言解析器和 TCP 通訊協(xié)議棧。ClickHouse TCP 客戶(hù)端可以無(wú)縫連接 TensorBase。
- 性能為先。TensorBase 期望通過(guò)新的軟件和系統(tǒng)設(shè)計(jì)將現(xiàn)代硬件的所有潛力發(fā)揮出來(lái)。TensorBase 首次在核心鏈路代碼上實(shí)現(xiàn)了 “F4”:Copy-free,Lock-free,Async-free,Dyn-free(無(wú)動(dòng)態(tài)對(duì)象分發(fā))。初步的性能評(píng)估顯示:在 14.7 億行的紐約出租車(chē)數(shù)據(jù)集上,TensorBase 的簡(jiǎn)單查詢(xún)的性能上已經(jīng)領(lǐng)先 ClickHouse。
- 化繁為簡(jiǎn)。目前的大數(shù)據(jù)系統(tǒng)使用非常復(fù)雜,即使想運(yùn)行一個(gè)最簡(jiǎn)單的系統(tǒng),都需要配置大量難以理解的參數(shù)或者安裝大量第三方依賴(lài)。
- 對(duì)于用戶(hù),除了現(xiàn)在已經(jīng)達(dá)成的開(kāi)箱即用,TensorBase 希望系統(tǒng)在運(yùn)行時(shí)能在自治運(yùn)行,而不是依賴(lài)運(yùn)維管理員。
- 對(duì)于開(kāi)發(fā)者,TensorBase 希望將貢獻(xiàn)門(mén)檻降低。整個(gè)項(xiàng)目架構(gòu)設(shè)計(jì)簡(jiǎn)潔高效(更多信息參見(jiàn)后文),項(xiàng)目外依賴(lài)很少,完全重新編譯(cargo clean 到 cargo build)的單機(jī)時(shí)間在 1 分鐘之內(nèi)。(大數(shù)據(jù)系統(tǒng)或者 C++ 數(shù)據(jù)庫(kù)的完整構(gòu)建時(shí)間往往以小時(shí)計(jì)。)
- 互聯(lián)未來(lái)。TensorBase 在核心上改造了 Apache Arrow 和 DataFusion,無(wú)縫支持 Arrow 格式查詢(xún)、分析和傳輸。Arrow 格式作為越來(lái)越廣泛采用的大數(shù)據(jù)交換中間格式,已經(jīng)被多個(gè)數(shù)據(jù)庫(kù)及大數(shù)據(jù)生態(tài)平臺(tái)所支持。TensorBase 在引擎上兼容 Arrow,未來(lái)可以同時(shí)支持云原生和云中立場(chǎng)景下的數(shù)據(jù)倉(cāng)庫(kù)體驗(yàn),提供存儲(chǔ)中立的數(shù)據(jù)湖服務(wù)。
三、架構(gòu)
- Base Server
- TensorBase 服務(wù)接口層。對(duì)外提供數(shù)據(jù)的接口服務(wù),比如數(shù)據(jù)的寫(xiě)入和查詢(xún)?nèi)肟凇ensorBase 創(chuàng)造性的實(shí)現(xiàn)了世界上第一個(gè)非 C++ 的 ClickHouse TCP 協(xié)議服務(wù)棧,可以支持 ClickHouse 客戶(hù)端(clickhouse-client 命令行)以及 native 協(xié)議語(yǔ)言驅(qū)動(dòng)的直接連接。同時(shí),Base Server 是第一個(gè) async 中立的 Rust 高性能服務(wù)器。Base Server 基于改造的 Actix 事件循環(huán),在服務(wù)的實(shí)現(xiàn)中完全不使用 async,在提供絕佳的可調(diào)試性的同時(shí),評(píng)測(cè)性能也大幅超過(guò)基于 tokio 默認(rèn) async 表達(dá)層的實(shí)現(xiàn)。未來(lái)可以引入非 tokio 的網(wǎng)絡(luò) io 層實(shí)現(xiàn)。
- Base Meta/Runtime/Storage
- TensorBase 的元數(shù)據(jù)層、運(yùn)行時(shí)層和存儲(chǔ)層。在存儲(chǔ)層,TensorBase 非經(jīng)典的列式存儲(chǔ)。這其中最重要的,我們給出了一個(gè)反重力設(shè)計(jì):No LSM。我們不再使用在目前開(kāi)源數(shù)據(jù)庫(kù)及大數(shù)據(jù)平臺(tái)流行的 LSM Tree(Log Structured Merge Tree)數(shù)據(jù)結(jié)構(gòu)。而是使用一種我們自己稱(chēng)之為 Partition Tree 的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)直接寫(xiě)入分區(qū)文件,在保持 append only 寫(xiě)入性能的同時(shí),避免了 LSM 結(jié)構(gòu)的后續(xù) compact 開(kāi)銷(xiāo)。得益于現(xiàn)代 Linux 內(nèi)核的支持和巧妙的寫(xiě)入設(shè)計(jì),我們?cè)谟脩?hù)態(tài)(User-space)核心讀寫(xiě)鏈路上不使用任何鎖(Lock-free),最大程度的發(fā)揮了高并發(fā)網(wǎng)絡(luò)服務(wù)層所提供的能力,可以提供超高速數(shù)據(jù)寫(xiě)入服務(wù)。
- Base Engine
- TensorBase 的引擎層。TensorBase 使用改造過(guò)的 Apache Arrow 和 DataFusion,并創(chuàng)造性的將底層存儲(chǔ)適配到 Arrow 格式,實(shí)現(xiàn)了 Zero Copy 的數(shù)據(jù)查詢(xún)。當(dāng)然,目前的適配性存儲(chǔ)策略,還只算是一個(gè)現(xiàn)在進(jìn)行中的次優(yōu)解,TensorBase 未來(lái)會(huì)對(duì)存儲(chǔ)層進(jìn)行持續(xù)迭代,提供更多與時(shí)俱進(jìn)的優(yōu)化。同時(shí),TensorBase 也將進(jìn)一步地優(yōu)化幫助 Arrow/DataFusion 社區(qū)優(yōu)化其查詢(xún)引擎的性能,和社區(qū)一起成長(zhǎng)。
- 其他
- TensorBase 還有一些基礎(chǔ)性的組件,比如:
- base,通用工具庫(kù);
- lang,語(yǔ)言層(目前主要實(shí)現(xiàn)一個(gè) ClickHouse 兼容解析和表示層)。
- lightjit,類(lèi)表達(dá)式 JIT 引擎,未來(lái)可擴(kuò)展至高性能和安全可控的用戶(hù)定義函數(shù) UDF(User Defined Functions)層。 TensorBase 未來(lái)將進(jìn)一步開(kāi)發(fā)和開(kāi)放自己的高性能基礎(chǔ)件,為 Rust 社區(qū)貢獻(xiàn)一些獨(dú)特的高性能可復(fù)用基礎(chǔ)設(shè)施。
注意,架構(gòu)圖中的虛線(xiàn)連接尚未實(shí)現(xiàn),這是一個(gè)全景式的架構(gòu)藍(lán)圖。
責(zé)任編輯:武曉燕
來(lái)源:
今日頭條