Я пытаюсь создать новый проект springbatch, и я просто хочу выполнить эти шаги.
-> read list of accounts Ids (more than 10 000)
--> for each accounts Ids
---> read purchase into database
---> write datas into elasticsearch
@Bean
public Job importPurchase(
JobBuilderFactory jobBuilderFactory, Step findAccountStep, Step importPurchaseStep) {
return jobBuilderFactory
.get("importJob")
.incrementer(new RunIdIncrementer())
.start(findAccountStep)
.next(importPurchaseStep)
.build();
}
Я создал задание springbatch с двумя шагами и ограничил свой первый фрагмент 1000 элементами (запрос oracle IN ограничен 1000). Но мой первый шаг выполняется 10 раз, а затем начинается второй шаг. Итак, мой список учетных записей содержит 10 000 записей.
Как я могу прочитать свой accountId, а затем получить покупку на 1000 товаров?
Спасибо ! :)
Вы можете использовать шаблон управляющего запроса с одним ориентированным на фрагменты шагом, в котором:
Следует отметить, что этот шаблон хорошо работает для небольших/средних наборов данных, но не так хорошо для больших наборов данных, так как требует дополнительного запроса для каждого элемента. В вашем случае он должен работать хорошо, поскольку размер набора входных данных все еще разумен.
Обновлено: Как масштабировать этот шаблон?
Тот же шаблон можно использовать на разделенном входе. Например, разделение 10 000 идентификаторов учетных записей на диапазоны и создание раздела для каждого диапазона. Spring Batch предоставляет образец для этого в ColumnRangePartitioner.
После создания секций вы можете создать секционированный шаг, на котором каждый рабочий процесс применяет шаблон управляющего запроса к назначенной ему секции. Воркеры могут быть локальными потоками или удаленными JVM, что позволяет вам горизонтально масштабировать вашу обработку.
Вы не сообщили этот номер о деталях покупки в своем первоначальном вопросе. Но это не проблема, вы можете использовать тот же шаблон для разделенного ввода, что означает создание разделенного шага (локального или удаленного) и масштабирование обработки по горизонтали по мере необходимости. Я отредактирую вопрос соответственно. Тем не менее, мне любопытно узнать, какую базу данных вы используете для хранения 300 миллиардов сведений о покупках (и как они хранятся), а также какой бизнес, в котором один идентификатор учетной записи может иметь в среднем 30 миллионов сведений о покупках.
Жаль, что я сделал ошибку. 300 миллионов, а не 300 миллиардов.
Спасибо за ваш ответ, но в моем случае есть 10 000 идентификаторов учетных записей и, возможно, 300 миллиардов сведений о покупках... Так что я не думаю, что это разумно :/