|
|
|
Конкуренция за запись при UPDATE + SELECT
|
|||
|---|---|---|---|
|
#18+
Коллеги, добрый день! В начале пример (просто пример, для понимания того, что происходит в базе и почему): Клиент: Предположим, что есть некий ресурс, который продает билеты в кино. При этом ресурс предлагает просто КУПИТЬ билет на сеанс, не предлагая при этом, например, место! Всего 20-ть билетов. И вот, появилась толпа тех, кто хотел бы купить билет и практически в одно время нажимают кнопку "КУПИТЬ". Толпа допустим состоит из 50-ти юзеров. И надо понимать, что они нажали кнопку в одно время. Сервер: При этом на базе, инициализируется алгоритм, который делает UPDATE первой попавшейся записи, у которой booked=0 (т.е. букает запись), проставляя ей признак booked = 1. Теперь мы понимаем, что записей было 20-ть, а юзеров 50 и все происходит в один момент. Справится ли с этой работой MySQL? Какие могут быть блокировки или другие варианты неблагополучные, которые могут базу подвесить? И как сделать правильно UPDATE, чтобы измежать возможных проблем. Если проще, то есть например такой SQL: update ticket_table set booked=1 where id_ticket = (select id_ticket from ticket_table where booked = 0 and rownum =1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 11:30:32 |
|
||
|
Конкуренция за запись при UPDATE + SELECT
|
|||
|---|---|---|---|
|
#18+
senyOrесть например такой SQL:Это проблемы в полный рост. RTFM "SELECT ... FOR UPDATE" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 13:32:17 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=183&tid=1835065]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 294ms |

| 0 / 0 |
