Пружинная партия - Комбинирование удаленного разделения с удаленным разделением на части - PullRequest
0 голосов
/ 16 марта 2020

Попытка выяснить, могу ли я спроектировать работу, в которой мне нужны как разделение, так и удаленное разбиение на фрагменты. У нас может быть что-то вроде таблицы A, содержащей строки (один из столбцов в таблице A будет ключом раздела), и для каждой строки в таблице A у нас будет таблица B, которая содержит много дочерних записей для данного внешнего ключа / ключа раздела в таблице. А. Нам нужно было бы выполнить запрос, который фильтрует ключи раздела из таблицы A на основе запроса, и для каждого ключа раздела обработать все дочерние записи в таблице B (здесь снова у нас будет несколько миллионов записей в таблице B, поэтому нам потребуется параллелизм для обработки записей и, следовательно, удаленного разбиения на фрагменты)

Как правильно подходить к проектированию весенних пакетных заданий для чего-то подобного? введите описание изображения здесь

1 Ответ

0 голосов
/ 17 марта 2020

, поэтому нам потребуется параллелизм для обработки записей и, следовательно, удаленное разбиение на блоки

Не обязательно. Ничто не мешает вам использовать удаленное разбиение на блоки в рабочих разделах, но IMO это усложнит.

Более простой подход состоит в использовании нескольких заданий. Каждое задание будет обрабатывать разные разделы и обрабатывать элементы параллельно, используя многопоточный шаг. Другими словами, ключ раздела здесь является параметром задания. Этот подход имеет следующие преимущества:

  1. Легче масштабировать: поскольку у вас параллелизм на двух уровнях:

    • параллельное выполнение нескольких заданий с использованием нескольких JVM (либо на одной и той же машине или на разных машинах)
    • и в каждой JVM используйте несколько потоков для параллельной обработки элементов.
  2. Проще реализовать: Удаленное разбиение на разделы и разделение на блоки не являются простейшими настройками. Выполнение нескольких заданий, каждое из которых читает select * from TableA where partitionKey = ? элементов и использует многопоточный шаг (для этого требуется одна строка кода , добавление исполнителя задачи .taskExecutor(taskExecutor)), намного проще.

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