作者:京東云 賈世聞
最近想看看 rust 如何集成 clickhouse,又犯了好吃懶做的心理(不想自己建環境),剛好京東云發布了兼容ck 的云原生數倉 Starwfit,于是搞了個實體折騰一番,
Starwfit 是京東云自主研發的新一代云原生資料倉庫,通過存算分離降低了存盤成本,同時兼具性能和擴展彈性,其寫入和查詢速度可達到傳統資料倉庫的數倍,為用戶提供實時資料分析能力,廣泛應用于流量分析、精準營銷、用戶畫像、廣告實時競價、BI報表分析、日志分析、促銷選品、物聯網等業務場景,
言歸正傳,看看 rust 如何與 starwift 打交道,
創建集群
- 登錄控制臺,直接選配創建即可

- 創建用戶

- 開啟白名單
為了保證starwift能夠被外部資源訪問需要開啟白名單,默認情況下新創建的實體只有該實體所在vpc下才能訪問

為了方便,實驗環境直接編輯 default 分組,編輯 ip 串列為 0.0.0.0/0,對所有ip開放,在實際生產環境需要根據實際情況配置白名單避免安全問題,
- 開啟公網連接
為了實驗方便,開啟公網訪問域名便于開發和測驗

mac客戶端安裝
-
安裝客戶端
macos 客戶端安裝
curl -O 'https://builds.clickhouse.com/master/macos/clickhouse' && chmod a +x ./clickhouse其他客戶端安裝 參見 clickhosue 官方檔案
-
測驗連通性
clickhouse client --host service-terrabase-9s29mdlsb7. terrabase-9s29mdlsb7-hb-public.jvessel2.jdcloud.com \ --port 9000 \ --user sample \ --password xxxxxxclickhouse:) show databases
rust 連接 starwift
starwift 支持 tcp 和 http 兩種協議連接server,下面我們分別給出兩種方式的示例代碼
-
tcp 連接
-
依賴 crate
# clickhouse tcp tokio = { version = "1.21.2", features = ["full"] } clickhouse-rs = { git = "https://github.com/suharev7/clickhouse-rs", features = ["default"]} -
示例代碼
use clickhouse_rs::Pool; #[tokio::main] async fn main() { let database_url="tcp://username:password@service-terrabase-9s29mdlsb7.terrabase-9s2mdsb-hb-public.jvessel2.jdcloud.com:9000?compression=lz4".to_string(); let pool = Pool::new(database_url); let mut client = pool.get_handle().await.unwrap(); let sql = "show databases;"; let r = client.query(sql).fetch_all().await; println!("result is: {:?}", r); }
-
-
http 連接
-
依賴 crate
# clickhouse http clickhouse = {git = "https://github.com/loyd/clickhouse.rs", features = ["test-util"]} -
示例代碼
use clickhouse::Client; use clickhouse::Row; use serde::{Deserialize, Serialize}; #[derive(Debug, Row, Serialize, Deserialize)] struct Database { name: String, } #[tokio::main] async fn main() { let client = Client::default() .with_url("https://service-terrabase-9s29mdlsb7.terrabase-9sdlb7-hb-public.jvessel2.jdcloud.com:8123") .with_user("username") .with_password("password"); let sql = "SHOW databases"; let r = client.query(sql).fetch_all::<Database>().await; println!("result is: {:?}", r); }
-
測驗程序中,遇到了依賴沖突問題,clickhouse-rs 和 clickhouse.rs 同時依賴了 clickhouse-rs-cityhash-sys 但依賴方式不同,導致編譯不通過,下一期詳細聊聊踩坑及爬坑程序, 再次感謝京東云資料庫團隊提供的 starwift 測驗實體, 下期見,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543177.html
標籤:其他
