SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.10.2013 00:04:12

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

несколько скриптов пишут в 1 базу - проблема?

Здравствуйте, есть скрипт который собирает информацию из разных источников и пишет ее в базу (около 300к записей в день). Общее количество записей которое надо собрать примерно 100кк, тоесть получается 300 дней в режиме 24/7 - не очень быстро. Поэтому появилось желание запустить 5-10 копий скрипта чтобы ускорить процесс. Но вот вопрос, не будут ли они друг другу мешать?

Примерный алгоритм что делает скрипт:

1. Находит инфу о каком-то продукте и смотрит есть ли такой продукт в базе. Если есть то берет его локальный ИД и записывает новую запись. Если нет то генерирует новый локальный ИД (ИД последнего продукта +1), записывает этот новый продукт в базу и потом делает еще 1 запись отдельно.

Вот в чем вопрос - не случится ли такого что 2 копии скрипта одновременно найдут 2 новых товара, получат один и тот же ИД предыдущего товара и сгенерируют одинаковый новый ИД для новых товаров? Тоесть получится 2 товара с одинаковым локальным ИД.

Тип базы MyISAM.

Неактивен

 

#2 24.10.2013 00:18:31

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

Re: несколько скриптов пишут в 1 базу - проблема?


$get_product_local_id = mysql_query("SELECT value_counters FROM counters WHERE key_counters = 'id_".$table_id."_counter'");
$product_local_id = mysql_fetch_array($get_product_local_id);
$product_local_id = $product_local_id["value_counters"] + 1;
$update_counter = mysql_query("UPDATE counters SET value_counters = '$product_local_id' WHERE key_counters = 'id_".$table_id."_counter'");
 


Вот код за который я переживаю - какая вероятность того что 2 скрипта одновременно достанут текущий ИД и в результате у них получатся одинаковые локальные ИД? И есть ли какое-то безболезненное решение (легко и быстро реализуемое) чтобы это предотвратить?

Неактивен

 

#3 24.10.2013 02:57:36

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

Re: несколько скриптов пишут в 1 базу - проблема?

Почему бы Вам не использовать auto_increment вместо Если нет то генерирует новый локальный ИД (ИД последнего продукта +1)? Это решит проблему.


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

Неактивен

 

#4 24.10.2013 03:28:36

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

Re: несколько скриптов пишут в 1 базу - проблема?

Да там база уже на 30кк записей + больше 300 этих каунтеров и все уже типа 159345 (шестизначные). В общем переделать можно, но хотелось бы все таки какой-то хот фикс сделать так чтобы попроще и побыстрее...

Неактивен

 

#5 24.10.2013 03:31:53

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

Re: несколько скриптов пишут в 1 базу - проблема?

unsigned bigint (8-байтный беззнакомый инт) Вам никогда не перезаполнить уж точно ).
Остальные пути точно будет не проще и не быстрее.


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

Неактивен

 

#6 24.10.2013 03:33:37

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

Re: несколько скриптов пишут в 1 базу - проблема?

Ясно, спасибо ) буду тогда переделывать )

Неактивен

 

#7 26.10.2013 02:59:16

IDX
Участник
Зарегистрирован: 25.10.2013
Сообщений: 11

Re: несколько скриптов пишут в 1 базу - проблема?

удаляйте к чертям. вы подгружаете процессом.


$get_product_local_id = mysql_query("SELECT value_counters FROM counters WHERE key_counters = 'id_".$table_id."_counter'");
$product_local_id = mysql_fetch_array($get_product_local_id);
$product_local_id = $product_local_id["value_counters"] + 1;
$update_counter = mysql_query("UPDATE counters SET value_counters = '$product_local_id' WHERE key_counters = 'id_".$table_id."_counter'");
 


выложите строку соединения без хостов

Отредактированно IDX (26.10.2013 03:02:14)

Неактивен

 

Board footer

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