| 
 | 
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Привет. Системы бронирования просто как пример упомянуты для наглядности, хотя вопрос более общий: как предотвратить получение несколькими пользователями одинаковых результатов? Именно с программной точки зрения. В какой момент и какие куски данных нужно блокировать? Есть ли какие-то общие подходы? Возвращаясь к бронированию, возьмем к примеру один кинозал в одном городе. Два человека примерно одновременно выбирают себе места на один сеанс. Как их НЕ посадить на одно место? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 16:32 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Купить/поставить нормальную СУБД ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 16:41 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Вот меня и интересует, как решаются подобные задачи нормальными СУБД ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 16:44 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx Вот меня и интересует, как решаются подобные задачи нормальными СУБД Почитайте про СУБД в формате версионник(Oracle,Postgres) и блокировочник(MS SQL,DB2 и т.д) Темы эти перетирались в разделе Сравнение СУБД ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 16:47 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx Вот меня и интересует, как решаются подобные задачи нормальными СУБД ACID and Serializable Гуглим эти два слова. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 21:18 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 13.02.2020, 22:49 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  когда один выкупает место, другому JS (JavaScript) обновляет экран, после связи с сервером как они там обрабатывают "передумал" это они сами решают но вообще "бронь" это бронь. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 00:49 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx, Оптимистическая блокировка ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 09:18 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? Обычно включается таймер - оплатить в течении 10 минут или похожее. На это время место блокируется и пропадает из свободных. Если оплатил - остаётся тебе. Не успел оплатить - снова становится свободным. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 09:56 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx Возможно, я некорректно вопрос сформулировал или ввел в заблуждение фразой "... с программной точки зрения". Тогда попробую совсем конкретно: тот же кинозал, осталось 10 (или 5, или 100, не суть) свободных мест. Два человека в одно и то же время разглядывают на сайте кинотеатра оставшиеся места и думают, какое из них выбрать. операция покупки - это промежуток времени от события "выбрал" до завершения оплаты. реально это несколько минут. Или полчаса. Тоже не принципиально. Напрашивается, что в момент выбора выбранное место должно быть каким-то образом закреплено за первым его выбравшим. Это действительно так? Если да, то как это происходит? Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? выдается один и тот же guid объекта (места) двум юзерам. при записи - которая возможна если гуид текущий места и тот с которым пришел клиент обратно в субд одинаков. версия объекта после записи обновляется - соответственно второй клиент получает неравенство текущей версии гуида объекта (места) и того гуида который он получал. ему сообщается, что "поезд ушел" и надо обновлять данные по свободным местам заново. вам же написали про версионники и блокировочники - смотрите в вики ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 09:58 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Свободные объекты доступны для одновременного выбора. В момент, когда пользователь нажимает «Забронировать», объект резервируется за данным пользователем на определенный период. Если он за этот период подтвердит броню (оплатит заказ), то он за ним и остается. Если не подтвердит, то резерв снимается. Если другие пользователи попытаются забронировать резервированный или использованный объект, то получат сообщение о том, что он уже занят, нужно выбрать другой объект. Бэкэнд должен иметь метод «Забронировать», при вызове которого он либо осуществляет резервирование, либо возвращает ошибку. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 10:45 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ну вопрос бронирования это ни в коем случае не вопрос СУБД, а вопрос приложение. Допустимо бронирование билета или нет. то есть когда пользователь1 и пользователь2 загрузили посмотреть себе список билетов одновременно, пользователь1 забронировал билет с местом 10 , у него поставили флаг БРОНЬ. когда пользователь2 стал бронировать билет 10, то попытка брони должна завершиться с отказом, так как билет 10 уже в брони. тут возникает вопрос, когда обе операции пойдут одновременно - тут уже блокировками СУБД можно воспользоваться - надо обеспечить, чтобы запрос билета на смену флага мог выполнить только один пользователь. вот конкретно эту операцию разумно СУБД поручить. во всяком случае примерно так наша билетная площадка работает ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 15:24 | 
  
  
  
   | 
||
| 
 
Как работают системы бронирования? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  swkx Или процедура выбора обоими желающими (отметил одно, затем передумал, отметил другое и т.п.) никак системой не контролируется и если оба выбрали одно место, реально его получит первый завершивший оплату? IMHO Зависит от дизайнера/заказчика системы. Можно сделать и так и этак Например в Ulmart, Ozon я вполне могу забронировать товар и его не забрать (не купить). Не только в базе запись будет заблокирована, но возможно даже пара грузовиков туда-сюда сьездят. Ulmart / Ozon ничего особо плохого в этом не видят. Если интресует, как сделано на конкретном сайте - ну сделайте опыт. Купити пару авиабилетов и посмотрите, как поведет себя система. Делов-то на пару тысячь(десятков тысячь, если весь остаток на рейс покупать) $ ))) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.02.2020, 15:37 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?desktop=1&fid=33&tid=1547124]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    58ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    51ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 231ms | 
| total: | 389ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.»
    
    
    ... бла, бла, бла ...