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

Блокировочник бы не дал прочитать данные чел2 пока не закончит транзакцию чел1.
Как в версионнике контролируется недопустимость отрицательного остатка.
...
Рейтинг: 0 / 0
Версионные субд
    #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
Версионные субд
    #39004530
Фотография roden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде по-разному, с Linter Multiversion была приблизительно такая ситуация: Многоверсионность в k-press.ru
...
Рейтинг: 0 / 0
Версионные субд
    #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]