2015-04-23 2 views
3

У меня есть доступ к серверу данных трафика, откуда я получаю XML-файлы с необходимой мне информацией. (Пример: точка А в точку В: время в пути 20 мин, расстояние 18 миль и т. Д.).XML для базы данных, какой маршрут следует использовать?

Загрузите XML-файл (который заархивирован), извлеките его, затем обработайте и храните в БД. Я разрешаю только загрузку XML-файла за запрос, но только если прошло 5 минут с последней загрузки. XML на сервере трафика обновляется каждые 30 секунд, возможно, 5 минут. В течение 5-минутного периода любой пользователь, запрашивающий веб-страницу, будет извлекать данные из БД (без обновления), поэтому ограничивает количество запросов, поступающих на сервер трафика.

Моя проблема с моим нынешним подходом заключается в том, что когда я получаю новый XML-файл, весь процесс занимает некоторое время (3-7 секунд), и это заставляет пользователя слишком долго ждать, прежде чем что-либо получить. Однако, когда загрузка XML не требуется, и все данные отображаются прямо из БД, процесс выполняется очень быстро. Архивированный XML составляет около 100-200 КБ, в то время как неархивированный - около 2 МБ. Файл XML содержит данные трафика из 3 или 4 состояний, тогда как мне нужны только данные для одного состояния. Вот почему я в настоящее время использую метод БД.

Этот подход хороший? Мне было интересно, нужно ли просто извлекать данные непосредственно из загруженного XML-файла для каждого запроса и каким-то образом ограничивать, как часто файл XML загружается с сервера трафика. Или, может ли кто-нибудь указать мне на лучший способ?

Образец XML файл sample of the XML file

Вот как это выглядит на моем сайте This is how it looks on my website

+0

Определить «хорошо». Какая мера важна для вас? – duffymo

+0

Я думал о маршруте работы CRON, но это означает, что независимо от того, будет ли пользователь запрашивать данные, он будет обновлен. Сейчас он обновляется только в том случае, если он запрашивается, и если прошло не более 5 минут с момента последнего обновления. Хорошо бы иметь более быстрый доступ, даже если запрашивается новый XML! – Cristian

+0

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

ответ

0

Вы должны загрузить XML каждый раз, когда она меняется.

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

Как вы не можете предвидеть будущее, вы не знаете, получите ли вы запрос пользователя в течение следующих 7 секунд.

Возможно, вы можете узнать с запросом HEAD, если файл XML был обновлен.

Таким образом, вы можете создать себе службу, которая загружает из удаленной системы XML каждый раз, когда она изменяется. В случае, если эта дата действительно не нужна, часто вы можете настроить эту услугу, чтобы часто и не часто ее проверять и/или загружать.

Остальная часть вашей системы может быть независимой от нее, если вы сможете узнать о наилучшей конфигурации службы загрузки путем статистического анализа поведения ваших пользователей.

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