Несколько источников данных: подходы к хранению и извлечению данных

#database #cron #datasource #merging-data

#База данных #cron #источник данных #объединение-данные

Вопрос:

Я создаю веб-сайт (вероятно, на WordPress), который берет данные из нескольких разных источников для отображения на разных страницах.

Источники:

  • Лента в Twitter
  • Лента Flickr
  • База данных на удаленном сервере
  • Локальная база данных

Из каждого источника я буду в основном извлекать

  • Короткая строка, например, для Twitter, твит, а из локальной базы данных — заголовок страницы блога.
  • Связанное изображение, если таковое существует
  • Ссылка, идентифицирующая содержимое в его источнике

Мой вопрос:

Каков наилучший способ а) хранить данные и б) извлекать данные

Я думаю, что:

i) Напишите скрипт, который запускается каждые 2 или около того минуты в задании cron
ii) скрипт извлекает данные из всех источников и сохраняет их в локальной базе данных
iii) затем код приложения может извлекать все данные из одного источника, локальной базы данных

Это должно упростить управление кодом приложения — мы всегда получаем данные из одного источника в коде приложения — и в этом главная привлекательность. Но не является ли это излишеством для относительно небольшого сайта?

Ответ №1:

Я бы рекомендовал поместить ленту Twitter и ленту flickr в JavaScript. И flickr, и Twitter имеют REST API. Размещая ее на клиенте, вы освобождаете ресурсы на своем сервере, снижаете сложность, ваши пользователи не будут ждать, пока ваш сервер извлечет данные, и вы можете позволить twitter и flickr кэшировать данные за вас.

Предполагается, что вы знаете JavaScript. Как только вы преодолеете особенности JavaScript, это будет неплохой язык. Попробуйте Jquery. Плагин jQuery для Twitter Плагин Flickery jQuery. Есть и другие, это только первые результаты от Google.

Что касается ваших данных на локальном сервере и удаленном сервере, это будет больше зависеть от данных, которые извлекаются. Я бы выбрал то, что вы можете разработать быстрее всего и дает приемлемые результаты. Если это означает выполнение вызова REST с сервера на сервер sever, тогда действуйте. ЕСЛИ удаленный сервер медленно отвечает, я бы использовал метод AJAX REST API.

А для локальной базы данных вам придется написать для этого код на стороне сервера, поэтому я бы сделал это внутри «фреймворка» WordPress.

Надеюсь, это поможет.

Комментарии:

1. Я не исключил запросы REST на стороне клиента, но с этим связано несколько проблем, в том числе: а) вам приходится анализировать данные на стороне клиента; б) сложнее объединить полученные данные для фильтрации по определенному полю, например, по дате создания

2. Я согласен, что код на стороне сервера обычно быстрее в написании и отладке для большинства разработчиков при прочих равных условиях. Однако AJAX на стороне клиента в случаях, подобных вашему, обычно заметно быстрее, поскольку запросы AJAX будут выполняться параллельно, а не последовательно, и страница может отображаться до выполнения удаленных вызовов. Если у вас это не работает, хорошей альтернативой может быть написание оболочки для их REST api на PHP с последующим кэшированием в Memcache или APC.

3. Что касается извлечения данных, это нормально, это просто случай манипулирования ими. Если у меня есть, скажем, 8 типов контента, например, сообщения в блогах, новости, изображения flickr, твиты и т.д. будет проще, скажем, отображать весь контент, упорядоченный по дате и времени, показывая ровно 4 каждого типа для конкретного автора, если я сохраню данные в базе данных. Но мне интересно, не слишком ли я педантичен в отношении того, что по сути является небольшим сайтом, который объединяет контент на разных страницах.

4. Возможно ли быть СЛИШКОМ педантичным?