Реализация оптимистического параллелизма в устаревшей базе данных

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

Мне было интересно, что было бы лучшим способом.

Запрос с предикатом будет создан на стороне приложения.

Меня беспокоит, как сохранить значение rowversion (timestamp).

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

Любые идеи ?


person user256034    schedule 21.06.2011    source источник
comment
для решения см.: stackoverflow.com/questions/7455726/   -  person Kevin Burton    schedule 17.10.2011


Ответы (2)



Очень простой, но эффективный шаблон — сначала получить всю строку, которую нужно отредактировать, не сохраняя блокировки. Когда вы, наконец, будете готовы к обновлению, дополните предложение where такими предложениями, как COLUMNA='OLDVALUEA'. Количество измененных записей указывает, помешала ли какая-то другая модификация вашему оптимистичному обновлению или нет.

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

person Peter G.    schedule 21.06.2011
comment
Мне нравится эта идея, единственный недостаток, который я вижу, мне нужно как-то хранить старые значения. Это веб-приложение. - person user256034; 22.06.2011