1. 采用mybatis写入数据,速度很慢的问题;
采用mybatis拼接sql的方式,可以写入数据,但是效率很低。每秒数据大概200-300条数据记录。
2. 采用jdbc写入数据,可以使用两种数据源
// 新版本的包
import com.clickhouse.jdbc.ClickHouseDataSource;
// 这个包可以
import ru.yandex.clickhouse.ClickHouseDataSource
3. 时间格式设置问题
组织批量写库时的日期时间格式问题。
java.sql.Date sqlPayTime = new java.sql.Date(bill.getPayTime().getTime());
prepareStatement.setObject(39, new Timestamp(sqlPayTime.getTime()));
需要使用sql的Timestamp,不能使用java.util.Date,也不能使用java.sql.Date。
4. 主键和排序键
在创建表时指定主键,会根据主键创建索引;
主键可以是多个列,不会影响查询性能,而且主键相同的数据可以重复;
一般不指定主键(primary key),而是指定排序键(order by),此时会把排序键作为主键;
排序键和主键可以不同,但此时主键必须时排序键的前缀。
5. 引擎参数问题
CREATE TABLE default.bill
(
`bill_id` Int64,
`bill_date` DateTime
)
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(bill_date)
ORDER BY bill_date
SETTINGS index_granularity = 8192;
这个引擎设置是有问题的。
当排序key相同的数据,在做数据合并的时候,会进行去重处理。如果bill_date相同,就会进行数据合并。
CREATE TABLE default.bill
(
`bill_id` Int64,
`bill_date` DateTime,
`plat_billno` String
)
ENGINE = ReplacingMergeTree(bill_date)
PARTITION BY toYYYYMM(bill_date)
ORDER BY (plat_billno, bill_date)
PRIMA

本文探讨了使用MyBatis和JDBC批量写入ClickHouse时遇到的性能瓶颈及解决方案,包括数据源选择、时间格式处理、主键与排序键设定、引擎参数配置、事务提交等问题,并分享了优化后的显著性能提升。

1440

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



