Автоматическая очистка данных с использованием CRON - PullRequest
2 голосов
/ 02 марта 2011

В настоящее время я работаю над приложением, которое собирает информацию о борзых с гоночного сайта и выполняет ряд вычислений на основе данных. Текущему приложению удается правильно отображать данные и выполнять правильные расчеты, выполняя индивидуальные запросы YQL на гоночном веб-сайте на основе ввода пользователей.

Однако я обнаружил, что из-за большого количества HTTP-вызовов и отсутствия кэширования данных приложение имеет тенденцию быть немного медленным. Чтобы ускорить его и открыть возможность дальнейшего анализа данных, я хотел бы создать какую-то систему, которая будет очищать и хранить все данные, относящиеся к дню накануне вечером, через вкладку cron. Однако я не уверен, как это сделать.

В данный момент приложение проходит следующий грубый процесс:

  1. Разрешить пользователю выбирать дату
  2. Выполнить запрос YQL и выполнить итерацию по результату, чтобы получить все расы в эту дату
  3. Разрешить пользователю выбирать расу из списка выше
  4. Выполните YQL-запрос и переберите результат, чтобы получить всех собак в гонке
  5. Выполните YQL-запрос и переберите результат, чтобы получить все расы, выполняемые каждой собакой
  6. Рассчитать статистику на основе рас, проведенных каждой собакой
  7. Вывести все

Как видите, существует довольно много отдельных HTTP-запросов. Это неизбежно, поскольку каждый набор данных существует на отдельной странице гоночного веб-сайта. По этой причине я бы предпочел получить большую часть обработки через отдельную систему и хранить данные в базе данных, а не собирать и обрабатывать их по запросу пользователя.

Я мог бы легко извлечь процесс извлечения и вычисления из текущей системы и просто запустить их на вкладке cron, но все они будут выполняться из одного PHP-запроса. Это означает, что сервер должен будет перебирать буквально тысячи фрагментов данных, сохраняя каждый набор в базе данных, все в рамках одного запроса PHP. Не попробовав, я бы предположил, что время ожидания запроса истекло?

Итак, подведем итог, вот мои вопросы:

  1. Если бы я поместил обработку в один PHP-файл и запустил ее из cron, закончится ли тайм-аут перед завершением работы или он просто продолжит пахать?
  2. Существует ли какая-либо ранее существующая библиотека, которая занимается такой задачей?
  3. Есть мысли об альтернативных способах достижения этого?

Большое спасибо,

Dan

1 Ответ

1 голос
/ 02 марта 2011

Вместо массового сканирования сайта, как насчет кэширования по требованию?

Это, вероятно, проще реализовать, и это не делает сайт гонки подозрительным, если их TOS не позволяет сканировать (вероятно, нет).

Вам просто нужен локальный sqlтаблица с указанием даты и столбцами для статистики, которую вы уже выводите.

Ваш поток будет выглядеть примерно так:

  1. Разрешить пользователю выбирать дату
  2. Выполнить SQL-запрос, чтобы найти предварительно вычисленные данные на эту дату.Если данных не существует, переходите к 3, в противном случае переходите к 9.
  3. Выполните запрос YQL и выполните итерацию по результату, чтобы получить все гонки на эту дату
  4. Разрешить пользователю выбирать гонку изприведенный выше список
  5. Выполните запрос YQL и выполните итерацию по результату, чтобы получить всех собак в гонке
  6. Выполните запрос YQL и выполните итерацию по результату, чтобы получить все гонки, выполненные каждой собакой.
  7. Рассчитать статистику на основе рас, проведенных каждой собакой
  8. Сохранить статистику по дате пользователя, введенную в таблицу sql.
  9. Вывести все
...