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