Расовые условия MariaDB - PullRequest
       61

Расовые условия MariaDB

0 голосов
/ 12 марта 2020

Я пытаюсь найти решение проблемы гонки MariaDB. В некоторых случаях несколько процессов выполняются практически одновременно (с одной и той же временной меткой, полученной от некоторых модулей в поле), и им нужно читать одну и ту же строку каждый (но только первый должен выполнить действие) .

Я думал заблокировать строку (только строка, блокировка всей таблицы не вариант), поэтому первый процесс прочитает ее и проверит отметку времени последнего обновления, выполнит необходимую задачу и когда он разблокирован, другие процессы смогут его прочитать, а если у него та же временная метка, просто проигнорируйте его.

Это повлияет на производительность, но только в тех немногих случаях, когда это происходит.

Я пытался сделать это в MariaDB, но я не могу найти, как ... запуск транзакции и выполнение FOR UPDATE, кажется, блокирует всю таблицу, потому что я пока не могу получить другие строки.

И, читая документацию MariaDB, я вижу это

Когда в операторе SELECT указан LOCK IN SHARE MODE, MariaDB будет ждать, пока все транзакции, которые изменили строки, будут зафиксированы. Затем получается блокировка записи. Все транзакции могут читать строки, но если они хотят изменить их, они должны ждать, пока ваша транзакция не будет зафиксирована.

Итак, что я хочу сделать в MariaDB?

Есть идеи?

Спасибо,

...