powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировки при редактировании в Web-приложении.
8 сообщений из 8, страница 1 из 1
Блокировки при редактировании в Web-приложении.
    #34887386
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток ...

Хотелось бы узнать мнения профессионалов по поводу сабжа.
Задача стандартная и быть может вполне уже "обсосанная донельзя", но все-таки:
Web-приложение с CRUD-операциями, как реализовать решение конфликтов при одновременном редактировании записей?

P.S.
Может быть подскажете хорошие ссылочки на статьи по данному материалу...
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34887487
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимистическая блокировка.
добавляешь к таблице столбец version

и все update делаешь

update table set ... version=@old_version+1 where id = @id and version =@old_version

и смотришь сколько строк у тебя проупдейтилось если 0, то либо запись удалили либо версия поменялась. Ну и сообщение пользователю, данные за время работы были изменены и ваши изменения не прошли.

Если использовать hibernate то там это уже сделано и заморачиваться даже не надо.
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34887706
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0Оптимистическая блокировка.
+1
vas0добавляешь к таблице столбец version
Это один из вариантов реализации.
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34887867
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0добавляешь к таблице столбец version
вместо числовой версии можно использовать время изменения - timestamp с хорошей точностью. смысл тот же. плюс - удобно для отслеживания когда менялись данные
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34887906
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiG vas0добавляешь к таблице столбец version
вместо числовой версии можно использовать время изменения - timestamp с хорошей точностью. смысл тот же. плюс - удобно для отслеживания когда менялись данные а мне timestamp не нравиться. Какое время использовать? Время сервера? Так его можно сбить, да и переходы на зимнее/летнее время, тоже головная боль.
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34887917
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGвместо числовой версии можно использовать время изменения - timestamp с хорошей точностью. смысл тот же. плюс - удобно для отслеживания когда менялись данные боян. иногда его точности недостаточно. тема раскрыта в книжке
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34896725
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expp TiGвместо числовой версии можно использовать время изменения - timestamp с хорошей точностью. смысл тот же. плюс - удобно для отслеживания когда менялись данные боян. иногда его точности недостаточно. тема раскрыта в книжкеиногда да, но в большинстве случаев более чем достаточно
еще один вариант (только начиная с 10g) - ORA_ROWSCN, подходит даже для случаев когда не хочется создавать в каждой таблице колонку с версией или временнОй меткой:
Код: plaintext
1.
2.
select t.*, rowid, ora_rowscn from ...

update ... where rowid = :rowid and ora_rowscn = :ora_rowscn
Ну и можно еще вспомнить вариант с полноценной версионностью (самостоятельной, т.е. без использования WM и т.п. оракловых фич), когда хранится две временные метки - начало/окончание актуальности версии:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
  t.*, rowid
from ...
where ....
  and to_date = :INFINITY_DATE -- active row version

/* close active version */
update ...
  to_date = :new_to_date
where rowid = :rowid and to_date = INFINITY_DATE

/* new active version */
insert ...
  :new_to_date + ONE_SECOND /* from_date */,
  :INFINITY_DATE /* to_date */,
...
Рейтинг: 0 / 0
Блокировки при редактировании в Web-приложении.
    #34896778
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGеще один вариант (только начиная с 10g) - ORA_ROWSCN, подходит даже для случаев когда не хочется создавать в каждой таблице колонку с версией или временнОй меткой:
Код: plaintext
1.
2.
select t.*, rowid, ora_rowscn from ...

update ... where rowid = :rowid and ora_rowscn = :ora_rowscn

да, и не забываем, что в этом случае таблица должна быть создана с кляузой ROWDEPENDENCIES
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Блокировки при редактировании в Web-приложении.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]