Увеличиваем отказоустойчивость парсинга/граббинга
Как я уже отмечал ранее, базы данных в последнее время становятся узким местом для приложений, предназначенных для парсинга, граббинга и сбора информации. Это связано с тем, что сейчас практически любой движок построен на основе четырех десятков таблиц и тучи сложных запросов, а когда на одном хостинге таких движков находится штук 100, то многого просить от БД не приходится, даже с учетом того, что MySQL (а чаще всего хостеры используют именно его) – чертовски быстрая штука при правильной настройке.
Эта проблема стала для меня очень остро ставать, когда мои клиенты начали жаловаться, что разработанные мною парсеры не делают своей работы. Я стал разбираться и пришел к выводу, что с подобными проблемами даже сложнее бороться, чем с тем же segfault.
Например, на одном из хостингов клиента при запуске парсера через 20-30 минут MySQL выдавал «MySQL server has gone away» и после этого вся далее собранная информация уходила в трубу. Также не редкими были проблемы, когда MySQL просто умирал от нагрузок (понятное дело, что не со стороны моих парсеров). Я начал искать решение данной проблемы. Пробовал даже разработать систему отложенного выполнения запросов, ставил таймауты, когда не мог выполнить запрос. В общем, думал я над этой проблемой и пришел к выводу, что проще всего всю информацию записывать в CSV или SQL dump файл, а по окончании парсинга одним запросом выгружать это в БД.
У этого решения есть ряд преимуществ:
- файловая система намного устойчивей к перегрузкам, чем БД
- файловая система не уступает по производительности БД (особенно на публичных хостингах)
- за нагрузки на файловую систему вам не сделают втык админы сервера, в отличии от БД
Но также есть и некоторые недостатки у подобного подхода:
- сложнее ВИЗУАЛЬНО контролировать процесс сбора информации (это проблема для тех, кто привык смотреть как заполняются его базы данных :))
- невозможно использовать информацию «на лету» - всегда надо дожидаться завершения парсинга
То есть данное решение стоит применять, например, в ночных парсерах для больших массивов данных. Так что советую людям, которые собирают информацию взять данную идею на заметку. Конечно же эти проблемы не касаются тех, у кого стоит с 10 выделенных серверов на гигабитном инете

ACID Jesus:
“проще всего всю информацию записывать в CSV или SQL dump файл, а по окончании парсинга одним запросом выгружать это в БД” - главное осталось не положить мускул в этот момент этим одним мегазапросом/пачкой запросов
26 Январь 2008, 10:51 дпadmin:
Об этом вы не должны беспокоиться. Потому что по завершении сбора вы можете выгрузить дамп при помощи команды:
26 Январь 2008, 11:16 дпmysql params < dump_file.sql
которая сама возмет на себя ответственность по распределению нагрузки. Я выгружая даже дампы по 200-300 метров еще не разу не замечал, чтобы сервак падал.