
简介
批量写入又称为bulk write,对于单表插入多条数据的场景,可以减少插入请求数量,提高吞吐量和效率。clickhouse官方Golang驱动clickhouse-go[1]支持该关键特性,但是文档的介绍不是很详细,只有一句:
Bulk write support : begin->prepare->(in loop exec)->commit
并没有详细介绍用法和原理,笔者在开发业务时使用的库是sqlx[2],sql也支持clickhouse-go驱动。参考了官方样例代码[3]:
...
tx, err := connect.Begin()
checkErr(err)
stmt, err := tx.Prepare("INSERT INTO example (country_code, os_id, browser_id, categories, action_day, action_time) VALUES (?, ?, ?, ?, ?, ?)")
checkErr(err)
for i := 0; i < 100; i++ {
if _, err := stmt.Exec(
"RU",
10+i,
100+i,
[]int16{1, 2, 3},
time.Now(),
本文探讨了ClickHouse批量写入(bulk write)的实现原理,通过分析clickhouse-go驱动的源代码,指出批量写入时数据如何缓存在本地并按block_size刷新到ClickHouse。批处理能提高写入效率,但block_size参数需合理设置以平衡内存使用与性能。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



