В последнее время я много раз анализировал веб-страницы, и мой процесс обычно выглядит примерно так:
- Получить список ссылок на Parse
- Импорт списка в базу данных
- Загрузите всю веб-страницу для каждой ссылки и сохраните в mysql
- Добавить индекс для каждого сеанса очистки
- Очистить соответствующие разделы (содержание, мета, что угодно)
- Шаги 4,5 - Промыть / Повторить - как это часто бывает, чтобы очистить diff. позже с той же страницы, или измените ваш xpath, или удалите указанное содержимое или что-то еще.
- Экспорт базы данных очистки в реальную базу данных и удаление столбца веб-страницы и индексов очистки
Теперь, самый простой ответ, конечно, выполнить очистку в то же время, когда вы загружаете веб-страницу, но я не думаю, что это хорошо подходит для модульного дизайна, так как я хотел бы иметь возможность развивать этот процесс немного больше.
Позвольте мне привести несколько примеров проблем, с которыми я постоянно сталкиваюсь: для 50k страниц (строк) у меня есть база данных по 6 гигабайт. Помните, что мы храним ВСЮ веб-страницу в одном столбце, извлекаем из нее соответствующие данные и сохраняем их в другом столбце.
Создание индекса на столе может занять 7-10 минут на четырехъядерном процессоре с 6 гигабайтами оперативной памяти. Дай Бог, чтобы ты что-то напортачил и наблюдал, как mysqld прыгает на 70% процессора и ВСЕХ твоего барана. Вот почему у меня есть шаг 4 - при каждой операции, которую я делаю, перед тем, как сделать это, я добавляю индекс в столбец, поэтому, если я хочу получить метас, я добавлю индекс, скажем, в столбец заголовка, а затем обновлю строка, в которой заголовок не равен нулю.
Я должен заявить, что я НЕ делаю все строки за один раз - что, как правило, приводит меня в замешательство - как следует - вы загружаете 6 гигабайт в память. ;)
Я полагаю, что решение этой проблемы заключается в том, чтобы взять общий счет и затем выполнить итерацию смещения около 100 за раз.
Тем не менее - я думаю, что здесь также есть некоторые проблемы с памятью. Стоит ли вместо этого хранить исходные веб-страницы в файловой системе? Я думал о хранении страниц в базе данных, ориентированной на документы, такой как mongo или couch.
EDIT
Просто чтобы прояснить это - любое представленное решение должно учитывать тот факт, что 50 КБ страниц - это ОДНА ГРУППА ОДНОГО ПОЛЬЗОВАТЕЛЯ. Я пока не пытаюсь создать несколько пользователей, но мне бы хотелось иметь возможность хранить более пары пакетов одновременно.