MySQL одновременных обновлений одной строки - PullRequest
0 голосов
/ 26 октября 2019

Какова общая схема в СУБД для хранения часто обновляемых данных. Предположим, у меня есть таблица, в которой хранятся идентификатор очереди и последний идентификатор клиента.

CREATE TABLE queues(
   queue_id int primary key,
   last_client_id int
);

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

Однако, поскольку MySQL использует блокировку, поддерживаемый TPS ограничен,В настоящее время я вижу проблемы, начиная с 60 транзакций в секунду, пытаясь обновить ту же строку. Транзакции ждут блокировок и позже завершаются с ошибкой lock wait timeout.

  1. Можно ли решить эту проблему с помощью повторного проектирования таблицы RDBMS? Какие есть варианты?
  2. Есть ли какой-нибудь общий способ оптимизировать его в MySQL?
  3. Если вы решили подобную проблему, поделитесь своими мыслями.
...