使用websocket连接器进行高性能写入的时候,有两个参数的原理不是很明白。希望各位大神给予指教。
问题1:batchSizeByRow:这个参数必须和进行PreparedStatement.executeBatch执行时候添加的数据行数一致嘛,如果不一致会有什么问题。
问题2:backendWriteThreadNum:这个参数的原理是什么,假如这个参数配置为10,是一个数据库连接的底层会有10个写入线程进行数据写入嘛?当我通过这个数据库连接写入数据的时候,写入的数据会被底层的多个写入线程分配执行以提高执行效率?还是所有的数据库连接共享这10个写入线程?
如果配置了这个参数后,是不是就不需要在创建数据库连接的外层使用多线程进行数据写入了(代码如下)?也就是说并行数据插入的动作由数据库连接底层实现了。
for (int i = 0; i < 6; i++) {
new Thread(() → {
try (Connection connection = dataSource.getConnection()) {
String sql = “INSERT INTO iot_platform.? using iot_platform.equipment TAGS (?,?) VALUES (now(), ‘?’, ‘?’)”;
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
for (int j = 0; j < 10; j++) {
for (int k = 0 ; k < 10 ; k++) {
pstmt.setString(1, equipmentPrefix + i + “_” + propertyPrefix + j);
pstmt.setString(2, equipmentPrefix + i);
pstmt.setString(3, propertyPrefix + j);
pstmt.setString(4, String.valueOf(ThreadLocalRandom.current().nextInt(10000)));
pstmt.setString(5, DateUtil.format(LocalDateTime.now(), “yyyy-MM-dd HH:mm:ss.SSS”));
pstmt.addBatch();
}
int results = pstmt.executeBatch();
System.out.println(“插入数据” + results.length);
}
// Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}