Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122803
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1655
  • 用 户 组: 普通用户
  • 注册时间: 2022-09-26 14:37
文章分类

全部博文(165)

文章存档

2024年(2)

2023年(95)

2022年(68)

我的朋友

分类: 云计算

2023-02-07 10:36:47

作者:京东云 贾世闻

{BANNED}最佳近想看看 rust 如何集成 clickhouse,又犯了好吃懒做的心理(不想自己建环境),刚好京东云发布了兼容ck 的云原生数仓 Starwfit,于是搞了个实例折腾一番。

Starwfit 是京东云自主研发的新一代云原生数据仓库,通过存算分离降低了存储成本,同时兼具性能和扩展弹性。其写入和查询速度可达到传统数据仓库的数倍,为用户提供实时数据分析能力。广泛应用于流量分析、精准营销、用户画像、广告实时竞价、BI报表分析、日志分析、促销选品、物联网等业务场景。

广告打到这里,言归正传,看看 rust 如何与 starwift 打交道。

创建集群

  1. 登录[控制台](),直接选配创建即可


2.创建用户


3.开启白名单

为了保证starwift能够被外部资源访问需要开启白名单,默认情况下新创建的实例只有该实例所在vpc下才能访问


为了方便,实验环境直接编辑 default 分组,编辑 ip 列表为 0.0.0.0/0,对所有ip开放。在实际生产环境需要根据实际情况配置白名单避免安全问题。

4.开启公网连接

为了实验方便,开启公网访问域名便于开发和测试


mac客户端安装

1.安装客户端

macos 客户端安装

curl -O 'https://builds.clickhouse.com/master/macos/clickhouse' && chmod a +x ./clickhouse

其他客户端安装 参见 [clickhosue 官方文档](
)

2.测试连通性

 clickhouse client --host service-terrabase-9s29mdlsb7.terrabase-9s29mdlsb7-hb-public.jvessel2.jdcloud.com \ --port 9000 \ --user sample \ --password xxxxxx
clickhouse:) show databases

rust 连接 starwift

starwift 支持 tcp 和 http 两种协议连接server。下面我们分别给出两种方式的示例代码

1.tcp 连接

依赖 crate

# clickhouse tcp tokio = { version = "1.21.2", features = ["full"] } clickhouse-rs = { git = "", 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);
} 

2.http 连接

依赖 crate

# clickhouse http clickhouse = {git = "", 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("")
    .with_user("username")
    .with_password("password"); let sql = "SHOW databases"; let r = client.query(sql).fetch_all::().await; println!("result is: {:?}", r);
}

测试过程中,遇到了依赖冲突问题,clickhouse-rs 和 clickhouse.rs 同时依赖了
clickhouse-rs-cityhash-sys 但依赖方式不同,导致编译不通过,下一期详细聊聊踩坑及爬坑过程。

再次感谢京东云数据库团队提供的 starwift 测试实例。

下期见。

阅读(305) | 评论(0) | 转发(0) |
0

上一篇:Backbone前端框架解读

下一篇:一文搞懂Redis

给主人留下些什么吧!~~