JSR 352: Каковы наилучшие практики для Java Batch для обеспечения максимальной производительности и эффективности?
Я делаю типичное чтение из БД, и я собираюсь обработать и записать в шаг файла в наборе данных, который имеет много миллионов (>10 миллионов) записей.
Есть ли что-то с точки зрения дизайна или архитектуры, о котором следует помнить?
Кроме того, есть ли какие-то специфические для Java-Batch практики кодирования, о которых нужно помнить? (кроме общих лучших практик Java)
Я использую реализацию IBM JSR352 на свободе Websphere.
1 ответ
- Не делайте повторяющиеся чтения. Если вы уверены, что все в памяти. Вспомните кеш первого уровня.
- Убедитесь, что у вас нет N+1 выбора.
- Быстрый доступ к сети важен для производительности - подумайте о сети 10G
- Ввести паралелизм. Парализуйте READ из базы данных, не распараллеливайте доступ к файлам, если только вы не знаете, что в файловой системе имеется более 1 дисков, которые могут работать параллельно.
- Является ли ваша модель данных реляционной - Да, думаю, спящий, Нет, думаю, Jdbc шаблон.
- Читать из базы данных большими кусками. Выделите достаточно памяти для этого.
- Если у вас есть постобработка данных, прежде чем писать в файл. Сделайте это снова параллельно.
- Если у вас есть операция только для чтения из БД. Вам не нужно восстановление. Операция либо завершена, либо не выполнена. Если вам не нужно сохранять промежуточное состояние для выбора работы, это даст вам дополнительный прирост производительности.