powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / обновление данных в многопользовательском Веб-приложении
39 сообщений из 39, показаны все 2 страниц
обновление данных в многопользовательском Веб-приложении
    #33880248
Коллеги, хочу открыть топик по проблеме обновления, удаления данных в многопользовательских приложениях.
Проблема такая.
Пользователь пытается добавить запись в таблицу в которой есть поля являющиеся внешними ключами. (причем есть констрайнт на данные ключи NOT NULL)
Если в момент добавления записи в таблицу значения одного из внешних ключей не валидно (эти записи были удалены другим пользователем), то получаем исключение.

Кто и как борется с данной проблемой?

Спасибо.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880293
Можно конечно делать запрос навроде этого
if exists(select 1 from table2 where значение_первичного_ключа = ?)
update
table1
set (field1, внешнего_ключ)
values('значение', 'значение_внешеного ключа')

но есть ли другие альтернативы?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880306
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где проблема то? исключение? так можно (нужно) сообщить юзеру об этом...
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880352
Проблема как раз в исключении.
Исключение может быть возбуждено нарушением констрайнта, недоступностью таблицы, неккоректными параметрами.
При таком подходе надо анализировать код ошибки sqlException-а, а хочется универсальный метод и без гемороя. :-)
как в предыдущем мессадже if exists.......(там мы возможно получим что у нас обновилось 0 записей и можем делать на основании этого выводы, что не все гладко.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880420
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А транзакции не помогают?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880436
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Крошкин ДимонПроблема как раз в исключении.
Исключение может быть возбуждено нарушением констрайнта, недоступностью таблицы, неккоректными параметрами.
При таком подходе надо анализировать код ошибки sqlException-а, а хочется универсальный метод и без гемороя. :-)
как в предыдущем мессадже if exists.......(там мы возможно получим что у нас обновилось 0 записей и можем делать на основании этого выводы, что не все гладко.
на основании вашего примера вы не можете делать вывод. (надо объяснять почему?)
на основании исключения вы можете делать вывод.
разницу чувствуете?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880594
Timmна основании вашего примера вы не можете делать вывод. (надо объяснять почему?)
на основании исключения вы можете делать вывод.
разницу чувствуете?
Разницы не вижу. Объясните в чем она? (Ведь для каждого запроса тогда придется писать свою кастомную обработку?)

Больше склоняюсь уже к варианту с транзакциями.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880836
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы говорите о перпендикулярных вещах...

ваш пример:
1) проверяете наличие записи
2) делаете апдейт.
между 1 и 2 в общем случае может пройти сколько угодно времени, поэтому ваш вариант не обеспечивает требования "не получать исключение".
Правильное решение должно делать п.1 во втором пункте. Если юзера не информировать, сколько чего было обновлено, то это решение вида "нам по.уй на юзера". Если информировать - то жить можно.
Но мне такой подход не нравится.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880843
TimmВы говорите о перпендикулярных вещах...

ваш пример:
1) проверяете наличие записи
2) делаете апдейт.
между 1 и 2 в общем случае может пройти сколько угодно времени, поэтому ваш вариант не обеспечивает требования "не получать исключение".
Правильное решение должно делать п.1 во втором пункте. Если юзера не информировать, сколько чего было обновлено, то это решение вида "нам по.уй на юзера". Если информировать - то жить можно.
Но мне такой подход не нравится.

Небольшое возражение - в моем примере между 1 и 2 нет сколько угодно времени. Это делается в рамках одной sql операции. А так с вами согласен - на юзера нельзя класть :-)

Спасибо всем кто откликнулся.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880910
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Крошкин Димон

Небольшое возражение - в моем примере между 1 и 2 нет сколько угодно времени. Это делается в рамках одной sql операции.

У вас if и update являются одной sql операцией?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33880982
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 Крошкин Димон:
Решение однозначно в использовании транзакций, они как раз для атомарных операций и созданы, все остальные подходы не верны. А генерация исключений (где, когда и как) к решению проблемы отношения не имеет.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33882717
pamir Крошкин Димон

Небольшое возражение - в моем примере между 1 и 2 нет сколько угодно времени. Это делается в рамках одной sql операции.

У вас if и update являются одной sql операцией?

Да, только не во всех местах.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33883568
ttttttt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select for update чем не подходит?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33884677
tttttttselect for update чем не подходит?
А пример можно? Как этот sql query выглядит? (ни разу не встречал)
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33886592
Sherst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT employee_id, salary FROM employees
      WHERE job_id = 'SA_REP' AND commission_pct >  10 
      FOR UPDATE

Знаю точно, что поддерживается сервером Oracle, на счет остальных серверов
не уверен.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33886697
Sherst
Код: plaintext
1.
2.
3.
SELECT employee_id, salary FROM employees
      WHERE job_id = 'SA_REP' AND commission_pct >  10 
      FOR UPDATE

Знаю точно, что поддерживается сервером Oracle, на счет остальных серверов
не уверен.

К сожалению разработка ведется под SQL Server. Но запросик интересный - у меня возникло несколько вопросов: когда в нем происходит обновление? либо это должен следовать второй запрос, либо данный запрос должен выполняться в рамках транзакции, или я уже ничего не понимаю )))
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33890246
Sherst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все выполняется в одной транзакции.
При выполнении данный запрос блокирует записи, и сможет их разблокировать только после сохранения либо отката изменений (commit / rollback)
Соответсвтенно все изменения будут видны после команд (commit / rollback)
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33891231
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sherst
Код: plaintext
1.
2.
3.
SELECT employee_id, salary FROM employees
      WHERE job_id = 'SA_REP' AND commission_pct >  10 
      FOR UPDATE

Знаю точно, что поддерживается сервером Oracle, на счет остальных серверов
не уверен.
Это все нормальные сервера поддерживают только вот назначение у этой штуки другое - а именно показывать серверу что данное множество записей которое мы сейчас читаем будет изменено далее в ЭТОЙ ЖЕ транзакции. Реализация же с помощью for update пессимистической блокировки - обычно слишком дорогое решение.

авторКрошкин Димон

Сделайте общий обработчик для SQLException'ов отображащий сообщение об ошибке в понятном пользователю формате.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33891245
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Sherst
Код: plaintext
1.
2.
3.
SELECT employee_id, salary FROM employees
      WHERE job_id = 'SA_REP' AND commission_pct >  10 
      FOR UPDATE

Знаю точно, что поддерживается сервером Oracle, на счет остальных серверов
не уверен.
Это все нормальные сервера поддерживают только вот назначение у этой штуки другое - а именно показывать серверу что данное множество записей которое мы сейчас читаем будет изменено далее в ЭТОЙ ЖЕ транзакции. Реализация же с помощью for update пессимистической блокировки - обычно слишком дорогое решение.

авторКрошкин Димон

Сделайте общий обработчик для SQLException'ов отображащий сообщение об ошибке в понятном пользователю формате.
? пример в студию.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33891981
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
? пример в студию.

Чего пример? Может еще сплясать?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892127
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Timm
? пример в студию.

Чего пример? Может еще сплясать?
если хотите.
пример когда select for update является дорогим решением. вы же говорите обычно это так, значит с примерами это подтверждающими проблем быть не должно.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892260
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm funikovyuri Timm
? пример в студию.

Чего пример? Может еще сплясать?
если хотите.
пример когда select for update является дорогим решением. вы же говорите обычно это так, значит с примерами это подтверждающими проблем быть не должно.
Моя мысль сводится к тому что внесение взаимодействия с пользователем внуть транзакции дороже (в смысле как времени выполнения так и ресурсов), чем оптимистическая блокировка. Вы с этим не согласны?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892346
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Timm funikovyuri Timm
? пример в студию.

Чего пример? Может еще сплясать?
если хотите.
пример когда select for update является дорогим решением. вы же говорите обычно это так, значит с примерами это подтверждающими проблем быть не должно.
Моя мысль сводится к тому что внесение взаимодействия с пользователем внуть транзакции дороже (в смысле как времени выполнения так и ресурсов), чем оптимистическая блокировка. Вы с этим не согласны?
не понял что имеется ввиду в начале фразы. говорите попроще.
я так понял: пессимистичное блокирование дороже чем оптимистичное. оно?
вот это я хотел прояснить: что значит "дороже", в чем выражается и почему.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892484
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
не понял что имеется ввиду в начале фразы. говорите попроще.

Слушайте, Timm, я вам чем-то обязан, или у вас вообще ко всем притензии такие?

Timm
я так понял: пессимистичное блокирование дороже чем оптимистичное. оно?
вот это я хотел прояснить: что значит "дороже", в чем выражается и почему.


Я написал в чем и что значит "дороже", вроде по-русски. Именно дороже, а не удобнее. Почему, ну хотябы потому что на поддержание такой блокировки тратяться ресурсы как сервера (что может быть очень плохо) так и клиента (что менее важно). Обычно с этим не спорят. У pessimistic locking есть много фанатов, особенно из тех специалистов кто привык писать внутренние клиент-серверные приложения. Я с этим и не спорю, говорю лишь что она дороже. Из-за этого, например, для web-приложений с большим числом пользователей pessimistic locking неприемлема в принципе.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892549
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Timm
не понял что имеется ввиду в начале фразы. говорите попроще.

Слушайте, Timm, я вам чем-то обязан, или у вас вообще ко всем притензии такие?

Timm
я так понял: пессимистичное блокирование дороже чем оптимистичное. оно?
вот это я хотел прояснить: что значит "дороже", в чем выражается и почему.


Я написал в чем и что значит "дороже", вроде по-русски. Именно дороже, а не удобнее. Почему, ну хотябы потому что на поддержание такой блокировки тратяться ресурсы как сервера (что может быть очень плохо) так и клиента (что менее важно). Обычно с этим не спорят. У pessimistic locking есть много фанатов, особенно из тех специалистов кто привык писать внутренние клиент-серверные приложения. Я с этим и не спорю, говорю лишь что она дороже. Из-за этого, например, для web-приложений с большим числом пользователей pessimistic locking неприемлема в принципе.
1. никто ничего никому не обязан. идет обычная дискуссия, которую я хочу повернуть в русло конкретики.
2. я пытаюсь выяснить простые вещи: почему вы считаете что пессимистичное блокирование дороже? в чем это выражается? какие ресурсы тратятся? хочу узнать конкретику, не слушая общие слова (их везде полно).
3. ваши доводы сводятся к "обычно с этим не спорят". я не спорю. хочу узнать почему (сорри за повторение, но может хотя бы так станет понятно че я ваще тут делаю) и увидеть примеры.
PS. может мы вообще про разные вещи говорим? здесь я под "пессимистичным блокированием" имею ввиду обычное оптимистичное с предварительной проверкой (select for update nowait) непосредственно перед обновлением данных.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892670
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm

Я говорю про http://www.orafaq.com/papers/locking.pdf
про что говорите вы я не знаю, могли бы последовать своему совету и привести пример.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892925
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Timm

Я говорю про http://www.orafaq.com/papers/locking.pdf
про что говорите вы я не знаю, могли бы последовать своему совету и привести пример.
тынц
3 глава.
Второй метод, который называют оптимистическим блокированием, состоит в том,
чтобы сохранять старое и новое значения в приложении и использовать их при измене-
нии следующим образом:
Update table
Set column1 = :new_column1, column2 = :new_column2, ....
Where column1 = :old_column1
And column2 = :old_column2
Здесь мы оптимистически надеемся, что данные не изменились. Если в результате
изменена одна строка, значит, нам повезло: данные не изменились с момента считыва-
ния. Если изменено ноль строк, мы проиграли — кто-то уже изменил данные и необхо-
димо решить, что делать, чтобы это изменение не потерять. Должны ли мы заставлять
пользователя повторно выполнять транзакцию после запроса новых значений для стро-
ки (сбивая его с толку, поскольку снова может получиться так, что изменяемая им строка
обновлена другим сеансом)? Стоит ли попытаться совместить изменения, разрешая кон-
фликты двух изменений на основе бизнес-правил (что требует написания большого объе-
ма кода)? Конечно, для отключившихся пользователей последний вариант — единственно
возможный.

Стоит заметить, что и в этом случае тоже можно использовать оператор SELECT FOR
UPDATE NOWAIT. Представленный выше оператор UPDATE позволяет избежать по-
тери изменений, но может приводить к блокированию, "зависая" в ожидании заверше-
ния изменения строки другим сеансом. Если все приложения используют оптимисти-
ческое блокирование, то применение простых операторов UPDATE вполне допустимо,
поскольку строки блокируются на очень короткое время выполнения и фиксации изме-
нений. Однако если некоторые приложения используют пессимистическое блокирова-
ние, удерживая блокировки строк достаточно долго, имеет смысл выполнять оператор
SELECT FOR UPDATE NOWAIT непосредственно перед оператором UPDATE, чтобы
избежать блокирования другим сеансом.
Итак, какой же метод лучше? По моему опыту, пессимистическое блокирование очень
хорошо работает в Oracle (но вряд ли так же хорошо подходит для других СУБД) и име-
ет много преимуществ по сравнению с оптимистическим.

а вот добавлять TCN в каждую таблицу - это сильно...
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33892947
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
Вы, я надеюсь, поняли что пессимистической блокировкой называли не то что надо?

Timmа вот добавлять TCN в каждую таблицу - это сильно...

Этой фразы не понял!?
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893066
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri Timm
Вы, я надеюсь, поняли что пессимистической блокировкой называли не то что надо?
я об этом раньше уже сказал.
funikovyuriЭтой фразы не понял!?
ну как же. прочитал статью по ссылке. оттуда:

Worked Example.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> alter table EMP add TCN integer;
Table altered.
SQL> update EMP set TCN = dbms_utility.get_time;
 14  rows updated.
SQL> alter table EMP modify TCN not  null ;
Table altered.
create or replace trigger EMP_BITRG
before insert on EMP  for  each row
begin
/* NOTE - additional pre-insert code may go here */
/* set the initial transaction control number */
: new .TCN := dbms_utility.get_time;
end;
create or replace trigger EMP_BUTRG
before update on EMP  for  each row
begin
/* test for concurrency failure */
 if ( : new .TCN != :old.TCN+ 1  ) then
raise_application_error( - 20000 , ‘Concurrency Failure’ );
end  if ;
/* NOTE - additional pre-update code may go here */
/* update the transaction control number */
: new .TCN := dbms_utility.get_time;
end;
...
и так далее...
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893073
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А... ну нормальные люди для этого timestamp используют :)
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893083
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriА... ну нормальные люди для этого timestamp используют :)
и как? успешно? а сколько у вас таблиц с таймстемпами?
имхо это отвратительно.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893087
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 Timm:
я думаю вы не правы в данном вопросе. Пессимистический контроль транзакций всегда будет дороже по следующим причинам. Поскольку пессимистический контроль предполагает полную сериализацию это значит что как минимум:
1. В период всего выполнения текущей транзакции все остальные транзакции блокируются и кешируются dbms. После завершения текущей транзакции рдбмс должен взять из кэша следующию транзакцию и так далее. То есть dbms выполняет определенное количество дополнительной работы (блокировка и каширование) вызванной сериализацией транзакций.
2. Перед началом новой транзакции dbms должен будет кэшировать сегмент памяти и/или сделать записи в transaction log которые необходимы для атомарности операций.

Оптимистический контроль не требует вышеуказанных действий со стороны dbms:
1. В период всего выполнения текущей транзакции все остальные транзакции не блокируются и не кэшируются если между ними не возникает конфликта. Только если между транзакциями существует конфликт dbms должен будет выполнять какую то дополнительную работу.
2. Перед началом новой транзакции dbms не должен (во всяком случае не всегда) будет кэшировать сегмент памяти и/или сделать записи в transaction log потому что атомарность операции либо не требуется, либо ей ничего не угрожает.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893094
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
авторПессимистический контроль транзакций всегда будет дороже
сам себя исправляю, конечно песимистичное управление транзакциями не всегда дороже оптимистичного. Например, в случаях когда оптимистичный контроль должен будет постоянно разрешать конфликты между транзакциями он возможно будет дороже пессимистичного контроля.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893095
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm funikovyuriА... ну нормальные люди для этого timestamp используют :)
и как? успешно? а сколько у вас таблиц с таймстемпами?
имхо это отвратительно.

Я делал проект для Oracle 9i, J2SE5 и Hibernate. Таблиц именно этого модуля было где-то 10-15 штук - все с timestamp'ами. Модуль являлся частью системы из порядка 600-800 таблица в которых timestamp не применялись. Важно отметить что всю работу по использованию timestamp колонок брал hibernate. Очень кстати доволен остался :)

Если же все делать руками - да появляется некоторое количество дополнительно информации о которой нужно думать - но во-первых очень часть об этом вообще не думают (:() а во-вторых - нужно выбирать правильные средства работы
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893214
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OU2 Timm:
я думаю вы не правы в данном вопросе. Пессимистический контроль транзакций всегда будет дороже по следующим причинам. Поскольку пессимистический контроль предполагает полную сериализацию это значит что как минимум:
1. В период всего выполнения текущей транзакции все остальные транзакции блокируются и кешируются dbms. После завершения текущей транзакции рдбмс должен взять из кэша следующию транзакцию и так далее. То есть dbms выполняет определенное количество дополнительной работы (блокировка и каширование) вызванной сериализацией транзакций.
2. Перед началом новой транзакции dbms должен будет кэшировать сегмент памяти и/или сделать записи в transaction log которые необходимы для атомарности операций.

Оптимистический контроль не требует вышеуказанных действий со стороны dbms:
1. В период всего выполнения текущей транзакции все остальные транзакции не блокируются и не кэшируются если между ними не возникает конфликта. Только если между транзакциями существует конфликт dbms должен будет выполнять какую то дополнительную работу.
2. Перед началом новой транзакции dbms не должен (во всяком случае не всегда) будет кэшировать сегмент памяти и/или сделать записи в transaction log потому что атомарность операции либо не требуется, либо ей ничего не угрожает.
It depends on DBMS :)
В Оракле сериализуется только запись только блокированных строк. Накладные расходы на выполнение select for update nowait сравнимы с обычным select. Это является простой проверкой на занятость ресурса (непосредственно перед его обновлением). Если ее не будет, то все транзакции на запись будут сериализоваться. В любом случае.
Вопрос: что имеется ввиду под "кэшированием транзакций"? не ясно :-\

я использовал неправильный термин, с этим согласен. (хотя мне кажется использование явного блокирования строк(и) плохо соотносится с термином "оптимистичное блокирование")
funikovyuriЯ делал проект для Oracle 9i, J2SE5 и Hibernate. Таблиц именно этого модуля было где-то 10-15 штук - все с timestamp'ами. Модуль являлся частью системы из порядка 600-800 таблица в которых timestamp не применялись. Важно отметить что всю работу по использованию timestamp колонок брал hibernate. Очень кстати доволен остался :)
кто? хибернейт? правильно, ему все по барабану
можете привести здесь выдержки что и как? пример думаю будет полезен.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893251
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 Timm:
авторВ Оракле сериализуется только запись только блокированных строк.ммммм, допустим мы говорим о блокировки записи а не целой таблицы, принцип решения проблемы все равно останется таким же как и при блокировки всей таблицы.
Если бы видеть детальное описание принципов работы oracle dbms дискуссию можно было бы считать закрытой, но до тех пор я всетаки останусь на своих позициях (не то что бы я вашим доводам не верил конечно, просто это "классика жанра"). авторВопрос: что имеется ввиду под "кэшированием транзакций"? имеется ввиду помещения блокированых транзакций в очередь до их выполнения.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893758
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
кто? хибернейт? правильно, ему все по барабану
можете привести здесь выдержки что и как? пример думаю будет полезен.

Сразу видно большого специалиста по Hibernate. Ну а полезные примеры есть тут http://www.hibernate.org/hib_docs/reference/en/html/transactions.html#transactions-optimistic
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33893843
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OU2 Timm:
авторВ Оракле сериализуется только запись только блокированных строк.ммммм, допустим мы говорим о блокировки записи а не целой таблицы, принцип решения проблемы все равно останется таким же как и при блокировки всей таблицы.
Если бы видеть детальное описание принципов работы oracle dbms дискуссию можно было бы считать закрытой, но до тех пор я всетаки останусь на своих позициях (не то что бы я вашим доводам не верил конечно, просто это "классика жанра"). авторВопрос: что имеется ввиду под "кэшированием транзакций"? имеется ввиду помещения блокированых транзакций в очередь до их выполнения.
К счастью нет.
Да. Теперь я уверен что мы говорим о разных подходах в DBMS. Очень хорошо этот момент описан у Кайта (ссылка выше, 1 глава - must read)
Ниже приведены принципы блокирования в СУБД Oracle.
• Oracle блокирует данные на уровне строк и только при изменении. Эскалация бло-
кировок до уровня блока или таблицы никогда не выполняется.
• Oracle никогда не блокирует данные с целью считывания. При обычном чтении
блокировки на строки не устанавливаются.
• Сеанс, записывающий данные, не блокирует сеансы, читающие данные. Повто-
рю: операции чтения не блокируются операциями записи. Это принципиально от-
личается от практически всех остальных СУБД, в которых операции чтения бло-
кируются операциями записи.
• Сеанс записи данных блокируется, только если другой сеанс записи уже забло-
кировал строку, которую предполагается изменять. Сеанс считывания данных ни-
когда не блокирует сеанс записи.
...
Рейтинг: 0 / 0
обновление данных в многопользовательском Веб-приложении
    #33894254
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 Timm:
спасибо, интересное замечание, пойду погуглю эту тему.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / обновление данных в многопользовательском Веб-приложении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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