![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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; отлично работало. но теперь как бы конфигурация другая. куча однопоточных скриптов. на разных машинах должны работать с одной базой, расположенной на сервере. как в этом случае все грамотно сделать? и попроще ![]() Спасибо. |
|||
|
||||
Jimy |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
||||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
интересует просто личный опыт.
того. а что будет если одновременно пойдет два таких блокирующих селекта? Mysql сам разрулит все?. то есть к примеру запрашиваю SELECT ... FOR UPDATE limit 4 всех остальных клонов-скриптов в этот момент эти 4 записи не существует? это на уровне mysql разруливается? |
|||
|
||||
Jimy |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
Личного опыта не имею, т.к. тоже всегда делал чтобы один поток работал с базой.
Да, внутри MySQL все должно разрулиться ![]() Но эти блокировки работают только с таблицами InnoDB (в доке об этом написано, но на всякий случай уточняю). Думаю это самое грамотное решение. |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Думаю, лучше всего, не дублировать работу выбранных средств разработки с помощью других, менее приспособленных.
По-другому, пускай каждый делает свою работу. Если средство разработки выполняет работу некачественно, то не стоит делать не него ставку и закладывать мину в проект, а выбрать лучший вариант. |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
можете рассказать? как нужно делать?
каким образом и чем организовать эту очередь.? спасибо. |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Распределять задачи по идентификаторам клиентов.
Например, создать процедуру, которая бы по запросу возвращала задание, предварительно установив метку "в обработке". И клиенты могут по мере выполнения задания отправлять в центр информацию о статусе. Это сообщение отредактировал(а) tishaishii - 29.7.2013, 16:46 |
|||
|
||||
dimamaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.8.2013 Репутация: нет Всего: нет |
Спасибо за консультацию. На северо-западе Москвы находится Строгинский бульвар , который находится в районе Строгино.
Это сообщение отредактировал(а) dimamaster - 22.1.2017, 16:23 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |