ClickHouse 微量数据插入慢
最近发现使用 ClickHouse 插入 5000 条数据时,消费了 10+ 分钟,最后发现主要消耗在批量插入操作了。
使用的 Mybatis 自带的批量插入接口,插入操作执行了十多分钟,可这才仅仅 5000 条数据。
最后查询到可以通过手撸 JDBC 进行批处理插入,可能速度会快一些,问题解决。
// JDBC 原生批量插入
try {
Class.forName(driverClassName);
Connection connection = DriverManager.getConnection(url, connUserName, connPassword);
connection.setAutoCommit(false); // 设置手动提交
// 预编译 SQL 对象
PreparedStatement ps = connection.prepareStatement(
"INSERT INTO *_data (fields) VALUES" +
"(?,?,?,?,?)"
);
saveList.forEach(e -> {
try {
ps.setInt(1, e.getField1());
ps.setInt(2, e.getField2());
ps.setInt(3, e.getField3());
ps.setString(4, e.getField4());
ps.setInt(5, e.getField5());
ps.addBatch();
} catch (SQLException ex) {
log.error("ck 批量操作,插入数据失败!");
throw new RuntimeException(ex);
}
});
ps.executeBatch();//提交批处理
connection.commit();//执行
connection.close();
} catch (ClassNotFoundException e) {
log.error("CK 数据库连接器报错:" + e);
} catch (SQLException e) {
log.error("CK 数据库连接出错:" + e);
}