SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.07.2012 00:56:04

ClickerA
Участник
Зарегистрирован: 25.07.2012
Сообщений: 4

Поиск свободных ключей в определенном диапазоне

Здраствуйте.
Есть у меня скрипт, который работает в 10 потоков. Каждые секунд 30-40 один поток делает примерно 250-300 INSERT'ов. Диапазон уникальных ключей, у меня, от 100000 до 300000 тисяч. При запуске каждого потока я вычисляю свободные ключи в этом диапазоне, через SELECT, что бы потом с нужным ключом добавлять. Но каждые 30-40 сек нужно опять вычислять свободные ключи, так как другой поток мог их занять. Как мне реализировать поиск свободных ключей что бы не грузить БД, что бы и главный сайт не повесить. Кто что посоветует?

Неактивен

 

#2 25.07.2012 15:48:04

wine-time
Завсегдатай
Зарегистрирован: 17.06.2011
Сообщений: 42

Re: Поиск свободных ключей в определенном диапазоне

сделайте поле id первичным ключом с автоинкрементом и не извращайтесь smile

Неактивен

 

#3 26.07.2012 02:20:36

ClickerA
Участник
Зарегистрирован: 25.07.2012
Сообщений: 4

Re: Поиск свободных ключей в определенном диапазоне

Дело в том что это так и есть. Но мне дали диапазон конкретных id, я не соновной разработчик. Сейчас я решил примерно так:
На каждый поток выделил примерно равное количество id,
при запуске потока выбираю все свободные id
при добавлении проверяю есть ли запись в базе
если нет такой записи, но есть такой id уже существует, то подбираю свободный id путём запросов SELECT

такое не будет сильно грузить систему?

Неактивен

 

#4 26.07.2012 08:49:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Поиск свободных ключей в определенном диапазоне

Если на id стоит индекс или первичный ключ, то поиск по нему осуществляется достаточно быстро. Каким запросом Вы ищете "свободные места" в диапазоне?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 26.07.2012 13:44:30

ClickerA
Участник
Зарегистрирован: 25.07.2012
Сообщений: 4

Re: Поиск свободных ключей в определенном диапазоне

SELECT `id` FROM `table_name` WHERE `id` <= '100000' AND `id` >= '400000';
Вот таким

Неактивен

 

#6 26.07.2012 13:49:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Поиск свободных ключей в определенном диапазоне

Так Вы ищете "занятые" места, а не свободные. И к слову - Вы действительно все id выбираете? Может быть было бы достаточно одного? wink


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 26.07.2012 15:58:49

ClickerA
Участник
Зарегистрирован: 25.07.2012
Сообщений: 4

Re: Поиск свободных ключей в определенном диапазоне

deadka написал:

Так Вы ищете "занятые" места, а не свободные. И к слову - Вы действительно все id выбираете? Может быть было бы достаточно одного? wink

Да собственно я так и делаю, я выбираю с начала все занятые места, потом в скрипте вычисляю свободные. И при каждом инсерте проверяю не занят ли id, так как другой поток мог его занять.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson