Рег. поддержка транзакций для весеннего пакетного задания на уровне работы - PullRequest
1 голос
/ 11 января 2012

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

То есть, если второй шаг не удался, то первый шаг следует откатить.

Ответы [ 3 ]

1 голос
/ 11 января 2012

Я не уверен, существует ли вообще решение с автоматической цепной / многоуровневой обработкой транзакций, которое работает надежно (или не требует много ресурсов на стороне базы данных)

, если второешаг завершается неудачно, тогда первый шаг следует откатить

, так что вы можете объединить оба шага в один:

  • чтение из первой таблицы A
  • useпроцессор для обновления таблицы A
  • используйте процессор для чтения из таблицы B
  • используйте программу записи для обновления таблицы B

производительность сильно пострадает, потому что чтение натаблица B будет представлять собой одно чтение по сравнению с курсором для таблицы a

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

  • (необязательно): используемые таблицы являются временными, а ненастоящие «производственные» таблицы, облегчающие работу с компенсацией с отделением хранилищ данных от производственных
  • a неудавшийся шаг 1 запускает другой шаг или другое задание / скрипт
  • этот шаг / задание / скрипт удаляется по мере необходимости (строки или полная таблица)
1 голос
/ 24 октября 2012

Рассматривали ли вы возможность использования транзакций на уровне работы?

Уровень выполнения транзакций в Spring Batch

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

0 голосов
/ 11 января 2012

Поставьте оператор BEGIN перед Шаг 1 и оператор COMMIT после Шаг 2 .

...