2012-01-25 5 views
1

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

Но проблема в том, что xml-файл имеет два больших размера (4 Мб), и каждый раз, когда пользователь нажимает на сайт, сервер получает файл (из одного места) и анализирует его и сервер пользователя, поэтому, если 1000 ударяет сервер будет тянуть его 1000 раз (то есть накладные расходы, которые я хочу решить)

Я попытался использовать memcache, но это также ограничено 2mb.

Может ли кто-нибудь сказать мне, какой лучший способ сохранить этот большой xml либо в БД, либо в файле xml, либо в memcache, должен ли я разбить этот большой xml на категории?

+0

новый xml-канал выбирается через каждые 3-10 минут позже и заменяет старый – MZH

+0

. Это зависит от содержимого XML-канала. Если это был фид продукта с категориями в нем, возможно, вы могли бы разделить его после того, как вы получили его по категориям в более мелкие файлы. В качестве альтернативы, попросите сценарий проанализировать xml в базе данных, поскольку это должно позволить вам быть более избирательным относительно того, что вы получаете. С каким контентом вы работаете? –

+0

очень большие продукты xml (около 4-мегабайтного файла) некоторое время зависают в браузере, и проблема заключается в том, что категории продолжают меняться – MZH

ответ

2

Я хотел бы создать базу данных, есть хроны выборки, а затем разобрать XML и вставить все в БД и обслуживать пользователей только из базы данных.

Для обеспечения согласованности данных вы можете реализовать базовое управление версиями. Сохраните текущий номер версии где-нибудь; всякий раз, когда вы получаете новый XML, храните следующую версию в базе данных, затем обновляете текущий номер версии, периодически очищаете.

+0

Спасибо всем u, ребята, я должен сохранить его в db, даже одна строка таблицы очень большая (в килобайтах)? – MZH

+0

сервер для записей, а также обновление xml через каждые 3 - 5 минут, поэтому было бы неплохо сохранить в db как каждую строку для каждого продукта. Будет ли целесообразно сохранять каждую категорию xml в строке db, например 1 строку для одной категории, тогда каждая строка будет содержать данные в KB – MZH

+0

. Индивидуальный xml-файл составляет около 60 000 строк. Разделение содержимого на разные таблицы и вставка в базу данных кажется хорошей идеей, но, скажем, у меня есть 1000 xml файлов каждый день. Как насчет сбрасывания всего в большом поле и последующего анализа этого текста/строки в виде XML-файла и возвращения результатов при каждом запросе пользователя. Я знаю, что он создает накладные расходы на разбор таких огромных данных каждый раз, но, безусловно, он решает ограничение строк базы данных. Какой лучший вариант среди двух, у меня закончится строка, если я вставляю эти значения в каждую строку. – Pramod

0

Использование memcache для 4MB данных не является хорошим вариантом, также вы уже испытываете проблемы с XML-файлами. как ответил @ori, лучшим вариантом было бы хранить данные xml в некоторой базе данных и обслуживать пользователей из базы данных.
Найти эту ссылку MySQL 5.5 Load XML Syntax например, как загрузить XML в базу данных.
Еще один момент, если вы получаете этот XML как веб-службу (например, SOAP), должна быть возможность получать только обновленные данные. таким образом, вы также можете сэкономить время загрузки.

+0

Нет его просто xml нет ответа на мыло – MZH

0

Но проблема в том, что файл XML является два больших вокруг (4mb) и каждый раз, когда пользователь попал на сайт, сервер получить файл (из того же места) и разобрать его и сервер пользователя, поэтому, если 1000 хитов сервер будет тянуть его в 1000 раз (то будет над головой, я хочу, чтобы решить)

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

Если он все еще слишком медленный, вы можете с нетерпением ждать, где улучшить скорость следующего, например. кешировать каждую категорию или тому подобное. Поскольку вы не указали какой-либо код и не указали, что вы делаете с данными, в частности, невозможно дать больше предложений.

+0

Нет Я ничего не кэшировал, я только что сохранил этот xml на своем сервере и проанализировал его, когда кто-то ударил сервер за записи, а также обновление xml через каждые 3-5 минут, чтобы он было бы неплохо сохранить в db как каждую строку для каждого продукта. Будет ли целесообразно сохранять каждую категорию xml в строку db, например 1 строку для одной категории, тогда каждая строка будет содержать данные в KB – MZH

+0

Хранение XML на диске, как вы это уже делали: я бы назвал его кешем, потому что он кэширует сеть доступ. Это файловый кеш. Может иметь смысл добавить дополнительный кеш (например, кеширование синтаксического анализа путем хранения его в БД по категориям, как вы предлагаете). В зависимости от того, что вы делаете, может даже иметь смысл сохранить каждую запись в БД в нормализованной форме, чтобы вы могли просто запросить БД, когда ваш сайт попал. Если он все еще слишком медленный, вы можете даже кэшировать запросы БД в течение нескольких минут. Все это зависит от того, что вы делаете, начиная с той части, которая занимает самое длинное, поэтому кэширование является наиболее эффективным. – hakre

Смежные вопросы