2013-05-07 4 views
0

Вопрос: Идет так.Обработка большого количества данных

Форма одна заявка я получаю около 2,00,000 Зашифрованные значения задачу

  1. Читать все зашифрованные значения в одном Vo/список
  2. переформатировать добавить заголовок/прицепы.
  3. дамп это запись в БД в одном кадре с заголовком и трейлером в coloums, разделенном определяют

Я не хочу использовать любой файл между процессами Что бы быть лучшим способом для хранения 2,00,000 записи список или что-то как сбросить эту запись одним выстрелом в дБ. лучше нырять в куски и использовать отдельный поток для работы над ним. , пожалуйста, предложите для этого меньшее время.

Я использую весеннюю партию для этого, и этот процесс будет одной работой.

+1

с 2,00,000 вы имели в виду 2 миллиона? каков ваш первый подход? –

+0

Хорошие потенциальные возможности для оптимизации изобилуют. Курс, пока вы не узнаете, что у вас есть, не является оптимальным, и почему исходные предложения могут быть совершенно неправильными ... –

+0

@Marco Это примерно 2 сотни тысяч записей. Первый подход - сохранить в списке массивов, затем переформатировать его с помощью одного VO и записать его в db в кусках. –

ответ

0

Есть несколько общих приемов, чтобы сделать вставки навалом идти быстрее:

  • Рассмотрим с использованием нативного массовой вставки базы данных.

  • Отсортируйте записи в порядке возрастания первичного ключа, прежде чем вставлять их.

  • Если вы вставляете в пустой стол, сначала снимите вторичные индексы, а затем заново создайте их.

  • Не делайте этого в одной транзакции с базой данных.

Я не знаю, насколько хорошо эти приемы перевести пружинную партию ... но если они не вы могли бы рассмотреть в обходе пружинной партии и идти непосредственно в базу данных.

1

Весенняя партия предназначена для этого типа операции. Вам понадобится кусок цепочки. Этот тип такеток использует считыватель, процессор элементов и писатель. Кроме того, этот тип tasklet использует потоковое вещание, поэтому вы никогда не будете иметь все элементы в памяти за один раз.

Я не уверен в поступающем формате ваших данных, но есть существующие читатели для практически любого случая использования. И если вы не можете найти нужный вам тип, вы можете создать свой собственный. Затем вы захотите реализовать ItemProcessor для обработки любых изменений, которые вам нужно выполнить.

Для записи вы можете использовать только JdbcBatchItemWriter.

Что касается этих верхних и нижних колонтитулов, мне понадобится дополнительная информация об этом. Если они являются совокупностью всех записей, вам нужно будет их обработать заранее. Вы можете поместить конечные результаты в ExecutionContext.

+0

ya header/footers для агрегирования всех записей. Поэтому я думаю, что могу использовать как прежде, так и после шага, используя считыватель тасклитов. –

+0

@popats. Я не уверен, что сделает StepListener для вас. Что вы делаете с данными заголовка/нижнего колонтитула? В зависимости от ваших требований к производительности, может быть проще выполнить обработку заголовка/нижнего колонтитула на своем собственном шаге. –

+0

данные заголовка/нижнего колонтитула будут содержать метаданные о данных, которые я получаю, также необходимо сбрасывать их в db. –

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