2015-05-30 4 views
0

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

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

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

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

ответ

1

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

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

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

SELECT @a AS `children_count` 

Значение является availavale в текущей сессии.

Смежные вопросы