Параллельные счетчики на MySQL

Моя текущая настройка — это таблица InnoDB, в которой хранятся нужные мне счетчики. Каждая строка идентифицируется ключом и имеет значение счетчика (последнее использованное значение).

Это используется приложением PHP, которому нужны уникальные идентификаторы для разных объектов. Не должно быть дублирования чисел, и это не может быть сделано с ограничениями в конце столбца, поскольку сам счетчик сбрасывается.

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

Что было бы лучшим решением для реализации этого счетчика, используя только MySQL.

0

Решение

Я использовал это решение некоторое время, прежде чем перенести свои счетчики в Redis.

UPDATE `counters` SET `children_count` = (SELECT (@a:= `children_count` + 1))
WHERE `node_id` = 1'

Тогда вы получите значение с

SELECT @a AS `children_count`

Значение доступно в текущем сеансе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]