Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Разработка информационных систем Новый топик    Ответить
 Как работают системы бронирования?  [new]
swkx
Member

Откуда:
Сообщений: 104
Привет.

Системы бронирования просто как пример упомянуты для наглядности,
хотя вопрос более общий: как предотвратить получение несколькими пользователями одинаковых результатов?

Именно с программной точки зрения.
В какой момент и какие куски данных нужно блокировать?
Есть ли какие-то общие подходы?

Возвращаясь к бронированию, возьмем к примеру один кинозал в одном городе.
Два человека примерно одновременно выбирают себе места на один сеанс.

Как их НЕ посадить на одно место?
13 фев 20, 16:32    [22079395]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8308
Купить/поставить нормальную СУБД ?
13 фев 20, 16:41    [22079409]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
swkx
Member

Откуда:
Сообщений: 104
Вот меня и интересует, как решаются подобные задачи нормальными СУБД
13 фев 20, 16:44    [22079412]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1700
swkx
Вот меня и интересует, как решаются подобные задачи нормальными СУБД

Почитайте про СУБД в формате версионник(Oracle,Postgres) и блокировочник(MS SQL,DB2 и т.д)
Темы эти перетирались в разделе Сравнение СУБД
13 фев 20, 16:47    [22079416]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2148
swkx
Вот меня и интересует, как решаются подобные задачи нормальными СУБД

ACID and Serializable
Гуглим эти два слова.
13 фев 20, 21:18    [22079593]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
swkx
Member

Откуда:
Сообщений: 104
Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения".

Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать.

операция покупки - это промежуток времени от события "выбрал" до завершения оплаты.
реально это несколько минут. Или полчаса. Тоже не принципиально.

Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим.

Это действительно так? Если да, то как это происходит?

Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату?
13 фев 20, 22:49    [22079640]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1296
когда один выкупает место, другому JS (JavaScript) обновляет экран, после связи с сервером
как они там обрабатывают "передумал" это они сами решают
но вообще "бронь" это бронь.

Сообщение было отредактировано: 14 фев 20, 00:49
14 фев 20, 00:49    [22079679]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
Изопропил
Member

Откуда:
Сообщений: 31424
swkx,

Оптимистическая блокировка
14 фев 20, 09:18    [22079740]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2148
swkx
Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения".

Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать.

операция покупки - это промежуток времени от события "выбрал" до завершения оплаты.
реально это несколько минут. Или полчаса. Тоже не принципиально.

Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим.

Это действительно так? Если да, то как это происходит?

Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату?


Обычно включается таймер - оплатить в течении 10 минут или похожее.
На это время место блокируется и пропадает из свободных. Если оплатил - остаётся тебе. Не успел оплатить - снова становится свободным.
14 фев 20, 09:56    [22079763]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
МодальноеОкно
Member

Откуда:
Сообщений: 2937
swkx
Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения".

Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать.

операция покупки - это промежуток времени от события "выбрал" до завершения оплаты.
реально это несколько минут. Или полчаса. Тоже не принципиально.

Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим.

Это действительно так? Если да, то как это происходит?

Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату?


выдается один и тот же guid объекта (места) двум юзерам. при записи - которая возможна если гуид текущий места и тот с которым пришел клиент обратно в субд одинаков. версия объекта после записи обновляется - соответственно второй клиент получает неравенство текущей версии гуида объекта (места) и того гуида который он получал. ему сообщается, что "поезд ушел" и надо обновлять данные по свободным местам заново.

вам же написали про версионники и блокировочники - смотрите в вики
14 фев 20, 09:58    [22079765]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3450
Свободные объекты доступны для одновременного выбора.
В момент, когда пользователь нажимает «Забронировать», объект резервируется за данным пользователем на определенный период.
Если он за этот период подтвердит броню (оплатит заказ), то он за ним и остается. Если не подтвердит, то резерв снимается.
Если другие пользователи попытаются забронировать резервированный или использованный объект, то получат сообщение о том, что он уже занят, нужно выбрать другой объект.
Бэкэнд должен иметь метод «Забронировать», при вызове которого он либо осуществляет резервирование, либо возвращает ошибку.
14 фев 20, 10:45    [22079802]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
monstrU
Member

Откуда: Москва
Сообщений: 1190
ну вопрос бронирования это ни в коем случае не вопрос СУБД, а вопрос приложение. Допустимо бронирование билета или нет.
то есть когда пользователь1 и пользователь2 загрузили посмотреть себе список билетов одновременно, пользователь1 забронировал билет с местом 10 , у него поставили флаг БРОНЬ. когда пользователь2 стал бронировать билет 10, то попытка брони должна завершиться с отказом, так как билет 10 уже в брони.
тут возникает вопрос, когда обе операции пойдут одновременно - тут уже блокировками СУБД можно воспользоваться - надо обеспечить, чтобы запрос билета на смену флага мог выполнить только один пользователь.
вот конкретно эту операцию разумно СУБД поручить.

во всяком случае примерно так наша билетная площадка работает
14 фев 20, 15:24    [22080113]     Ответить | Цитировать Сообщить модератору
 Re: Как работают системы бронирования?  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8308
swkx

Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату?


IMHO Зависит от дизайнера/заказчика системы. Можно сделать и так и этак

Например в Ulmart, Ozon я вполне могу забронировать товар и его не забрать (не купить). Не только в базе запись будет заблокирована, но возможно даже пара грузовиков туда-сюда сьездят. Ulmart / Ozon ничего особо плохого в этом не видят.

Если интресует, как сделано на конкретном сайте - ну сделайте опыт. Купити пару авиабилетов и посмотрите, как поведет себя система. Делов-то на пару тысячь(десятков тысячь, если весь остаток на рейс покупать) $ )))
14 фев 20, 15:37    [22080120]     Ответить | Цитировать Сообщить модератору
Все форумы / Разработка информационных систем Ответить