写入clickhouse效率低总结

在将数据写入clickhouse中,直接使用的原生的jdbc,采用了两种方式。

//方式一
insert into table (row1,row2,...) values (?,?,...)
//此处省略set语句
PreparedStatement.addBatch();
PreparedStatement.executeBatch();
Connnection.commit();
PreparedStatement.clearBatch();
//方式二
/* sql语句采用 insert into table (row1,row2,...) values ('value1','value2',...),('value1','value2',...),...
*/
String sql = "insert into table (row1,row2,...) values ";
//此处for循环是为了拼接sql语句
for() {
    
}
Statement.execute(sql);

两种方式都试了1000、2000、3000、4500等多个批次写入。基本超过一个批次5000条都会报错:too many parts。而在这些测试中,写入速度都很慢,基本跑一会儿就会出现:read time out超时,但是服务端那边的数据还在写入,就是说有滞后的情况。经过查阅资料,官网和众博客主都基本是采用这种原生jdbc写入数据,并且速度可以达到每秒10w条的写入原文链接。随后联系了阿里的客服人员,最后确定是建表的问题,对于partition分区字段构建的不合理造成每次写入都需要大量的排序工作,严重影响了写入数据的性能,特此总结,谨记教训。

上一篇:mysql常用插入sql


下一篇:SQL Exercises