@savenko
Php программист

Как лучше выполнять разбор большого количества данных на php?

Здравствуйте!
Не знаю как лучше выполнять обработку большого количества url с разбором. Разбираю данные от турагенств. Выбираю между:
1) Костыль с многопоточностью на php. Какой костыль лучше использовать?
2) Очередь задач. Например Rabbitmq (вроде как удобно администрировать, есть вэб панель), может что-то еще посоветуете?

Заранее спасибо за ответы.
  • Вопрос задан
  • 2486 просмотров
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
1) Многие советуют Gearman, у меня лично как то не пошло.
У нас есть в одном проекте задача по || парсингу, в итоге до сих пор работает вариант "в лоб": скрипт в какой то момент форкается на сколько нужно потоков, выполняет все задачи по парсингу, скидывает данные в redis, основной процесс дожидается окончания форков и забирает все из redis.

2) Rabbitmq хорошая штука, но тут уже от Ваших задач смотрите.
Если нужно парсить что то в realtime (пока ждет пользователь) - то очереди тут на мой взгляд не к месту.
Если нужно парсить в фоне - да, очереди отлично. Можно rabbit, можно тот же redis (если не нужна сложная логика по распределению запросов)
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Костыль с многопоточностью на php

а где там кастыль?

у вас так или иначе должна быть очередь. Использовать rabbitmq, zeromq, reddis или просто в php хранить массив задач (в stl есть очереди) - решать вам.

Так же у вас должен быть один воркер для скачивания информации (возможно не один) в несколько потоков (multi curl) и список проексей если он вам нужен. Если у вас есть список проксей - то имеет смысл так же в отдельном воркере (или периодически в промежутках) проверять статус проксей.

Так же вам нужны воркеры которые будут парсить результат запросов.

Можно вооружиться pthreads и разнести все воркеры по потокам и сделать доступ к очереди потоко безопасным. Если в качестве очереди используется кролик, то тогда у каждого коркера ссылка на свою очередь задач. В этом случае проще скейлить парсер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы