2016-09-18 1 views
1

J'ai donc un service Web qui renvoie des données à partir d'une certaine source de données. Certaines des récupérations de données prennent vraiment beaucoup de temps (> 15 secondes) ce qui est inacceptable lorsqu'elles servent des données à une page Web via des appels ajax.Meilleure pratique lors de l'enregistrement de données dans HttpApplication.Application

Je pensais que je peux mettre en cache les données dans la méthode suivante:

exécuter un thread de travail dans Global.asax qui récupère toutes les deltas X minutes/heures et met à jour une variable, qui sera ensuite retourné dans la service Web. La meilleure solution qui me vient à l'esprit est la sauvegarde des données dans le dictionnaire Application.

Fondamentalement ma question est, devrais-je le faire? (Nous parlons de données qui peuvent dépasser 100 Mo) Y a-t-il des ramifications qui le font? Si oui, quelle solution sera la meilleure?

Répondre

0

Vous êtes probablement mieux d'utiliser la mise en cache pour ce cas, car il sera automatiquement vidé si le serveur est à court de mémoire.

Voir 'Considérations sur l'application' ici: https://msdn.microsoft.com/en-us/library/ms178594.aspx

+0

Semble assez bonne réponse, merci! Cependant, quel gestionnaire de mise en cache recommandez-vous? Y a-t-il un gestionnaire de cache intégré? Une courte recherche sur google a généré cachemanager.net. Est-il bon? –

+0

Yup. ASP.Net inclut un cache de sortie qui est assez simple. Vous pouvez en lire plus ici: https://msdn.microsoft.com/en-us/library/xsbfdd8c.aspx – dperish

0

Cela dépend vraiment de la nature de vos données. La mise en cache est la solution idéale pour les données qui ne changent pas très souvent et qui sont quelque peu statiques. Vous pouvez également utiliser une mise en cache de courte durée pour les données dynamiques (modifications fréquentes), mais cela est correct si l'utilisateur utilise des données un peu anciennes. .Net framework dispose d'une classe CacheManager qui vous permet de définir l'expiration des données mises en cache. Je dirais plutôt que de lire TOUTES les données et de les sauvegarder en mémoire, en utilisant le gestionnaire de cache .Net, il suffit de mettre en cache les données qui sont demandées pendant x minutes.

Vous pouvez écrire votre propre code et être très créatif sur quand et comment actualiser vos données en cache. Par exemple, vous pouvez ajouter une propriété de compteur aux données mises en cache et compter le nombre d'accès aux données depuis le cache, puis actualiser les données pour étendre la durée de vie des données mises en cache en étendant son horodatage d'expiration.

Jetez un oeil à ce lien pour le démarrage: http://cachemanager.net/Documentation/Index/cachemanager_getting_started

+0

Était juste en train de regarder cachemanager.net! Quoi qu'il en soit, je dois lire TOUTES les données et les garder à jour, car j'affiche TOUTES les données à l'utilisateur. Ce n'est pas exactement "statique". En outre, les données sont supposées ne pas être modifiées «en coulisses», de sorte que chaque changement de données peut déclencher une ré-extraction ou une mise à jour du cache. –

+0

Le gestionnaire de cache est un bon choix. Votre serveur nécessitera cependant beaucoup de mémoire. Vous pouvez toujours utiliser l'horodatage de la dernière mise à jour ou du dernier chargement pour réduire les appels de base de données et améliorer les performances. – Sparrow

+0

J'ai utilisé la classe cachemanger dans une application d'entreprise pour mettre en cache les sessions de plus de 10 000 utilisateurs simultanés et cela a très bien fonctionné pour nous. (nous sauvegardions nos sessions en DB, afin de les utiliser dans une ferme de serveurs) – Sparrow