Как вы останавливаете условия гонки в MySQL? проблема возникает из-за простого алгоритма:
- выберите строку из таблицы
- если он не существует, вставьте его
а затем либо вы получите повторяющуюся строку, либо если вы предотвратите ее с помощью уникальных/первичных ключей, ошибка.
Теперь, как правило, я думаю, что здесь помогают транзакции, но поскольку строка не существует, транзакция фактически не помогает (или я что-то не хватает?).
LOCK TABLE звучит как перебор, особенно если таблица обновляется несколько раз в секунду.
Единственное другое решение, о котором я могу думать, это GET_LOCK() для каждого другого идентификатора, но не лучший ли он? Здесь нет проблем с масштабируемостью? А также, делая это для каждого стола, звучит немного неестественно, так как это звучит как очень распространенная проблема в базах данных concurrency для меня.