2016-07-18 6 views
1

Я делаю типичное чтение из БД, и я собираюсь обрабатывать и писать на шаг файла в наборе данных, который содержит много миллионов (> 10 миллионов) записей.JSR 352: Каковы наилучшие практики для Java Batch для обеспечения максимальной производительности и эффективности?

Есть ли что-нибудь с точки зрения дизайна или архитектуры, о которой следует помнить?

Также есть ли какие-либо Java-пакетные методы кодирования, которые нужно иметь в виду? (за исключением общих практических примеров java)

Я использую внедрение IBM JSR352 на свободу Websphere.

+0

Для справки: очень часто нет ** ** лучших практик; но хорошо, мнения людей, что лучшие практики. В этом смысле не очень хороший вопрос. – GhostCat

+0

Я просто хочу убедиться, что, поскольку я разрабатываю свое пакетное решение на Java, я не упускаю ни на что, ни на какую-либо функцию, ни на то, чтобы это не было рекомендовано. Я знаю, что это не очень конкретный вопрос, но поскольку в JSR 352 отсутствует материал вообще, я думаю, что это хороший форум, чтобы задать этот вопрос. –

+0

Вы не можете пропустить ни одной функции. Вы можете пропустить здравый смысл :) –

ответ

3
  1. Не повторяйте чтение. Если вы убедитесь, что все в памяти. Подумайте о кеше первого уровня.
  2. Убедитесь, что у вас нет выбора N + 1.
  3. Быстрый доступ к сети необходим для работы - думаю, сеть 10G
  4. Ввести паралич. Парализовать READ из базы данных, не распараллеливать доступ к файлу, если вы не знаете, что в файловой системе есть несколько дисков, которые могут работать параллельно.
  5. Является ли ваша модель данных реляционной? Да, думаю, спящий, не думаю, что шаблон Jdbc.
  6. Читайте из базы данных в больших кусках. Выделите для этого достаточно памяти.
  7. Если у вас есть обработка сообщений перед записью в файл. Сделайте это снова параллельно.
  8. Если у вас есть операция чтения только с БД. Вам не нужна восстанавливаемость. Операция завершена или завершена. Если вам не нужно сохранять промежуточное состояние для выбора работы, это даст вам дополнительный прирост производительности.
+0

Может ли использование Hibernate повысить производительность по сравнению с Plain JDBC? (не принимая во внимание другие преимущества использования Hibernate) –

+0

Удивительно, да. Если у вас есть реляционная модель, другими словами, вы получаете сразу множество отношений. Дело не в том, что вы не можете делать это с JDBC, но дублирование данных убьет всю производительность. И если вы начнете внедрять алгоритм для устранения дублирования данных. Ну ... в этом случае просто используйте Hibernate с соответствующими стратегиями извлечения :) Если вы не хотите писать новый лучший спящий режим, конечно :) –

Смежные вопросы