Как MySQL обрабатывает порядок блокировки очереди для SELECT... FOR UPDATE?MySql

Форум по Mysql
Ответить
Anonymous
 Как MySQL обрабатывает порядок блокировки очереди для SELECT... FOR UPDATE?

Сообщение Anonymous »

У меня есть сценарий, в котором несколько заданий (задание1, задание2 и задание3) могут поступить одновременно и должны выполняться последовательно. Я использую MySQL с движком InnoDB и механизмом блокировки с таблицей lock_table. Вот схема таблицы:

Код: Выделить всё

CREATE TABLE lock_table (
key_name VARCHAR(255) NOT NULL,
UNIQUE KEY (key_name)
) ENGINE = InnoDB;

Вот рабочий процесс, которого я пытаюсь достичь:
  • job1 получает блокировку, используя:

Код: Выделить всё

 SELECT * FROM lock_table WHERE key_name = 'resource1' FOR UPDATE;

Это предотвращает доступ других заданий к тому же ресурсу (ресурс1) до завершения задания 1.
  • Пока задание 1 выполняется, задание 2 и задание 3 также запрашивают одну и ту же блокировку:

Код: Выделить всё

SELECT * FROM lock_table WHERE key_name = 'resource1' FOR UPDATE;
Эти задания должны дождаться завершения задания 1.
  • После завершения задания 1 я хочу, чтобы задания в очереди (задание2 и задание3) для выполнения в том порядке, в котором они запросили блокировку.
Мои вопросы:
< ol>
[*]Гарантирует ли механизм MySQL SELECT ... FOR UPDATE, что задания (job2 и job3) будут выполняться в том порядке, в котором они запросили блокировку?
[*]Есть ли официальная ссылка на документацию MySQL, в которой объясняется, как MySQL обрабатывает порядок запросов блокировки в очереди?[*]Является ли этот подход лучшей практикой для сериализации выполнения заданий или есть лучший способ добиться этого?

Я разрабатываю система, в которой несколько заданий (задание1, задание2, задание3 и т. д.) могут попытаться обработать один и тот же ресурс одновременно. Чтобы обеспечить сериализованное выполнение, я использую MySQL SELECT... FOR UPDATE, чтобы заблокировать ресурс на основе его key_name.

Подробнее здесь: https://stackoverflow.com/questions/793 ... for-update
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»