@GregIv

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

Какие существуют подходы для парсинга больших данных?
Добрый день!
В настройках php да и сервера есть множество настроек, которые не позволяют выполниться скрипту парсинга больших данных за один раз.
Какие существуют способы обойти это?

Я знаю способ с редиректом.
Выполняется парсинг n-го кол-ва строк, после этого происходит редирект на эту же страницу и парсятся следующие n строк.

Какие еще варианты могут быть?
Также интересно для консольных скриптов….
  • Вопрос задан
  • 668 просмотров
Пригласить эксперта
Ответы на вопрос 3
angrySCV
@angrySCV
machine learning, programming, startuping
обычно если запрос блокирующий, то на него накладывают разные ограничения, чтоб сервак хоть как-то отвечал, и не было длительных блокировок, лучше не пытаться обходить эти ограничения (тк они достаточно разумные)
ПХП - это скриптовый язык, не вполне для анализа больших данных, используте его для формирования обработки задач в других продуктах, например apache spark
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Поможет очередь задач (task queue).

Надо принимать задание, ставить его в очередь и отдавать ответ типа «принято. номер задания ZZZ» – это выполняется практически мгновенно. Затем нужно узнавать, «готово ли задание ZZZ?» – например, ajax'ом раз в пару секунд опрашивать сервер.

Выполняются задания в один или несколько потоков, на этом или другом сервере, «рабочим» процессом. Запускается рабочий процесс не под веб-сервером, а из командной строки и не имеет ограничений на время выполнения. Процесс либо висит постоянно и ждёт поступления задач, либо запускается по крону раз в N минут (и выполняется в случае если нет другого запущенного процесса с предыдущего раза).

Например, во фреймворке Laravel (и облегченной его версии Lumen) очень хорошая реализация очереди задач из коробки.
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Обычно большие объёмы парсятся посредством map/reduce. На PHP лучше всего использовать консольные скрипты и сразу отводить побольше памяти. Алгоритмы парсинга очень зависят от формата файлов. Например csv парсить очень легко. Обычно такие файлы парсят сразу в несколько потоков.
Разного рода xml парсят либо через simple xml либо через domparser. Иногда парсят с помощью ручного построения дерева. Т.е. Читают файл посимвольно и формируют дерево тегов. Этот подход работает, когда файлы очень большие, а глубина вложенности небольшая и формат предсказуем.
Разного рода xls парсятся через Phpexcel, он даже картинки умеет доставать.
Плюс парсинги делаются через механизм очередей. Например загружается файл на сервер, ставится задача распарсить файл, далее файл парсится через консольный скрипт. В особо извращенных случаях, вроде xls файлов с адскими макросами внутри, доходит до инстанцирования OLE объектов на отдельной виндовой машине и выдёргивания данных через vbs.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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