ClickHouse 本地Docker版搭建及Go链接体验Demo
1,Win10 用Docker 启动单机版本ClickHouse
Win10上用WSL搭建Docker 环境部署就不讲了,直接上ClickHouse的镜像部署;
找到官方Docker 镜像库,搜索选中:
clickhouse/clickhouse-server
https://hub.docker.com/r/clickhouse/clickhouse-server#networking
下载镜像和部署命令:
docker pull clickhouse/clickhouse-serverdocker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
这里有个问题,就是部署完毕后,我不能直接访问,无论如何都连不上,后来想到docker的网络及端口问题(以前遇到过);
这里的解决办法是在Docker Hub 内移除之前启动的 容器,重新配置参数开启
我还是原端口映射的,配置好了以后,可以再去试试联通
参考资料:
https://hub.docker.com/r/clickhouse/clickhouse-server#networking 如何用Docker部署CK 单机版
https://clickhouse.com/docs/en/interfaces/http/ 如何验证CK 联通
https://docs.docker.com/config/containers/container-networking/#published-ports 如何配置Docker 端口映射
2,找一个可视化的工具访问CK的数据库和表
我找了这个,https://github.com/dbeaver; ClickHouse 会需要安装驱动,具体步骤简单,直接贴 一个别人的文档,我就不赘述了。
https://blog.csdn.net/duketyson2009/article/details/98206721, 作者:杜克泰森
对了,上面CK 部署好了,默认的用户名是default,无需密码链接;
这边用default 链接上后,可以执行简单命令创建 helloworld的数据库,显示执行成功;如下图:
然后通过SQL 创建一个测试数据库和表吧;首先通过, docker exec -it xiami-ck /bin/bash 进入container 内部;再通过 clickhouse-client 进入数据库
1 2 | docker exec -it ck-server /bin/bash # 进入container clickhouse-client #进入数据库 |
执行创建命令(可以在Container 内部执行,也可以在DBeaver 中执行)
create database if not exists testUSER;
DROP TABLE if exists testUSER.test_user;
CREATE TABLE if not exists testUSER.test_user (
`id` Nullable(Int64),
`age` Nullable(Int64),
`name` Nullable(String)
) ENGINE = Memory
insert into testUSER.test_user (age, name) values(17,'xiaoming');
注意:如果遇到创建出错,需要Drop掉再执行,参考文档:https://clickhouse.com/docs/en/sql-reference/statements/drop
但是,还有一种情况是,drop无法执行,也无法创建;
这需要去删除 meta下的 database 文件;
3,写一个简单的Go程序链接 ClickHouse
其中 使用了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package main import ( "context" "fmt" "github.com/uptrace/go-clickhouse/ch" "github.com/uptrace/go-clickhouse/chdebug" ) func GetClickHouseDSN() string { return fmt.Sprintf( "clickhouse://%s:%s@%s:%d/%s?sslmode=disable" , "default" , "" , "localhost" , 9000, "testUSER" , ) } func main() { ctx := context.Background() constr := config.GetClickHouseDSN() db := ch.Connect( ch.WithDSN(constr), ch.WithTimeout(5*time.Second), ch.WithDialTimeout(5*time.Second), ch.WithReadTimeout(5*time.Second), ch.WithWriteTimeout(5*time.Second), ch.WithPoolSize(100), ) //打印Query Error db.AddQueryHook(chdebug.NewQueryHook(chdebug.WithVerbose(true))) //联通测试 if err := db.Ping(ctx); err != nil { panic(err) } // 测试打印Query var num int if err := db.QueryRowContext(ctx, "SELECT 123" ).Scan(&num); err != nil { panic(err) } fmt.Println(num) //测试Drop和Create Table if err := db.ResetModel(ctx, (*Model)(nil)); err != nil { panic(err) } //测试写入一行 src := &Model{ID: 1, Text: "hello" , Time: time.Now()} if _, err := db.NewInsert().Model(src).Exec(ctx); err != nil { panic(err) } //测试筛选where dest := new(Model) if err := db.NewSelect().Model(dest).Where( "id = ?" , src.ID).Limit(1).Scan(ctx); err != nil { panic(err) } fmt.Println(dest) } |
执行结果
4, 参考资料
- 讲述ClickHouse 基本操作, https://www.cnblogs.com/qlqwjy/p/16592571.html
- Docker 启动Ck的命令行说明:https://www.lixin.help/2021/05/16/ClickHouse-Docker-Install.html
- CK 和LADP 打通用户,这个没体验:https://mp.weixin.qq.com/s?__biz=MzIzMDk0Njc1Nw==&mid=2247484197&idx=1&sn=f3bee19ac7175b6e5e0928e8acd77e1b&scene=21#wechat_redirect
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2014-08-20 ubuntu12.04 折腾流水