2010-08-26 22 views
10

Je travaille sur une application Web dans ASP.NET/C# qui doit être évolutive pour gérer la charge élevée des utilisateurs (sera probablement exécutée dans une batterie de serveurs Web). Comme il va répondre à un grand nombre d'utilisateurs, environ 1 million de plus, mais le nombre d'utilisateurs en ligne serait d'environ 30K-50K. Je prévois d'utiliser la mise en cache (fournisseur basé), et je me demandais:Mise en cache de tous les utilisateurs dans ASP.NET

  1. Est-ce une bonne idée de mettre en cache TOUS les utilisateurs de la performance? Je prévois de mettre en cache toutes les autres données génériques, comme les paramètres, etc, mais comment serait-il efficace de mettre en mémoire tous les utilisateurs en mémoire? Si un utilisateur modifie son profil, je ne rechargerai que cet utilisateur particulier dans le cache (ayant une collection de tous les utilisateurs). Des suggestions sur cette approche?

  2. Dois-je m'inquiéter du verrouillage lorsque j'utilise ce cache d'utilisateurs? Une seule modification du profil serait l'utilisateur lui-même, ce serait une opération atomique, bien qu'il y ait plusieurs opérations de lecture dans différents threads. Donc, en récupérant les utilisateurs du cache, ou en mettant à jour un utilisateur particulier, devrais-je utiliser le verrou?

Merci

Asif

Répondre

6

Mettre n'importe quoi dans Global Cache qui n'est utile que pour un seul utilisateur est généralement une mauvaise idée et un tueur de performance. Optimisez vos requêtes de base de données, et vous serez en bien meilleure forme. En règle générale, vous ne devez conserver dans la mémoire cache que des éléments coûteux à obtenir à partir de la base de données, et plus d'un utilisateur voudra voir ces informations à la fois. Comme une liste des 100 meilleurs produits ou quelque chose. De petites quantités de données relativement peu coûteuses à saisir dans la base de données et qui ne sont utiles qu'à une seule personne devraient rester là où elles sont. La mise en cache augmente énormément la complexité, et plus encore dans une ferme Web. N'introduisez pas de complexité inutile à moins d'y être obligé. Attendre jusqu'à ce que vous ayez un problème de performance réel avant d'essayer de le résoudre.

0

des utilisateurs est sans doute une mise en mémoire cache bonne idée. Mais cela dépend de la quantité de données que vous allez mettre en mémoire cache pour chaque utilisateur et du coût de récupération de ces données, quel que soit leur emplacement de stockage.

Pour le verrouillage - quelqu'un d'autre peut-il modifier le profil d'un utilisateur (comme un admininstrator)? Serait-ce un phénomène courant? Si oui, vous voudrez peut-être faire un peu de verrouillage. Sinon, si seulement l'utilisateur peut éditer ses propres trucs, je ne m'en soucierais pas.