#153 chDB: In-Process ClickHouse 引擎【Go 夜讀】
Golang Learning |【Go 夜讀】#153 chDB: In-Process ClickHouse 引擎
chDB 是一個由 ClickHouse 驅動的嵌入式 SQL OLAP 引擎。通過 chDB 你可以將功能強勁的 ClickHouse 引擎嵌入到應用中,無縫利用ClickHouse 強大的數據處理能力。
chDB 目前已經加入 ClickHouse Team,已經有 Python、Golang、Rust、Bun、Nodejs、.NET在內的多個 bindings。
大綱
1. 數據庫生態概覽
2. chDB 概覽自行車上的火箭引擎
3. chDB 的工作原理
4. chDB 的特性和 Use cases
5. chDB 的發展路徑和展望
分享者自我介紹
- Technical Director of ClickHouse core team
- Principal Engineer in Shopee (DB for RecSys)
- Former CTO of SensesAI (Big Data Platform for Banking)
- Former CTO of CovenantSQL (Decentralized Database)
- Former Director of SaaS in 4Paradigm (RecSys and AI Decision Making)
- Worked at Baidu, 360, Douban
https://talkgo.org/t/topic/5528
#go #golang #learning #Go夜讀 #talkgo #night #chDB #clickhouse
首先很高興大家來參加今天構業組第153期的分享
今天我們組織是KP house的一個
Go相關的一個分享
那我們今天的分享嘉賓是Austin
那接下來的話就由Austin給我們帶來今天的分享
哈嘍大家好
然後也很高興這個楊老師來邀請我做這個分享
然後我今天分享的是一個叫CGTB的一個項目
然後CGTB這個項目呢
然後我一個背景就是說
現在已經是在ClearHouse整體的這個大家族裏面了
然後也是今年大概
應該是在三月份的時候被收購了
然後CGTB呢
它是一個in-process的一個ClearHouse引擎
in-process就也有人在說它是叫embedded
就是嵌入式的引擎
那後面我就給大家介紹一下這個CGTB
然後CGTB的相關的一些包括介紹
包括它的一些特點
包括跟Go的生態的一些結合
然後對
然後我就開始
然後先簡單的做一下自我介紹
然後我網名叫Austin
然後呢
主要就是這個鳥的這個紫色頭像比較多
然後對在直播上做了一個叫什麼面線工資編程
可能也有很多人關注
然後主要來說
可能比較擅長在這個推薦系統和數據庫
這個兩個方面去做一些事情
然後做了很多年
然後目前是在ClearHouse的這個核心開發的這個Core Team
擔任這個技術總監這麼一個職務
然後之前是在Shopit擔任Principal Engineer
然後在Shopit做的就是一個DB for Rexis
就是給這個推薦系統做數據庫的一個定製數據庫的一個項目
然後呢
在之前是在兩家創業公司
一個叫Synthesis AI
然後我另外一個叫Covenant Circle
一個是做這種銀行的這種大數據平臺
還有就是Covenant Circle是一個這個去中心化的一個數據庫
然後都在這兩個公司擔任CTO
然後在之前就是在這個第四方室去做SaaS相關的東西
當時就是做這個推薦系統和AI decision making的相關的AI
然後在之前就是可能也在這個百度啊
360豆瓣工作
個人就是特別喜歡做開源
然後也是到處做代碼貢獻
然後也是所以是ClearHouse
經營Malloc
K8s
MirrorCache
Crossroads DB
Superset的這個代碼貢獻者
當然還有一些各種各樣小項目
然後目前來說做的比較多的這個新的兩個項目
一個就是CSTB
現在看好像是1.7K的新
然後Covenant Circle大概1.5K的新
右下角是這個CSTB的每個域名
大家趕緊去看
然後就開始做這個這個相關介紹
然後可能首先帶大家回顧一個問題
就是說很
我不知道大家心目中
就是說目前來覺得
世界上這個Running的Instance最多的數據庫是什麼
然後可能羅列一些像MySQL
PGE
Oracle
Circle Server
Redis
然後Electic
Mongo
ClearHouse
但其實來說
這幾個數據庫都遠遠趕不上
他們加起來的這個Instance的數量也趕不上這個第一
那第一就是CircleLite
然後之所以要提CircleLite
就是CSTB在某種程度上
它跟CircleLite是比較像的一個項目
就是你像我們左邊這些白色這塊的數據庫
都是需要有一個單獨的一個Server
然後提起來之後呢
提供一個網絡服務
然後去訪問
但是CircleLite它是一個自己沒有什麼
其實它也有獨立的運行
但是大家通常來說都是把CircleLite嵌入到自己的代碼裏頭
去做相關的一些事情
包括爲什麼它運行時餘比較多呢
基本上我們安卓系統的每一個這個APP都帶一個CircleLite數據庫
然後IOS也帶
然後包括Chrome也帶了CircleLite
基本上一般這種小型的這種需要Circle語言的查詢
什麼相關的東西都是可以在用CircleLite
CircleLite也是一個老兵了
然後在這個行業內也是好幾十年了
用的非常廣
然後呢
但是如果面臨大數據的時候
CircleLite可能就有點力不從心
所以我就後面就做了一個一個小的工具叫CCTB
然後我們內部呢
就打了一個比喻
就是CCTB它本質上有點像是一個
把一個這種火箭引擎安到自行車上的一個項目
火箭引擎當然就指的Clayhouse這個引擎
然後Clayhouse也是一個
在國內可能也說
也認爲是這個
知名度還比較高的
然後可能沒有做過完全精確統計
如果是講的開源的LAP引擎來說
可能Clayhouse運行實力數在全世界範圍內應該是最多的
然後
然後自行車就指的Python
然後這個項目就主要是把Clayhouse引擎給它脫離出來
然後在這個Python裏頭能方便進行運行
然後
整體來說呢
做完這個東西
它就是一個整體可以做成一個serverless的這麼一個數據庫
就不需要去起一個server
然後再去把socket連上去
就可以直接做售後查詢
然後呢
還有就是因爲它是基於Clayhouse的
所以說目前來說
這個版本還是基於這個Clayhouse 23.10這個項目
對這個這個版本去做的
然後支持這個Clayhouse的這個這個版本的所有的這種方式和commit
Clayhouse本身呢
它這個相關的這個function
commit的支持是非常非常豐富的
就各種各樣的這種這種處理數據的函數啊
包括從什麼項量查詢啊
到什麼GEO的這種地理數據啊
包括各種各樣的這種數學的東西都是做了非常多的一個函數
然後這些函數還都是做了這種線下化加速的
然後
commit方面講呢
它就支持了更多了
可能很多人對Clayhouse的一個印象
就是它是一個很快的一個數倉
但其實來說
Clayhouse能把很多很多的東西當成一個表去做查詢
包括比如說把遠端的一個MySQL啊
PGE啊
甚至直接去讀寫SQLite的數據
甚至直接對着這個SQL dump去查
或者說對一個遠程的Clayhouse去查都是可以的
因爲它本身把它抽象成表
所以說你可以做一個非常fancy的
比如說把Clayhouse的一個表跟一個SQLite的表
跟一個CSV進行一箇中文
這都是可以做的
然後呢
CSSDB當然像這個東西之後
也是支持Python的這個DBAPI 2.0
還有DataFrame
DataFrame本身這個可能基本上
樹立科學的一個這個繼承的一個一個標準吧
然後也支持這種這個stateful的這種相關的query
比如說就是我各種各樣的這種查詢
可以做成一個不保存歷史的
也可以做成一個保存歷史的
就像一個SQLite一樣
然後呢
基本上也是做了非常多東西
去儘量減少從C++到這個Library的這個Binding的一個影響
當然來說
我們支持最多的一個Binding還是Python比較多吧
因爲現在數據科學可能比較火
然後呢
就是Go
然後就是Rust
NodeJS
BU1
甚至Donate我們也支持
然後呢
其實有一些這個項目的背景
我就後面可以再介紹一些可能偏技術方面的
然後
這有一篇文章是在我的個人的博客上
就是講這個FaceDB的一個誕生
當然說這個本身License是一個AlphaJS 2.0的License
然後大概的原理其實可以看這個右邊這個圖
這個圖來說呢
我們用起來非常簡單
就你Python的庫或什麼的直接就Python stop
Go就是Go get就能拿下來
然後呢
進行一個直接調用裏頭的Query函數
就能直接做Circle查詢
然後本身這個原理很簡單
其實通過一些PyBind或者說這個Go就是Circle
去把這個Circle傳到這個一個C的一個QuerySymbol函數里
然後這個QuerySymbol函數呢
就去運行Clickhouse引擎去做相關查詢
查詢完了就把這個QueryResult一個指針返回回來
然後在各種語言裏頭再解析這個結果
然後呢
所以可能在數據庫的項目
大家可能第一反就是那CRTD到底性能怎麼樣呢
然後我們這個之前做過很多測試
Clickhouse有一個著名的叫Clickbench的這麼一個測試
就是包括這個左邊截圖右邊截圖都是Clickbench的
然後呢
我這裏頭有非常多的數據庫相關的一些速度的這個對比
基本上從CircleLite到Oracle到這個各種各樣的樹倉啊
甚至是這個
MyCirclePG都在這裏頭做了相關的一個測試
然後呢
目前來看
其實Clickhouse就是CRTD基本上速度
它是跟Clickhouse是能直接就拉平的
沒有任何的一個相關的一個這個這個性能的一個比較大的損失
然後比較特別的一點呢
就是說它的本身它是因爲是一個比較嵌入式的一個引擎
所以說它直接集起來之後
不需要去加載數據直接就可以查
然後我們做過這個相關測試
比如說在這種大量的這種Parquet的數據
比如放在S3上
然後或者不放在本地進行查詢的過程中呢
基本上這個CRTD目前來說是可以
之前應該是第一塊
然後現在可能有一些這種變動
基本上還是能保持在前三的一個範疇之內
這相關數據可以在Clickbench那個網站上去查一下
然後就是可能對大家也是個技術分享
所以說給大家詳細介紹一下
就是這個CRTD具體是怎麼工作的
其實剛開始也說了
其實就是把這個Circle傳過來
然後進行個查詢
然後在在各種語言裏頭呢
儘量用這個Zerocopy這種相關的技術
去做一個這個相關的人數據
從C++的這個這個清晨空間裏頭
內存佈局裏頭傳到另外一個語言的內存佈局裏頭
然後在Python裏頭是用的是Python的memory wheel
Cgo裏頭呢
就是用的這個應該是Cgo相關的一個東西
去儘量減少一個對一個數據的拷貝
然後
當然這個項目本身呢
其實有非常多的一些黑魔法在裏面
然後給給大家介紹一下相關的黑魔法
當然這個這個就涉及到非常多的可能非常底層的一些東西
就是大家也就聽我囉嗦幾句
然後看PGT就突然變成黑色
因爲這裏頭非常多的黑魔法
然後
當然做完這個東西之後呢
其實就面臨着剛開始我們就面臨着一個性能問題
當時呢
因爲本身這個CRDB它是做一個動態連接庫的一個存在
我們用go的時候
其實go當然說大家都喜歡靜態連接庫
因爲就可以購物的東西
大家都喜歡編成一個單一二進制
但是由於它這個本身的這個限制呢
由於我們在鏈接層面用了一些黑魔法
所以說目前CRDB go還是依賴這個libcrdiso這麼一個安裝
然後不能把這個東西直接編到這個二進制裏
然後
然後這是一個限制
然後說到這個我們當時遇到一個問題
Claybench裏頭有一個著名的query23
query23是一個比較變態的一個查詢
他大概做的事情就是說
把一個非常大的一個字符圖串做一個這種這個正格查詢
去找一個相關的這個
就大家可以看到大概這個地方
對這個地方大概是這麼一個查詢
就是找這個在google的這麼一個字樣的這麼一個查詢
然後直接這個查詢
當然我們是對着本地的一堆博弈數據去做一個相關查詢
然後
之前我們做這個東西的時候呢
由於本身如果大家瞭解基因MLOC的同學知道
基因MLOC是一個非常有名的一個內存分配庫
他可能跟TCMLOC都是比較用的比較多的
然後包括比如說這個python本身也是內置基因MLOC
然後rocksdb什麼都是內置基因MLOC
去優化這個內存的分配和這個相關速度
然後但是呢
有這麼一個問題
就是一般大家用基因MLOC的時候呢
一般都會把它放到最後一個鏈接的庫裏
因爲它必須要去覆蓋掉系統的這個相關的這個MLOC可以使用
然後由於本身的這麼一個特性
所以說一般來說建議我們不能把基因MLOC放到盾的鏈接庫裏頭
而且更說是python裏頭也自己帶了基因MLOC
這樣你進去會導致裏頭的非常這個混亂的一個結果
但是呢
我們剛開始第一個版本沒有去練基因MLOC
然後當時大概在query23上
大概典型的一個我們當時硬件配置大概要查55秒
然後呢
如果你去比如說在python運行的時候
直接把基因MLOC強制的給他用那個LD preload加載進去
然後再去再去運行
或者說直接用clickhouse local去運行
大概就18.7秒
那所以說我們就面臨一個問題
就是你不去把基因MLOC直接加到這個庫裏頭呢
那就是55秒
然後弄如果能把弄就是18秒
所以說就做了非常多的一個嘗試
嗯嗯
先說一下我這裏頭有很多背景啊
首先就是clickhouse這個東西
它非常非常大
就是裏頭放了非常非常多的數據庫的這種連接的這個庫
還有各種各樣的函數
還有各種各樣的數據的支持
包括從decimal到float
甚至比如intel256這種很變態的這種數據
他都支持
然後呢
他爲了加速這個數據的查詢
當然用了很多現代化的東西
當然還做了相關的
用了這個LLVM去做JAT
然後呢
嗯
這個他目前來看當時在23.10這個版本已經有100個thumb module
現在應該更多
應該將近120個thumb module
就是他這個整個代碼量非常非常大
如果你不去算他練的第三方的thumb module
你還去做一些簡單統計
大概就能看到他的代碼量來說是大概96萬行的一個代碼
就就那麼這個大概45個有100萬行的代碼
所以說你如果如果我去爲了chtp把他引擎全部改很多
我基本上一個人是搞定的
還有就是
clickhouse呢
爲了他的一個很強的兼容性
就是他現在你去Github上看
他的發佈基本上都是都是一個二進制
這二進制兼容性非常好
大概你從Thunderbolt S6到現在最新的什麼Ubuntu 24
他這個二進制都能直接運行
只要你CPU架構不對
你沒有錯
他都能直接運行
爲了達到這個clickhouse裏頭
還鏈接了一個完整的一個Lever C
包括這個Lever C++
所以說這就導致裏頭更多的一個問題了
就是你因爲鏈了這麼一個Lever C和Lever C++
導致呢
你去往裏頭放GeneMalloc的時候就會導致
你得想方設法的去把他相關的這個Malloc的東西全部劫持掉
才能把它搞定
還有就是剛纔說到了Python Runtime也帶一個這個本身的這種
他自己要自己的這個Lever C相關的東西
然後呢
裏頭也帶了個GeneMalloc
這個非常麻煩
然後當時用了一個辦法
就是我們在C++裏頭呢
把每一個這種GeneMalloc的函數加了個viper
就是因爲本身的這個C++在鏈接時候呢
支持這麼一個參數
就是用這個WL
然後vipMalloc
就這麼一個函數就是倒鎖這個鏈接器
在最後鏈接的時候呢
如果發現有個叫Malloc的這個字符
就把它直接轉化成這個叫下滑線下滑線vipMalloc的這麼一個東西
然後呢
用了這個東西之後呢
相當於是我就能在鏈接過程中的把裏頭
如果代碼層次叫Malloc的東西
直接就全部轉到這個vip的版本上
然後我就能顯示去叫GeneMalloc了
然後呢
大概就這麼一個東西
但是呢
看上去好像很好
但是就發現一個非常嚴重的問題
就是這個程序這麼弄完之後呢
時不時會崩
然後呢
崩我最後看它主要崩的點還是在gefree這個地方
主要的原因是什麼呢
就是看這邊這個圖
就是本身來說呢
因爲本身這個動態鏈接庫
它是在python import的時候去把這個庫給它加載進去
加載進去之後呢
當然這個說的python的東西比較多
但是其實各種語言東西都是比較通用的
我去加載完之後呢
本身因爲python在運行這個CSTB之前
它肯定已經把Glibc加載進去了
然後呢
我去雖然把底頭這些輔勵全都劫持到這個GeneMalloc
弄到GeneMalloc上
但是呢
由於有些問題
比如說我在Glibc++
有時候會掉一個系統的Glibc函數叫getcrd
這個函數非常就是非常明白
這就是拿現在的working directory這麼一個函數
它這個函數非常變態
一般來說呢
我們比如說C的函數來說都是可能我去在外頭
比如分配堆內存把指針給他
然後他在裏頭去寫把結果拿過來
這是用的比較多的
或者說直接返回一個站上內存
但是呢
getcrd這個東西非常變態
這個函數的Glibc標準實現裏頭
它掉Malloc
然後把這個結果用這個Malloc的這個堆上內存給你返回來
然後這就導致了呢
就是我去掉getcrd會獲得一個堆上內存
然後呢
最後去釋放的時候呢
由於我把free劫持了
所以就會掉gefree
掉gefree之後呢
因爲geMalloc發現哎
這內存不是我搞的呀
那我就就直接崩了
然後他也不去做任何這個別的檢查
因爲這個檢查可能就會浪費很多性能
所以geMalloc這種非常底層骨頭不會做
這個很蛋疼
然後呢
就這個事
我大概可能花了很長時間去解決這個問題
嗯
最後一個辦法呢
就是用了這麼一個辦法
就是我去在free的時候呢
我去檢查一下這個free
這個我要free的這個指針是不是自己分配的
然後呢
當然這裏頭寫了一堆東西
這頭就是當時還遇到另外一個問題
就是geMalloc呢
他沒有一個特別好的一個辦法去去查
就是這個內存到底是不是我分配的
然後呢
就是這就嗯
這有這麼一個叫geMallocctr這麼一個東西
然後呢
嗯
這個這個東西geMallocctr這個東西去去用這麼一個叫arena lookup
去查這個相關
就說查這個東西是不是我分配的
這個函數非常奇怪
如果不是他分配的
他直接會給你拋個異常出來
然後就就就導致這個函數其實沒法用的
就是我當時覺得這個這個東西非常非常變態嘛
就是你這麼一個函數
如果發現不是自己分配的
我本來就是查
然後你查不是自己分配的
還拋異常
或者直接給你弄個fatto出來
就直接到內存就是這個系統就崩了
然後呢
嗯
所以我覺得這個東西不是很合理
所以我就去看geMalloc的代碼
就是把這個函數給他改了點
就不讓他這個發現不是自己分配指針
就把他就就直接拋異常或什麼的
當然就發現
比如說不是自己這個不是自己分配的
就用這個real的這個free去
然後如果是的話就用這一free
所以說我就給geMalloc提了個patch
就是大概就是這個patch的號
應該是在GitHub能查到是2424這個號
就是這個title就叫make,run,lookup,ctr,travel
然後提完之後我就沒管
然後過了一陣之後
他們還真把這個給合併了
他們也覺得這個東西非常不合理
所以說我就就變成了這麼一個geMalloc的configurator
這個也是讓我非常覺得非常神奇
因爲這個大家都知道這種非常底層的庫
這個代碼寫的是非常非常扭曲的
你看起來非常非常費勁
然後呢
也非常難以去發現什麼bug
然後能成爲他的configurator
也是可能給我高興了好幾天
然後還把朋友圈大吹特吹了一下
然後做完這個東西
基本上這個就大概就解決了這個相關的這個去用geMalloc的問題
然後呢
用完這個東西之後呢
我們最後就能看到這個結果
就是我們在query23上就是做這麼剛纔一個這個去做這個所有相關的
就是跟Google相關的這麼一個URL
這麼一個搜索查詢的這個快了三倍
然後還有個非常神奇的一個點啊
這個是我遠遠沒有意料到的
就是你們可能用geMalloc的人可能會知道
geMalloc這個庫呢
他去做內存分配
一般來說
可能我們普遍的認知呢
比如系統的這種ptmalloc
他是可能比較分配內存比較這個省
但是他速度可能比較慢一點
但是呢
我們發現geMalloc用了之後
我們讓clearhouse引擎這個這個內存使用量直接下降了50%
所以說geMalloc這個庫呢
他他就有一個非常神奇的點
他又能夠讓程序變快
還能使用的內存變少
這個非常厲害
所以說我們弄完這個東西之後
當時去Claybench上去測
大概我們就能看到這個鏈接
就是這個這個Circle on Parquet的這麼一個東西
就直接在Parquet上跑Circle這種引擎
我們在裏頭做完測試就發現這個CSDB
就是他應該是已經是最快的一個方案
然後我們看這個當時這這樣一個截圖
當時看到這個猛一看
好像DarkDB比CSDB要稍微快一點點
但是你看到這個地方就是這個load time
這塊就知道他達成這麼一塊速度
他是每回去做這個Bench之前要花大概500多秒時間去把數據加載一遍
不過我們根本不需要加載
你就直接查
他就能直接出結果
就不需要去把Parquet什麼導入數據庫直接去查
所以說我們這個目前就看到CSDB
他應該是在Circle on Parquet最快的一個方案
對
然後
具體來說CSDB能幹些什麼呢
當然來說第一個場景非常非常直白
就是說如果你現在要寫一個應用
然後這個應用他要處理大量數據
你如果用Circle Lite發現扛不住了
那你可以試試CSDB
然後可以用他本身的MultiTree引擎
也可以用這個Circle Lite本身的這個存儲去存儲
然後你就會發現其實他的速度會快很多
特別是Circle越複雜
他會越快
還有就是我當時這個項目發佈之後
有很多的人就給我提了很多相關的一個需求
然後也跟他們聊
他們都拿CSDB在幹什麼
包括很多的一個
包括有一個老哥跟我說
他有一個我覺得非常神奇的一個應用場景
他是這樣
他想拿CSDB
就是他們線上了有Clickhouse一個集羣
然後由於本身的線上一直在寫入數據
所以說Clickhouse集羣他就不能停
但是呢
查詢方面的一般來說
可能上班的時候數據科學家或者做數據分析
他可能要去那做各種query
但下班時候其實就沒有什麼這個相關query了
就他是拿這樣
他拿Clickhouse server去寫數據
拿CSDB直接去讀Clickhouse server的數據
但這裏頭因爲有個鎖需要去稍微改一下
然後去做這麼一個東西
所以說他相當於是有用戶查詢的時候
他會把這個東西直接當成庫齊起來
沒有用戶查詢的時候
其實就不需要起server
還有就是能去非常大大的減少這個使用
當然剛纔也提了
就是能用的時候再去齊起來
你比如說放到現在國外很多這種lambda函數
包括這個Cloudflare
包括這個Warsaw
這些都有這種雲lambda函數
包括AWS的lambda
可以直接放上去
然後去做一個server
就是說你可以像是查詢的時候
把這個引擎集起來
查完就直接扔掉
就是急用急拋的這麼一個引擎
然後就是做這種real-time analytics
因爲剛纔也提到就是你現在的這個收藏LIP
現在有一個比較大的一個趨勢
就是能把數據往這種相對比較便宜的S3上去存
然後查詢的時候直接查S3
不需要不去寫本地硬盤
然後做成一個存存分離的架構
然後
你去用chtb也可以直接去查S3
包括一些公開數據
你甚至都不需要去自己去存
然後呢
還有一個比較好的一個點就是你去做一個非常快的一個prototype
這個其實來說是目前用的最多的一個點
就是很多人呢
其實在notebook裏頭
包括這個像Google的colab
在notebook裏頭直接pipe install這個chtb
然後去做數據科學相關的一些東西
然後包括你在你的本上去做一些notebook
去虛擬大模型
虛擬模型都可以拿chtb去做
其實本身那個chtb最開始也是爲了當時我在燒幣的時候去解決
我們醫學系平臺部門的一個數據的一個問題
去做了一個業餘項目
然後也也沒想到就是現在這個
最後來這個也是一個比較體育
嗯
然後呢
目前來說呢
我們現在有各種各樣的版頂
包括Python
Golang
Rust
Node.js
B1
Node
這個都都是可以用的
嗯
Golang怎麼用了
就直接就import了這個這個這個相關chtb這個庫就能直接用了
然後簡單就是這麼直接就是chtb carry就ok了
當然來說不知道不說一卷
就是你去看一下github
就是我需要先去把這個庫裝一下
然後才能去用這個相關東西
因爲本身它是一個動態庫
現在嗯
然後呢
嗯
現在的chtb基本上應該說有各種各樣語言的支持
然後用的場景來說
比如說在數據科學
包括在這個XRDBT
之前看到有一個老哥開了個項目
在XRDBT的這個市場上想去用這個這個chtb去做相關查詢
就是跑到Lambda上
當然這個我從github上的一個一個用戶的一個上報
我還知道有人直接已經把這個chtb用在安卓設備上
就直接把它當成安卓上的一個嵌入式數據庫在用
然後嗯
chtb呢
現在有一個chtb-go的一個binding
它本身也是可以做成一個命行去去用
呃
用了呃
就做提供了非常方便的一個一個查詢的一個一個接口
比如說chtb-go
你直接go install上來之後呢
就可以去做一個簡單查詢
比如select123就可能123
當然我這幾個簡單就就選了非常簡單circle
然後可以去設定一下我返回什麼樣的這個數據格式
這個數據格式支持的非常非常多
包括什麼你直接寫成parquet
寫成csv啊
寫成各樣各樣的python列存
包括circle dump
或者直接這個寫成一個insert mycircle的這麼一堆的語句
這都是可以的
然後你直接運行的話
就可以進入一個interactive的一個一個一個模式
就直接能去做這個交互式的相關一個查詢
然後呢
去指定一下pass之後呢
將是我就可以把查詢和插入的各種各樣數據去保存到這個文件夾之後
然後我下回用這個文件夾去打開之後還能看到上回的結果
讓這個項目的地址就在這裏
然後呢
還有還做了一個小小demo
就是我基於chtb-go呢
做了一個小小小的一個一個all-in-one的一個web console叫chtb-server
這個東西能幹啥呢
就是他我把這一個一個頁面
就是一個一個小的查詢頁面放進去了
然後我直接提起來之後呢
在瀏覽器可以打開這個8123這個端口直接打開之後呢
就可以起個這個瀏覽器的一個頁面
然後在這裏頭去去寫搜索去各種各樣查詢都是非常方便的
那包括查詢遠程的數據啊
包括去查詢本地數據都是非常簡單的
當然之前也說了
這個知識的格式是非常非常多的
你可以去Clehouse的官網查詢
知識的格式上百種
包括比如說remote支持https3
各種各樣的oss就是object storage
然後pt circle
然後my circle
Clehouse server等等這些查詢
然後就是我簡單說一下
這個chtb當時怎麼一個過程的一個過程吧
就是我應該是在2023年
就去年的二月份的時候去纔開始做這個項目
當時應該是過年
然後跟我媳婦回東北
然後東北特別冷
我就不想出去
在家裏做這個項目
然後大概做了大概兩週
把這個東西做了一個原型出來
然後後來整理整理
大概在五月份的時候去做了一個發佈
發佈完之後呢
就就非常快的一個速度
然後就各種各樣的關注
然後基本上就很多人來去提了各種各樣的feature
然後大概在2023年12月份就達到了大概一千新人
然後也發佈了1.0這個版本
然後呢
2024年3月份的時候就就被clehouse收購了
我現在也加入了clehouse
我這個也是在clehouse相關的這個官網上查到相關的一個blog去說這件事
然後呢
對這就是那個blog的一個截圖
就叫chtb-join the clehouse family
然後呢
後面可能就是加入clehouse之後呢
我們會持續的在這裏頭進行的投入和發力
包括去做各種各樣的這種場景
包括這個積極學題相關的東西
包括去各種各樣的語言的binding
然後
當然開發項目
所以說也非常歡迎大家來去做各種各樣的貢獻
然後這個discount的鏈接在這兒
然後呢
也也也非常歡迎大家來給我們加一個新人
然後呢
我們現在比較需要的是什麼呢
當然如果你懂cc++的話
當然最好能去幫我們一塊去做一些這個相關的一些比較核心的一些東西
但如果其實你如果你不會cc++
這也沒關係
然後因爲現在的binding非常多
這裏頭binding有非常多的一個一個東西需要做
golang呢
我做的比較簡單
然後現在來說golang的那個
CircleDB的那個那個實現
我做了一個非常簡單的
可能還有些問題
需要大牛來幫忙看一下
加瓦的binding應該還沒有
然後就是包括大家在各種社交網絡上也可以去這個討論CircleDB
然後
然後就是這個相關的一些資源
包括我們的一些文檔
doc.circle.io
然後呢
就是相關的這個circle
就你去看Clickhouse的circle reference就可以
然後就是檢測CircleDB的一個歷史
然後就是這個相關的一些demo
包括我們這個project documents裏頭
還有這個usage的example裏頭
還有相關的非常多的collab的一個就是一個公開notebook裏有非常多的example
然後
當然剛剛提到這個Clickbench上的一個性能對比的一個測試
這都可以看到
然後也可以在我的郵箱
然後我的Twitter
然後還有各種各樣的社交媒體都可以在
大家可以掃這個碼
你都可以來加我
然後如果你這個你微信想加的話也OK
然後微信直接搜這個aoxtn也能找到我
基本上這個在網上搜aoxtn都是我
對
然後我的介紹基本上就到這
那個
好
謝謝
謝謝阿鴻的這個分享
然後看線上的夥伴有沒有什麼問題
對
然後剛剛其實all-in-one這個ZDB的server
這個應該還是沒問題
大家也可以去試着玩
看大家有沒有什麼問題
包括說對這個沙漠
剛剛分享到的部分
我們等一下看大家有沒有問題
OK
如果大家沒有問題的話
就是今天我們主播就先到這裏
對
然後後面的話大家也可以去看這個項目
對
然後這個項目也是開源的
大家都可以直接去看到
對
然後也可以去試用
好吧
那我們的分享今天就到這裏
謝謝分享
謝謝大家的參與
好
謝謝大家
好
拜拜

