À l'aide de Session pour stocker Datatable
actuellement, nous sommes à l'aide de Sessions pour stocker les tables de données dans nos pages, de sorte que nous n'avons pas à rendre la Base de données atteint pour obtenir le même datatable encore et encore. Mais mon souci, c'est que c'est à l'aide de la mémoire du serveur et si un grand nombre d'utilisateurs de connexion, un jour, la réponse du serveur est lent et notre application peut se bloquer.
S'il vous plaît dites-moi est-ce une bonne idée de stocker les tables de données en Sessions ou devrions-nous obtenir les tables de données à partir de DB à chaque fois?
OriginalL'auteur Usman Khalid | 2012-10-10
Vous devez vous connecter pour publier un commentaire.
Comme une règle générale, je dirais de ne pas utiliser de session. Je n'ai pas eu de session d'utilisation pendant une longue période. Dès que vous vous déplacez dans une batterie de serveurs web situation session devient beaucoup plus lent, ou beaucoup plus compliqué, ou les deux.
Si vous allez sortir avec elle ou pas dépend vraiment de la quantité de données que vous stockez dans la session, et combien d'utilisateurs actifs dans le délai d'expiration de session.
Il y a beaucoup de mise en cache et dans la mémoire de la base de données d'options disponibles aujourd'hui qui peut être une meilleure option. Enfin, alors que la solution comme décrit semble douteuse, je n'aurais pas d'optimiser la solution existante jusqu'à ce que vous avez réellement mesuré un problème.
+1, surtout pour "mesurer, comprendre que les optimiser".
La méthode la plus simple et la plus évidente alternative est comme suggéré par d'autres réponses ici pour utiliser asp.net la mise en cache. Gardez à l'esprit que asp.net la mise en cache peut-être aussi maladroit dans une batterie de serveurs web si vous ne pouvez pas accepter une certaine incohérence dans les données en cache. Plus lourd des solutions comprennent des choses comme memcached, ou peut-être redis et une variété d'autres technologies similaires. Je soupçonne que vous n'avez pas besoin d'un lourd solution parce que votre problème n'auraient probablement été assez évident que tu n'aurais pas besoin de demander si elle pouvait être un problème.
OriginalL'auteur ScottS
Cela dépend de ce qui est enregistré dans les tables de données. En tout cas, je voudrais utiliser le ASP.NET Cache pour stocker ces tables de données pour les raisons suivantes.
Cache a une date d'expiration, ce qui signifie que vous pouvez supprimer automatiquement, il basé sur une analyse ou absolue d'expiration chronométré valeur
Cache sera automatiquement supprimé si le processus de la mémoire de la "pression" est trop élevé.
Vous pouvez faire un élément de mise en cache spécifique à un utilisateur, ou global pour tous les usagers en fonction de ses principaux
par exemple:
La question que vous avez maintenant, cependant, est de savoir si le sous-jacent de données est mise à jour, et si elle est acceptable pour votre application de présenter des "vieux" mise en cache des données. Si il n'est pas acceptable, vous devez supprimer un élément de la mémoire cache, il y a un peu de mécanismes pour que.
Vous pouvez configurer un SqlCacheDependency (que je n'ai jamais personnellement utilisé), ou vous pouvez simplement effacer l'objet mis en cache à l'aide
Cache.Remove(cachekey)
.+1. Le Cache est pour la mise en cache, la Session de données par utilisateur (également dans le cas de l'utilisation en mémoire l'état de session, on devrait être prêt que ces données disparaît tout simplement en raison de redémarrage du serveur/recycle,...). Oui, le Cache de travail parfaitement bien pour la mise en cache de données partagée dans WebFarm scénario.
Pour une batterie de serveurs web, il y a de cache distribué des systèmes qui prennent en charge les problèmes qui sont spécifiques.
OriginalL'auteur Matthew
Il est préférable de le garder ", plus couramment utilisées" les données dans la Mémoire; c'est bien logique. Toutefois, la "Session" signifie qu'il n'existe pour la durée de vie de la Session, et donc que l'utilisateur. Deuxièmement, dans l'attente de l'utilisateur "Session" de la vie, comme vous l'avez déjà dit, cela pourrait être consomment des ressources intéressantes sur le Côté Serveur.
Ce que vous pouvez envisager d'utiliser est le "Cache" de l'objet, car il sert à la même chose avec "date d'Expiration".
Il existe de nombreuses façons de ré-utilisation de mémoire .NET
(1) l'état d'affichage
(2) Cache
(3) Session
(4) les Témoins
Mais je pencherais pour le "Cache" de l'objet.
Oui, mais, évidemment, cela dépend de la quantité de données que vous stockez dans le Cache. Nous l'utilisons pour des choses simples comme la Clientèle de Noms de, Noms d'Utilisateur, etc. alternativement, vous pouvez envisager quelque chose comme MemCached (.NET version et la version Linux est - ce que vous préférez). D'autres alternatives si vos données est importante est d'utiliser Redis, CouchBase ou semblables.
OriginalL'auteur Dane Balia
Si vous ne pouvez pas augmenter la mémoire sur le serveur web, puis la réponse la plus évidente est de ne pas le conserver dans l'état de session et l'obtenir à partir de la base de données à chaque fois.
Le problème, c'est quel sera l'impact sur votre base de données? Vous êtes juste déplacer le problème entre le serveur web et le serveur de base de données?
Il est beaucoup plus facile de faire évoluer les serveurs web que c'est à l'échelle de sortir/Bases de données (et souvent moins cher si vous utilisez quelque chose comme SQL Server)
OriginalL'auteur Greg
Si votre datatable est plus petit nombre de dossiers et il ne contient pas de données sensibles, alors vous pouvez utiliser ViewState, mais les données doivent être plus petits que cette approche va sérialiser les données et de les stocker à côté client et reçoit les données côté client de magasin d'à côté serveur.
OriginalL'auteur