Лучший способ сохранить в памяти кеш объектов БД в Silverlight - PullRequest
4 голосов
/ 09 февраля 2011

Я бы хотел установить кэш объектов базы данных (то есть строк в таблице) в памяти в silverlight, что я и сделаю, используя WCF и linq-to-sql.Как только у меня появятся объекты в памяти, я планирую использовать MSMQ для получения новых объектов всякий раз, когда они были изменены.Это довольно сложный подход, но цель состоит в том, чтобы сократить количество обращений к базе данных и обеспечить мгновенный обмен данными между приложениями Silverlight, которые подключены к MSMQ.

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

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

Может быть, есть лучший способ сделать кэш полностью?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

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

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

  2. Обычно кэшируемые объекты доступны только для чтения (пользователь не может их изменить). Если пользователь изменяет объект, который будет кэшироваться, вы, как правило, хотите немедленно сохранить эту информацию на сервере / базе данных, чтобы другие клиенты могли получить эту информацию.

  3. Если сервер / база данных содержит «основные» кэшированные данные и должен уведомлять клиентов в случае изменения данных, приложение silverlight, скорее всего, должно быть подписанным слушателем какой-либо службы ( MSMQ действительно может работать как бэкэнд). Если обновления не должны выполняться в режиме реального времени, рассмотрите кэш, просто обновляющийся по таймеру, каждые 5-10 минут или около того.

2 голосов
/ 15 февраля 2011

Существует довольно много примеров использования дуплексных служб WCF (через HTTP) - возможно, поиск реализации шаблонов публикации / подписки для Silverlight даст вам преимущество.

Правда, я не могу предоставить пример реализации для вашего сценария, но вот некоторые места, на которые стоит обратить внимание:

Laharsub: сервер сообщений для веб-приложений реального времени PollingDuplexHttpBinding и среда подписки для публикации

...