有没有一种方法可以加快数据库的写入过程?

时间:2019-01-22 16:40:24

标签: spring-boot spring-batch

我正在尝试从多个csv文件读取数据并将其写入mysql数据库。我正在使用Spring Batch,是否可以调整速度?

我正在使用MultiResourceItemReader读取csv文件,并使用JdbcBatchItemWriter将数据写入数据库。

@Bean
public JdbcBatchItemWriter<Person> writer() {
    JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
    writer.setItemSqlParameterSourceProvider(
            new BeanPropertyItemSqlParameterSourceProvider<Person>());
    writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
    writer.setDataSource(dataSource);
    return writer;
}

我希望我的应用程序在几秒钟或几分钟内写入大约500K数据,有办法吗?

1 个答案:

答案 0 :(得分:1)

最简单的开始方法是使用Multithreaded step,其中每个块均由单独的线程处理。这样可以加快批处理作业的速度。

您还可以尝试将分区技术与MultiResourcePartitioner一起使用。使用此分区程序,将为每个文件创建一个分区,然后使用多个线程在本地或使用多个worker远程并行处理这些分区。建议您从TaskExecutorPartitionHandler开始。当一个线程正在读取/处理一个文件时,另一个线程可能正在将另一个文件的数据写入数据库,这将加快处理速度。您可以找到代码示例here

您还可以观看High Performance Batch Processing讨论,其中所有缩放技术均通过代码示例进行了详细介绍。

希望这会有所帮助。

相关问题