Я попросил fewquestionstoday, когда я пытаюсь решить проблему.Решение для предварительного просмотра пользовательских изменений и разрешения отката/фиксации в течение периода времени
У нас есть сложная структура данных, в которой все различные объекты тесно взаимосвязаны, причем почти все объекты сильно зависят от сущностей других типов.
Проект представляет собой веб-сайт (MVC3, .NET 4), и вся логика реализована с использованием LINQ-to-SQL (2008) на бизнес-уровне.
Что нам нужно сделать, так это заставить пользователя «заблокировать» систему, пока они вносят свои изменения (для этого есть другие причины, в которые я не буду входить, которые не связаны с базой данных). Пока этот пользователь делает свои изменения, мы хотим показать им исходное состояние объектов, которые они обновляют, а также «предварительный просмотр» сделанных изменений. По завершении они должны иметь возможность отката/фиксации.
Мы рассмотрели эти варианты:
- Holding открыть сделку по продолжительности времени, пользователь берет, чтобы сделать несколько изменений воняет, так что вне.
- Сохранение копии всех данных в памяти (или кэшированных на диск) является вариантом, но чертовски много, поэтому кажется необоснованным.
- Поддержание набора вторичных таблиц или попытка использования состояния сеанса для хранения изменений, но это сложно и сложно поддерживать.
- Использование двух баз данных, переворачивание между ними по строке подключения и использование T-SQL для управления репликацией, после чего они снова синхронизируются после фиксации/отката. То есть включение/выключение, форматирование моментального снимка, направление реверса и т. д.
Мы немного тупим для решения, которое относительно легко поддерживать. Какие-либо предложения?
Не соответствует его требованиям, но здесь есть много хороших идей. –
Хорошо, но не совсем то, что нам нужно. Это по существу вариант 2 в моем списке, так как нам требуется блокировка (очень) большого набора данных. – enashnash
Несмотря на мой комментарий выше, это решение, которое я использовал, поэтому я отметил его как ответ. Я не уверен, является ли этот ответ или тот, что у @Quassnoi самый _correct_, хотя он работает лучше всего в моем случае. – enashnash