Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl очередь запросов mysql 
:(
    Опции темы
burakov
Дата 19.6.2013, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день. 

назрела задача.

есть куча скриптов одинаковых (граберы).
которые должны с разных машин работать с одной базой.

и тут встала проблема очереди.

когда грабер (парсер) забирает задание из таблицы заданий.
он ставит признак "в обработке". и обращение других скриптов -клонов уже это задание не затрагивает.

но как оказалось этого мало.
возникает все таки момент одновременно обращения. к таблице и некоторые задания забираются 2 и более раз.

то есть это происходит, когда скрипты клоны одновременно обращаются к таблице заданий.

товарищи подсказали решение через блокирование таблиц mysql
LOCK TABLES `tbl` WRITE;
INSERT INTO `tbl` VALUES ...вставляем, изменяем
UNLOCK TABLES;

как то оно мне "не очень" :(.
что будет если одновременно клоны lock делать будут.

и к тому же проверку на LOCK не LOCK
преложили делать через 
SHOW OPEN TABLES

чувствую что то здесь не так.!


Ранее в многопоточных скриптах, применял решение, когда 
один поток работает с базой. и раздает все задания через
use Thread::Queue;
отлично работало.

но теперь как бы конфигурация другая. куча однопоточных скриптов.
на разных машинах должны работать с одной базой, расположенной на сервере.

как в этом случае все грамотно сделать?
и попроще smile.


Спасибо.





--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Jimy
Дата 19.6.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



PM   Вверх
burakov
Дата 19.6.2013, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



интересует просто личный опыт.
того.
а что будет если одновременно пойдет два таких блокирующих селекта?
Mysql сам разрулит все?. 

то есть к примеру
запрашиваю SELECT ... FOR UPDATE limit 4

всех остальных клонов-скриптов в этот момент эти 4 записи не существует?
это на уровне mysql разруливается?



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Jimy
Дата 19.6.2013, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Личного опыта не имею, т.к. тоже всегда делал чтобы один поток работал с базой.
Да, внутри MySQL все должно разрулиться smile
Но эти блокировки работают только с таблицами InnoDB (в доке об этом написано, но на всякий случай уточняю).
Думаю это самое грамотное решение.




PM   Вверх
tishaishii
Дата 27.6.2013, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Думаю, лучше всего, не дублировать работу выбранных средств разработки с помощью других, менее приспособленных.
По-другому, пускай каждый делает свою работу.
Если средство разработки выполняет работу некачественно, то не стоит делать не него ставку и закладывать мину в проект, а выбрать лучший вариант.
PM MAIL ICQ Skype   Вверх
burakov
Дата 27.6.2013, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



можете рассказать? как нужно делать?
каким образом и чем организовать эту очередь.?
спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
tishaishii
Дата 29.7.2013, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Распределять задачи по идентификаторам клиентов.
Например, создать процедуру, которая бы по запросу возвращала задание, предварительно установив метку "в обработке".
И клиенты могут по мере выполнения задания отправлять в центр информацию о статусе.

Это сообщение отредактировал(а) tishaishii - 29.7.2013, 16:46
PM MAIL ICQ Skype   Вверх
dimamaster
Дата 16.8.2013, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Спасибо за консультацию. На северо-западе Москвы находится Строгинский бульвар , который находится в районе Строгино.

Это сообщение отредактировал(а) dimamaster - 22.1.2017, 16:23
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.