У меня есть некий кусок кода для обновления/добавления записи в БД который выбирает запись из БД 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 ?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как сделать баланс и хранить его не в базе данных, а в файле?
Добавляю форму загрузки файла в свой скрипт, но настранице с формой отображается ошибка
Запустил серверНаписал скрипт, который нужно выполнять два раза в день(утром и вечером)
Есть таблица БД с текстовыми полями ~30млнзаписей UTF-8