Доброго времени суток. Хочу спросить совета знатоков, или любых соображений "по поводу". Пишу "паука". Заходит на страницу, выбирает оттуда все ссылки и заносит их в БД MySQL. Перед добавлением найденной ссылки в БД проверяю, нет ли там её уже.Это создает наибольшую нагрузку на MySQL сервер ( даже выделил под это отдельный хост ) . Проверяю простым запросом 'SELECT url FROM name WHERE url ="'+NewLink+'" LIMIT 1;' url объявлен как VARCHAR(255) (если это важно) Этот запрос тормозит всю работу. Нужно снизить нагрузку на MySQL сервер. Думаю, варианты такие 1.Высчитывать хеш и отписывать его в MySQL, что бы в последствии проводить поиск не по url, а по хешу. Само поле с хешем объявить первичным ключом(если это возможно) 2.Не использовать проверку наличия ссылки в БД, а объявить поле url как уникальное, и пусть MySQL сам разбирается с уникальностью ссылки 3.Что-то третье Подскажите,как бы снять нагрузку с MySQL сервера?
.::f-duck::. - спасибо, но сами страницы сохранять задачи нет. Redis, MongoDB - документо-ориентированная СУБД, всё-таки. Переписывать готовое решение ради оптимизации под новую платформу не очень хочется.
Объяви поле первичным ключём и уникальным, но не CHAR. Заноси туда цифровой хэш генерирующий число до 20 символов. Так будет быстрее.Это один вариант. Второй вариант, убрать проверку, а поле с сылкой при заносе в БД сделай уникальной. Т е дважды, ссылка не добавиться. - Можно реализавать при одном проходе цикла только один запрос, а не два.
Steam[777] первый+второй вариант, поле с фиксированной длиной + первичный ключ и вставлять с помощью INSERT IGNORE