环境
- TDengine JDBC Driver:
taos-jdbcdriver 3.8.3
- Java:
21.0.8
- Spring Boot:
3.4.5
- 连接池: HikariCP
6.3.0
- 写入 API:
AbstractConnection.write(lines, SchemalessProtocolType.LINE, SchemalessTimestampType.MILLI_SECONDS)
数据库在本机docker中部署,为最新版本3.4.1
原生连接配置:
tdengine:
url: jdbc:TAOS://:/名称
driver-class-name: com.taosdata.jdbc.TSDBDriver
WebSocket 连接配置:
tdengine:
url: jdbc:TAOS-WS://localhost:6041/名称
driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
测试逻辑
两种连接方式使用完全相同的 Java 写入逻辑,只切换 JDBC URL 和 driver class。写入数据的时间严格顺序递增,没有乱序写入。
伪代码如下:
Map<String, Double> realtimeData = loadRealtimeDataOnce(); // 8973 个点
for (LocalDateTime ts = startTime; !ts.isAfter(endTime); ts = ts.plusMinutes(5)) {
long start = System.currentTimeMillis();
List<String> lines = buildInfluxLineProtocol(realtimeData, ts);
jdbcTemplate.execute((ConnectionCallback<Object>) con -> {
AbstractConnection taosCon = con.unwrap(AbstractConnection.class);
taosCon.write(
lines.toArray(new String[0]),
SchemalessProtocolType.LINE,
SchemalessTimestampType.MILLI_SECONDS
);
return null;
});
log.info("write cost: {} ms, points: {}", System.currentTimeMillis() - start, realtimeData.size());
}
测试时间范围共 3744 个时间点,每 5 分钟一个时间点。每个时间点写入约 8973 个点值。
原生 JDBC 平均每个时间点耗时: 142ms
WebSocket JDBC 平均每个时间点耗时: 1340ms
WebSocket写入速度明显无法接受,文档里面写Java的原生连接方式即将弃用,但是WebSocket根本无法替代
环境
taos-jdbcdriver 3.8.321.0.83.4.56.3.0AbstractConnection.write(lines, SchemalessProtocolType.LINE, SchemalessTimestampType.MILLI_SECONDS)数据库在本机docker中部署,为最新版本3.4.1
原生连接配置:
WebSocket 连接配置:
测试逻辑
两种连接方式使用完全相同的 Java 写入逻辑,只切换 JDBC URL 和 driver class。写入数据的时间严格顺序递增,没有乱序写入。
伪代码如下:
测试时间范围共 3744 个时间点,每 5 分钟一个时间点。每个时间点写入约 8973 个点值。
原生 JDBC 平均每个时间点耗时: 142ms
WebSocket JDBC 平均每个时间点耗时: 1340ms
WebSocket写入速度明显无法接受,文档里面写Java的原生连接方式即将弃用,但是WebSocket根本无法替代