Задавайте вопросы, мы ответим
Вы не зашли.
Здраствуйте.
Есть у меня скрипт, который работает в 10 потоков. Каждые секунд 30-40 один поток делает примерно 250-300 INSERT'ов. Диапазон уникальных ключей, у меня, от 100000 до 300000 тисяч. При запуске каждого потока я вычисляю свободные ключи в этом диапазоне, через SELECT, что бы потом с нужным ключом добавлять. Но каждые 30-40 сек нужно опять вычислять свободные ключи, так как другой поток мог их занять. Как мне реализировать поиск свободных ключей что бы не грузить БД, что бы и главный сайт не повесить. Кто что посоветует?
Неактивен
сделайте поле id первичным ключом с автоинкрементом и не извращайтесь
Неактивен
Дело в том что это так и есть. Но мне дали диапазон конкретных id, я не соновной разработчик. Сейчас я решил примерно так:
На каждый поток выделил примерно равное количество id,
при запуске потока выбираю все свободные id
при добавлении проверяю есть ли запись в базе
если нет такой записи, но есть такой id уже существует, то подбираю свободный id путём запросов SELECT
такое не будет сильно грузить систему?
Неактивен
Если на id стоит индекс или первичный ключ, то поиск по нему осуществляется достаточно быстро. Каким запросом Вы ищете "свободные места" в диапазоне?
Неактивен
SELECT `id` FROM `table_name` WHERE `id` <= '100000' AND `id` >= '400000';
Вот таким
Неактивен
Так Вы ищете "занятые" места, а не свободные. И к слову - Вы действительно все id выбираете? Может быть было бы достаточно одного?
Неактивен
deadka написал:
Так Вы ищете "занятые" места, а не свободные. И к слову - Вы действительно все id выбираете? Может быть было бы достаточно одного?
Да собственно я так и делаю, я выбираю с начала все занятые места, потом в скрипте вычисляю свободные. И при каждом инсерте проверяю не занят ли id, так как другой поток мог его занять.
Неактивен