Есть ли способ ускорить процесс записи в базу данных? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь прочитать данные из нескольких CSV-файлов и записать их в базу данных MySQL. Я использую весеннюю партию, есть ли способ настроить скорость?

Я использую 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;
}

Я хочу, чтобы мое приложение записало около 500К данных за несколько секунд или минут. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 23 января 2019

Самый простой способ начать - это использовать Многопоточный шаг , где каждый чанк обрабатывается отдельным потоком. Это может ускорить вашу пакетную работу.

Вы также можете попробовать использовать технику разделения с MultiResourcePartitioner. С помощью этого разделителя создается раздел для каждого файла, и эти разделы обрабатываются параллельно либо локально с несколькими потоками, либо удаленно с несколькими рабочими. Я предлагаю начать локально с TaskExecutorPartitionHandler. Пока поток читает / обрабатывает один файл, другой поток может записывать данные другого файла в базу данных, и это должно ускорить процесс. Вы можете найти пример кода здесь .

Вы также можете посмотреть выступление High Performance Batch Processing , где все методы масштабирования подробно представлены с примерами кода.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...