Привет, мне нужны предложения для моего исследовательского проекта.
Я создаю базу данных, которая читает RSS-каналы, созданные оповещениями Google, и сохраняет результаты в базе данных для последней классификации. Я использую платформу Wordpress и pods для обработки базы данных и пользовательского интерфейса.
У меня есть 4 объекта (модуля) со своими таблицами:
- Ресурсы, это данные сайта, взятые из ленты оповещений.
- Источники, это домен сайта, например stackoverflow.com
- Каналы с запросом оповещения и URL-адресом RSS.
- Темы, основные темы, по которым классифицируются другие объекты.
Поток программы вкратце таков:
- По каждой теме берите фиды.
- Для каждого канала загрузите RSS XML.
- Для каждого URL-адреса записи в rss, если он новее последней проверки, проверьте, сохранен ли уже домен в объекте «Источники».
- Если источник присутствует, проверьте, сохранен ли URL-адрес в объекте ресурса.
- Если ресурс присутствует (то есть у нас уже есть данные для этого URL-адреса), добавьте текущую тему и канал цикла к ресурсу (если он отсутствует).
- Если ресурс отсутствует, сохраните ресурс с некоторыми данными, текущей темой и лентой.
- Если источник отсутствует, сохраните источник с текущей темой.
Таким образом, у меня будет куча ресурсов со связанными фидами и темами, а также относительные источники с их темами.
Проблема в том, что данные очень быстро увеличиваются до сотен, и за один месяц я уже достиг более 1500 записей для ресурсов.
Так вот теперь каждый раз когда запускаю скрипт, так как при каждой новой записи приходится сравнивать его со всеми предыдущими, скрипт систематически зависает.
Поэтому мне нужен способ сделать его более эффективным или избежать проблемы разделения процесса.
Поскольку скрипт вызывается через Ajax, я подумал, что этот поток будет работать:
- Запросите у сервера структуру тем/каналов.
- Для каждого канала в каждой теме попросите сервер загрузить XML и передать его обратно в виде массива.
- Затем в интерфейсе для каждой записи отправьте вызов сравнения и сохранения.
Конечно, недостаток в том, что мне будет много звонков.
Еще один метод, о котором я слышал, — это сброс данных во время серверного процесса, так как я понял, что это должно обмануть ограничение времени сервера для сброса. Но я не уверен, что хорошо понял.
Конечно, лучшим решением было бы перестроить все, используя более конкретный код, а не два уровня абстракции общего назначения. Но у меня очень мало времени!
Изменить: код здесь https://github.com/bakaburg1/overseer