Откат изменений базы данных - PullRequest
0 голосов
/ 09 июня 2010

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

Сложность состоит в том, что существует несколько параллельных путей и различные перестановки вызовов внешней базы данных.Так есть ли фреймворк или способ отслеживать эти вызовы БД и откатывать их?

спасибо, Джастин

Ответы [ 3 ]

2 голосов
/ 09 июня 2010

Хм, я так не думаю.

В Entity Framework например, у вас есть функции TRANSACTIONS и ROLLBACK, но это ROLLBACK изменяется только в этом TRANSACTION сначало этого начала (START TRANSACTION - Оператор SQL )

Тогда вы должны будете в нескольких параллельных путях начать TRANSACTION и принять решение COMMIT или ROLLBACKизменения.Но прежде, чем COMMIT другие параллельные экземпляры не увидят изменения, внесенные в других TRANSACTIONS, которые еще не будут COMMITED.

Я думаю, вы должны выполнить некоторую рефакторизацию на application / database , но это только оффтоп подсказка.

0 голосов
/ 12 июня 2010

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

Существует шаблон проектирования, называемый Шаблон Momento , который делает снимок ваших объектов с ключевыми интервалами и сохраняет эти данные в дополнение к «текущим» данным в вашей базе данных.Транзакция этого типа может быть сохранена как сериализация ваших объектов и записана, и, следовательно, вам нужно будет создать таблицу истории для каждой таблицы, которая у вас есть в данный момент.

Хитрость заключается в том, чтобы восстановить ваши объекты из транзакций Memento, сохранить данные обратно в стандартные таблицы.

0 голосов
/ 09 июня 2010

Эти изменения зафиксированы в базе данных уже в промежуточном состоянии?Это будет проблематично.Поскольку другие пользователи могли запускать действия на основе зафиксированных данных.

Я видел системы, которые поддерживают отмену n-уровня до фиксации (CSLA делает это), но это на уровне объектной модели в памяти.

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

...