2011-01-30 3 views
0

Je suis très intéressé d'entendre l'opinion de la communauté SO et la pratique recommandée pour cela.Stockage dans la session par rapport à la récupération de la base de données

J'ai actuellement une application ASP MVC qui valide un ensemble de règles (~ 100 lignes (classes avec 10 propriétés)) chaque fois qu'un utilisateur remplit un formulaire court. Il y a environ 10 formulaires dans l'application et il y a rarement plus de 3 utilisateurs simultanés dans l'application.

Actuellement, je stocke toutes les règles dans la variable de session qui se charge initialement et est conservé dans les formulaires. Est-ce trop ou mauvaise pratique à stocker en mémoire? Je l'ai fait pour accélérer l'application, la charge est assez rapide (moins d'une seconde), donc je discute juste le chargement au besoin par formulaire. Donc, conservez la table de règles en mémoire (variable de session) ou chargez-la lors de la validation de chaque formulaire?

+0

À quelle fréquence votre utilisateur accède-t-il à ces formulaires? Si, disons, plus d'une minute par formulaire, la charge à la demande est déjà justifiable. – xandy

+0

Bonne question, les formulaires en moyenne environ 5 questions par formulaire donc pour la simplicité, je dirais que chaque formulaire attend postback environ 5 minutes. –

Répondre

2

il y a rarement plus de 3 utilisateurs simultanés sur l'application

Cela signifie que vous pouvez stocker beaucoup dans la session. Votre approche ne «balance» pas très bien, c'est pourquoi la sagesse commune va s'y opposer. Mais tant que votre «3» ne devient pas «300» ou «3000», vous êtes en sécurité.

+0

Je suis complètement d'accord Henk, et je pense que je pourrais regarder l'utilisation et si elle croît à 10 - 20 utilisateurs simultanés, l'évasion ne serait pas mauvaise du tout puisqu'elle est déjà abstraite. –

+0

J'ai oublié de mentionner que je considère également Caching pour rendre l'application variable large, cela résoudrait le facteur d'évolutivité, mais les changements de règles nécessiteraient un redémarrage qui n'est pas souhaitable. –

+1

@Mark Si vous le stockez dans le cache (System.Web.Caching ou System.Runtime.Caching.MemoryCache dans .NET 4), vous pouvez soit lui donner une expiration, soit lui faire surveiller d'autres objets (comme un fichier) pour changements. De toute façon, vous n'auriez pas à redémarrer l'application. Chaque fois que le code lit le cache et que l'entrée est manquante, il suffit de recharger le cache. – holmes

Questions connexes