2016-02-26 4 views
1

Прошли много результатов в Интернете и других источниках, но не смогли найти никакой веской причины, по которой весенняя пакетная транзакция работает на ступенчатом уровне, а не на уровне работы в мульти -ступенчатая работа.Почему весомая область транзакций транзакций находится на ступенчатом уровне, а не на уровне задания

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

Скажите, что задание должно читать файл excel (с двумя листами, каждый из которых имеет 6 миллионов строк).

Я бы сказал, что чтение каждого листа было нарушено в виде шага. каждый лист имеет свой собственный стиль обработки строк и записи (Database).

Обработка любого листа НЕ имеет никакого отношения к другому листу. Это независимый блок. Но полная обработка любого листа - это подзадача работы.

И обработка файла должна считаться ОТКАЗОМ, если на любом листе есть проблема, и она должна откатить все данные, записанные до сих пор.

Но так как лист для чтения был выполнен в виде шага, и если лист был успешно обработан, он не будет откат в случае сбоя, отмеченного на следующем листе.

Я бы согласился объединить оба шага в одном только ради решения.

Почему весенняя партия не предоставляет никакой возможности отката всех шагов при неудаче задания (задачи)?

Я не хочу пересылать данные с одного шага на другой (пишите один раз только в базу данных), поскольку это не связанные данные, как я сказал ранее, и это слишком огромные (6 миллионов) строк в течение более длительного времени время кадра в памяти.

ответ

0

Во-первых, это неправда, что операции находятся на уровне шагов. Они более тонкие, чем это - на уровне куска.

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

Путь Spring Batch имеет дело с ошибками на полпути, позволяя перезапускать задания с последнего успешного шага/куска после устранения ошибки вручную. Конечно, это не всегда возможно.

+0

Вы правы, говоря на уровне куска, но кусок сам по себе является частью шага. Что касается производительности, если бы ваш ответ был таким же, если бы я сказал, что на каждом листе всего 10 строк? Последствия наличия больших данных в транзакции - отдельная проблема, и это существует даже тогда, когда мы не находимся в контексте весенней партии. Проектная перспектива должна быть опцией, предоставляемой весенней партией. В течение шага, если элемент получает отказ, он откатывает все обработанные до сих пор элементы (с ограничением интервала фиксации), очень же концепция должна быть расширена (по выбору пользователей) на уровне работы. –

+0

Может ли кто-нибудь помочь мне решить эту проблему. –

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