В настоящее время я создаю огромный массив базы данных со многими транзакциями. (Вставить, Обновить, Выбрать) с MySQL MyISAMMySQL Locking System
И я рассматриваю возможность использовать ТАБЛИЦУ LOCK TABLE и UNLOCK TABLE для чувствительных таблиц. Что произойдет, если:
Пользователь A имеет процесс обновления (сначала блокирует таблицу), и все еще не работает, пользователь B и пользователь C пытаются получить доступ к одной и той же таблице и строке (независимо от того, является ли это обновление/выбор).
- Сможет ли B и C получить SQL-ошибку о блокировке таблиц?
- Имеет ли MySQL время блокировки до того, как оно вернет ошибку? Если есть таймаут блокировки, как я могу проверить тайм-аут блокировки на моем сервере?
- Лучшее решение, чем блокировка столов? Мы рассматриваем создание таблицы для очереди заданий. Но я думаю, что производительность будет очень плохой.
Эта таблица действительно чувствительна, и она будет перепутались, если я не могу предотвратить это
Спасибо за ваш ответ
звучит для меня лучше использовать 'InnoDB', поскольку он поддерживает транзакции и блокировку на уровне строк. – Stephan
MyISAM не может выполнять транзакции. Я предлагаю вам использовать MariaDB или Percona, который является более стабильным и имеет лучшие функции блокировки по умолчанию. Вам не нужно выполнять ручную блокировку. Возможность резервного копирования - это всегда 'backlog' и репликации. – DanFromGermany
Вам нужно знать о типах двигателей и их причудах, или вы хотите проверить, какой лучший способ реализовать очередь заданий в соответствии с вашими спецификациями? –