|
|
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть задача - сделать для серверной части компьютерной игры турниры. Турниры должны быть ограничены по времени, и по окончанию начинать следующий турнир сохраняя результаты участников. Как сделано сейчас - есть event который каждую секунду опрашивает нет ли турниров, которые нужно закрыть. Если есть - вызывает хранимую процедуру закрытия турнира, в которой описаны все необходимые действия. Последним действием в хранимой процедуре закрытия турнира вызывается хранимая процедура начала нового турнира. Все это работает в целом нормально, но я хотел бы заблокировать все используемые таблицы на время всего комплекса действий, чтобы пользователям не ушли случайно некорректные данные. Однако в хранимых процедурах нельзя использовать LOCK TABLES и UNLOCK TABLES. Как вы обходите эти ограничения? Используете что-то вместо хранимых процедур? Какие-то сторонние шедулеры? Заранее благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 15:46:19 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
Akorosзаблокировать все используемые таблицы на время всего комплекса действий, чтобы пользователям не ушли случайно некорректные данные.Вы явно делаете что-то не так, если такое понадобилось. AkorosКак вы обходите эти ограничения?Мы на них не натыкаемся :) AkorosКакие-то сторонние шедулеры?И встроенные, и внешние. Сейчас пока сложно посоветовать что-то конкретное, т.к. непонятна связь между турнирами и таблицами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:05:17 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
Каждый турнир представлен записями в нескольких таблицах. Скажем Tournaments, TournamentsMembers, TournamentsRewards, TournamentConditions для текущих турниров. PastTournaments, PastMembers, PastRewards, PastConditions для прошедших. В процедуре закрытия турнира копируются данные из таблиц текущих турниров в таблицы прошедших турниров, после чего ненужные записи из таблиц текущих турниров удаляются. Перенос этих данных происходит последовательно. И может случиться ситуация, что посреди процесса придет новый результат от клиента - проверка обнаружит что нужный турнир есть (пока еще) и запишется, отправив на клиент сообщение что все ок. После чего и турнир и записи старых результатов будут удалены. Вот если бы можно было заблокировать таблицы на время работы процедур - клиенту бы пришло сообщение об ошибке, которое можно было бы нормально разобрать. miksoftИ встроенные, и внешние. А какие конкретно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:54:16 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
AkorosmiksoftИ встроенные, и внешние. А какие конкретно?Внешние - обычный системный cron. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:57:43 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
Akorosпроверка обнаружит что нужный турнир есть (пока еще) Значит, начинать надо с удаления (или пометки как завершённый) записи в таблице турниров. А потом уже не спеша сносить все данные в архив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 18:04:13 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
miksoftAkorosпропущено... А какие конкретно?Внешние - обычный системный cron. Ясно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 18:49:11 |
|
||
|
Как можно обойти запрет на LOCK TABLES в хранимых процедурах?
|
|||
|---|---|---|---|
|
#18+
AkinaAkorosпроверка обнаружит что нужный турнир есть (пока еще) Значит, начинать надо с удаления (или пометки как завершённый) записи в таблице турниров. А потом уже не спеша сносить все данные в архив. Спасибо, да это поможет, но там есть еще некоторые неприятные моменты, которые все разом можно было бы обойти принудительной блокировкой таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 18:50:09 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1833356]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 308ms |

| 0 / 0 |
