2012-01-09 3 views
1

Надеюсь, что название выбрано достаточно хорошо, чтобы задать этот вопрос.Выбор хранилища и кеширования

Не стесняйтесь редактировать, если нет, и примите мои извинения.

В настоящее время я размещаю приложение, взаимодействующее с Интернетом.

Объяснение основного потока программы:

Пользователь входит в UserID в мою программу, которая затем используется для доступа к нескольким XML-файлы через Интернет:

http://example.org/user/userid/?xml=1

Этот файл содержит несколько ID продуктов, которыми владеет пользователь в DRM-системе. Затем этот список используется для доступа к статистике и информации о взаимодействии пользователей с продуктом:

http://example.org/user/appid/stats/?xml=1

Это также содержит ссылки на различные изображения, которые являются специфическими для данного приложения. И они могут измениться в любое время и должны быть загружены для отображения в приложении.

Здесь начинается ужас, по крайней мере для меня: D.

1.) Как хранить эту информацию на ПК пользователя?

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

Или можно использовать локальный db-подобный sqlite для этого?

Среднее количество приложений может быть около ~ 100-300, а также статистику и изображения для каждого приложения в основном 5-700.

2.) Когда следует обновлять контент?

Плохо, сайт, откуда эти данные загружены, или, скорее, xmls, не содержит временных меток, когда он был обновлен/изменен в последний раз. Поэтому мне нужно будет хэшировать все файлы и сравнивать их в тот момент, когда пользователь обращается к этим данным, что может занять слишком много времени, потому что это веб-сайт. Хорошо, есть тайм-ауты, но мне нужно заблокировать доступ к контенту, пока данные не будут загружены и обработаны, или не произойдет тайм-аут. В обоих случаях приложение не будет доступно для короткого или, возможно, даже долгого времени, и я хочу этого избежать. I может позволить пользователю делать обновление вручную, когда он в этом нуждается, но тогда я надеялся, что для этого есть несколько лучших методов.

Особенно с вышеупомянутыми номерами приложений и прочее.

Спасибо за чтение и все это, и, пожалуйста, не стесняйтесь спрашивать, не забыл ли я что-то объяснить.

ответ

0
  1. Возможно, стоит использовать БД, так как это экономит ваше общение с форматами файлов для структурированных данных.Не забудьте время от времени удалять и перестраивать его (или убедиться, что старые вещи тщательно удалены и время от времени сокращают его, но, вероятно, легче начать заново, так как это всего лишь кеш).

  2. Если веб-служба не дает вам никаких подсказок при перезагрузке, тогда вам просто нужно решить для себя, но обязательно проверьте заголовки HTTP для любых инструкций кэширования, а также данных XML [*] , Решите разумную неподвижность для данных (количество времени, которое пользователь проводит, глядя на результаты, составляет абсолютного минимума, так как они будут видеть результаты, которые устарели независимо от того, что вы делаете). Всякий раз, когда вы загружаете что-либо, записывайте, какую дату/время вы его загрузили. Удалите старые данные из кеша.

Для предотвращения длительных задержек обновления данных, вы можете:

  • визуально указывают на то, что данные несвежий, но отображать его в любом случае, и заменить его, как только вы обновилась.
  • разрешает данные о статоре, когда пользователь имеет много видимого материала, чем вы, когда они просто смотрят на небольшое количество материала. Таким образом, вы будете «ничего не делать», ожидая небольшого количества вещей, но не ожидая большого количества материала.
  • запустить фоновое задание, которое ничего не делает, кроме как вырезать старые вещи из кеша и перезагрузить его. Основное приложение всегда отображает наиболее доступный, какой бы он ни был старый.

Или какая-то комбинация тактики.

[*] Подумайте об этом, если веб-сервер предоставляет разумные инструкции по кэшированию, тогда было бы проще забыть о каком-либо хранилище или кешировании в вашем приложении. Просто возьмите файлы XML и покажите их, но хватайте их через кеширующий веб-прокси, который вы интегрировали в свое приложение. Я не знаю, какие прокси делают это легко - вы сами можете скомпилировать Squid (конечно), но я не знаю, можете ли вы связать его в другое приложение, не изменяя его самостоятельно.

+0

Спасибо за ответ Стив. –

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