Гость
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Версионные субд / 4 сообщений из 4, страница 1 из 1
09.07.2015, 10:21
    #39003124
ovle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионные субд
День добрый. Возник такой вопрос.
В версионной субд происходит так:
- Чел1 читает остаток из версии1
- Чел2 читает остаток из версии1
- Чел1 записывает остаток
- Чел2 записывает остаток

Блокировочник бы не дал прочитать данные чел2 пока не закончит транзакцию чел1.
Как в версионнике контролируется недопустимость отрицательного остатка.
...
Рейтинг: 0 / 0
09.07.2015, 10:34
    #39003135
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионные субд
ovleДень добрый. Возник такой вопрос.
В версионной субд происходит так:
- Чел1 читает остаток из версии1
- Чел2 читает остаток из версии1
- Чел1 записывает остаток
- Чел2 записывает остаток

Блокировочник бы не дал прочитать данные чел2 пока не закончит транзакцию чел1.
Как в версионнике контролируется недопустимость отрицательного остатка.

как и в блокировочнике все зависит от уровня изолированности.
на уровне RC предполагается, что оба читать будут с помощью SELECT FOR UPDATE, который сериализует транзакции
на уровне SERIALIZABLE даже без SELECT FOR UPDATE один из них получит exception can't serialize access for this transaction

блокировочник не даст "прочитать данные чел2" только на уровне Repeateble Read и выше, на дефолтном RC вы получите классический lost update.
...
Рейтинг: 0 / 0
10.07.2015, 15:13
    #39004530
roden
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионные субд
Везде по-разному, с Linter Multiversion была приблизительно такая ситуация: Многоверсионность в k-press.ru
...
Рейтинг: 0 / 0
10.07.2015, 15:31
    #39004552
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионные субд
ovleБлокировочник бы не дал прочитать данные чел2 пока не закончит транзакцию чел1
Это не совсем так. В целом, Вам нужно глубже погрузиться в детали реализации разных уровней изоляции в конкретных разных СУБД.

ovleКак в версионнике контролируется недопустимость отрицательного остатка.
Ну, самый простой вариант -

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create table goods(id integer, qnt integer check (qnt >= 0));

create procedure consume(p_id integer, p_qnt integer) is
begin
  update goods 
    set qnt = qnt - p_qnt
    where id = p_id;
end;
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Версионные субд / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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