У меня есть некий кусок кода для обновления/добавления записи в БД который выбирает запись из БД SELECT-ом, и если она есть - делает UPDATE, если нет - INSERT.
Проблема в следующем: если зафлудить скрипт (вызвать через мерную нагрузку), то начинают появляться дубликаты записей. Т.е. как я понимаю, SELECT-ы как-то группируются и кэшируются что-ли?
Кто может объяснить такое поведение?
Понятно, что добавив уникальное значение в таблицу, можно избежать дубликаты, но по Т.З. уникальным полем для обновления данных - может выступать любое поле в ходе обращения к скрипту.
Данная проблема возникла на конкретном рабочем проекте, но для теста я смог ее воспроизвести в помощью скрипта: https://pastebin.com/BjR8tXzC и ab-тестером:
ab -n 1000 -c 10 http://site.com/test-overload.php
Тестовая таблица (SHOW CREATE TABLE test_overload;):
CREATE TABLE `test_overload` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`code` int(11) unsigned NOT NULL DEFAULT '0',
`data` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Возможно ли как-то изменить поведение, чтоб не появлялись дубликаты? (кроме INSERT ... ON DUPLICATE KEY UPDATE ...) Может настройка MySQL ?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости