Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
13.02.2020, 16:32
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
Привет. Системы бронирования просто как пример упомянуты для наглядности, хотя вопрос более общий: как предотвратить получение несколькими пользователями одинаковых результатов? Именно с программной точки зрения. В какой момент и какие куски данных нужно блокировать? Есть ли какие-то общие подходы? Возвращаясь к бронированию, возьмем к примеру один кинозал в одном городе. Два человека примерно одновременно выбирают себе места на один сеанс. Как их НЕ посадить на одно место? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.02.2020, 16:41
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
Купить/поставить нормальную СУБД ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.02.2020, 16:44
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
Вот меня и интересует, как решаются подобные задачи нормальными СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.02.2020, 16:47
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
swkx Вот меня и интересует, как решаются подобные задачи нормальными СУБД Почитайте про СУБД в формате версионник(Oracle,Postgres) и блокировочник(MS SQL,DB2 и т.д) Темы эти перетирались в разделе Сравнение СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.02.2020, 21:18
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
swkx Вот меня и интересует, как решаются подобные задачи нормальными СУБД ACID and Serializable Гуглим эти два слова. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.02.2020, 22:49
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 00:49
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
когда один выкупает место, другому JS (JavaScript) обновляет экран, после связи с сервером как они там обрабатывают "передумал" это они сами решают но вообще "бронь" это бронь. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 09:18
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
swkx, Оптимистическая блокировка ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 09:56
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
swkx Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? Обычно включается таймер - оплатить в течении 10 минут или похожее. На это время место блокируется и пропадает из свободных. Если оплатил - остаётся тебе. Не успел оплатить - снова становится свободным. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 09:58
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
swkx Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? выдается один и тот же guid объекта (места) двум юзерам. при записи - которая возможна если гуид текущий места и тот с которым пришел клиент обратно в субд одинаков. версия объекта после записи обновляется - соответственно второй клиент получает неравенство текущей версии гуида объекта (места) и того гуида который он получал. ему сообщается, что "поезд ушел" и надо обновлять данные по свободным местам заново. вам же написали про версионники и блокировочники - смотрите в вики ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 10:45
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
Свободные объекты доступны для одновременного выбора. В момент, когда пользователь нажимает «Забронировать», объект резервируется за данным пользователем на определенный период. Если он за этот период подтвердит броню (оплатит заказ), то он за ним и остается. Если не подтвердит, то резерв снимается. Если другие пользователи попытаются забронировать резервированный или использованный объект, то получат сообщение о том, что он уже занят, нужно выбрать другой объект. Бэкэнд должен иметь метод «Забронировать», при вызове которого он либо осуществляет резервирование, либо возвращает ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 15:24
|
|||
---|---|---|---|
Как работают системы бронирования? |
|||
#18+
ну вопрос бронирования это ни в коем случае не вопрос СУБД, а вопрос приложение. Допустимо бронирование билета или нет. то есть когда пользователь1 и пользователь2 загрузили посмотреть себе список билетов одновременно, пользователь1 забронировал билет с местом 10 , у него поставили флаг БРОНЬ. когда пользователь2 стал бронировать билет 10, то попытка брони должна завершиться с отказом, так как билет 10 уже в брони. тут возникает вопрос, когда обе операции пойдут одновременно - тут уже блокировками СУБД можно воспользоваться - надо обеспечить, чтобы запрос билета на смену флага мог выполнить только один пользователь. вот конкретно эту операцию разумно СУБД поручить. во всяком случае примерно так наша билетная площадка работает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.02.2020, 15:37
|
|||
---|---|---|---|
|
|||
Как работают системы бронирования? |
|||
#18+
swkx Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? IMHO Зависит от дизайнера/заказчика системы. Можно сделать и так и этак Например в Ulmart, Ozon я вполне могу забронировать товар и его не забрать (не купить). Не только в базе запись будет заблокирована, но возможно даже пара грузовиков туда-сюда сьездят. Ulmart / Ozon ничего особо плохого в этом не видят. Если интресует, как сделано на конкретном сайте - ну сделайте опыт. Купити пару авиабилетов и посмотрите, как поведет себя система. Делов-то на пару тысячь(десятков тысячь, если весь остаток на рейс покупать) $ ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=33&mobile=1&tid=1547124]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 147ms |
0 / 0 |