У меня есть XML-канал, который содержит 1000+ записей о свойствах (аренда, продажа).Каков наилучший способ кэширования XML-фидов на местном уровне?
В настоящее время я звоню этот канал 16x на домашней странице, всегда возвращая только 3 свойства для конкретных критериев, как 3 новый дом, 3-х новых квартир и т.д., 5 рекомендуется дом, 5 рекомендуемые квартир и т.д.
Этот сценарий работает хорошо в течение 7 месяцев, тогда как было 200+ свойств и только 100-200 просмотров в день. Теперь он становится на сцене, где у меня есть более 700 посещений в день и более 1000+ свойств и загрузка 16 каналов отдельно, чтобы показать главную страницу, становится все медленнее, а трафик становится все больше.
Поэтому я хотел бы кэшировать эти потоки, я бы хотел, чтобы только мой «робот» напрямую загружал потоки из источника и всех посетителей, чтобы использовать мою локальную копию, чтобы сделать вещи намного быстрее и значительно уменьшить нагрузку на трафик.
У меня нет проблем с загрузкой XML локально и локально файлов вызовов для отображения данных. Но я хотел бы знать, как решить возможные проблемы, как:
- не показывают данные клиентов, потому что робот обновляет XML-файлы и исходный файл будет перезаписан и пустыми во время загрузки новых данных
- с использованием XML-файл как локальные резервное копирование, означает, что если исходный сервер отключился домашним будет еще работать и загрузка
- , убедившись, что я не буду блокировки данных для клиентов таким образом, что робот не сможет обновлять файлы
Моих первыми toughts бы для работы с 2 xml-файлами для eve который будет показан клиентам, и тот, который будет загружен. Если загрузка правильная, то загруженный XML будет использоваться в качестве живых данных, а другой - удален. Некоторая инкрементная маркировка одним файлом, работающим как файл, хранящий имя фактических данных.
Есть ли способ кэшировать эти XML-файлы, чтобы он делал что-то подобное? На самом деле основная проблема заключается в том, чтобы иметь пуленепробиваемое решение, чтобы клиенты не видели страницы ошибок или пустые результаты.
Спасибо.
О, я должен добавить - как это может быть уместно здесь - что еще один вариант при работе с обычным кешем - добавить приемлемую степень застоя, например. («дайте мне это, если он свежий, или если вы обычно считаете его устаревшим, но устаревшим менее чем за 4 часа»). –
Можно ли проверить фактический размер или статус файла, а если кеш/синхронизация - только если он отличается? – feronovak
Это было бы, хотя вам придется идти дальше, поскольку изменения могут (и в реальной жизни, часто это делают) приводить к файлам одинакового размера. Вы можете сохранить и MD5 файла или E-тег, который получил WebResponse (это последнее лучше, если отправляются теги E, если не ругать человека, который работает с веб-сайтом, если это возможно, до тех пор, пока они не будут) или последним -mod date в веб-ответе (если в этой системе невозможно внести изменения в подсекунду). Опять же, проверка last-mod и etags происходит автоматически с соответствующим использованием кэша веб-памяти, встроенного в HttpWebResponse, когда вы используете соответствующие параметры. –