Лучший способ управлять транзакциями - PullRequest
1 голос
/ 15 сентября 2009

У меня есть система на основе JBoss и Hibernate. И мне нужно обработать две длинные операции. Операции могут быть, вероятно, дольше, чем время ожидания транзакции. Это операции сохраняются много-много сущностей, в двух разных транзакциях. И если что-то пойдет не так, во время этой операции я должен откатить все изменения транзакций.

Какой лучший способ решить эту проблему?

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

В этой ситуации лучше управлять многими транзакциями. И как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Можно ли использовать сервер JTA (координатор транзакций) для выполнения транзакции в несколько этапов с транзакциями XA? Эта публикация имеет небольшой интерес к паре открытых источников, которые могут работать для вас.

XA-транзакции позволяют вам выполнять множество небольших операций и фиксировать или откатывать их одним ударом. Попробуйте поискать в Google «транзакции в спящем режиме». Большинство современных платформ СУБД (MySQL 5.x, PostgreSQL, SQL Server, Oracle, DB2, Sybase и т. Д.) Поддерживают транзакции XA.

1 голос
/ 15 сентября 2009

Использование одной транзакции - это хорошо, надежно и так далее. Попробуйте еще раз убедить вашего администратора; -)


В противном случае, я могу думать о:

  • используя более короткие транзакции для вставки меньшего количества строк, используя маркер для обозначения "неполное ". Это может быть в существующем столбце или в новом (может быть, в другой таблице?).
  • если откат транзакции, попробуйте снова; если вы предпочитаете прервать всю операцию, вы можете выбрать удаление строк с маркером «незавершенный».
  • когда все транзакции зафиксированы, вы можете открыть последнюю транзакцию, просто чтобы пометить все строки как "завершенные" (например: update ... where ...). Это должно быть намного быстрее, чем при полной вставке, поэтому транзакция должна быть достаточно короткой.
0 голосов
/ 15 сентября 2009

Мне пришлось сделать что-то подобное в JPA (через Hibernate). Я сделал операцию в N транзакциях, а не в 1 большой транзакции. Эта операция выполнялась редко - это было автоматизированное задание, поэтому ни один пользователь не ожидал результата на веб-странице.

Как долго вы ожидаете, что сделка займет? Как долго вы ожидаете, что пользователь будет ждать ?? Как часто вы ожидаете, что эта операция произойдет. Может быть, ваши требования не ясны.

...