Какова общая схема в СУБД для хранения часто обновляемых данных. Предположим, у меня есть таблица, в которой хранятся идентификатор очереди и последний идентификатор клиента.
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
.
- Можно ли решить эту проблему с помощью повторного проектирования таблицы RDBMS? Какие есть варианты?
- Есть ли какой-нибудь общий способ оптимизировать его в MySQL?
- Если вы решили подобную проблему, поделитесь своими мыслями.