Моя текущая настройка — это таблица InnoDB, в которой хранятся нужные мне счетчики. Каждая строка идентифицируется ключом и имеет значение счетчика (последнее использованное значение).
Это используется приложением PHP, которому нужны уникальные идентификаторы для разных объектов. Не должно быть дублирования чисел, и это не может быть сделано с ограничениями в конце столбца, поскольку сам счетчик сбрасывается.
Номер не всегда извлекается в конце транзакции, и с помощью выбора для обновления или даже для обновления и выбора ресурс будет заблокирован, пока транзакция не будет зафиксирована. Некоторые транзакции довольно тяжелые (рефакторинг не является опцией на данный момент), и они создают тайм-аут ожидания блокировки для достижения этого ресурса.
Что было бы лучшим решением для реализации этого счетчика, используя только MySQL.
Я использовал это решение некоторое время, прежде чем перенести свои счетчики в Redis.
UPDATE `counters` SET `children_count` = (SELECT (@a:= `children_count` + 1))
WHERE `node_id` = 1'
Тогда вы получите значение с
SELECT @a AS `children_count`
Значение доступно в текущем сеансе.
Других решений пока нет …