Verwendung von Session zu speichern Datatable
derzeit sind wir mit Sitzungen zum speichern von Datentabellen auf unserer Seite, so dass wir nicht haben, um die Datenbank trifft, um den gleichen datatable wieder und wieder. Aber meine Sorge ist, dass es mit der server-Speicher und wenn eine große Anzahl von Benutzer-login-eines Tages, die Antwort des Servers wird langsam, und die Anwendung stürzt möglicherweise ab, wie gut.
Bitte sagen Sie mir, ist es eine gute Idee zum speichern von Datentabellen in Sitzungen oder sollte man sich die datatables aus dem DB-everytime?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Allgemeine Faustregel würde ich sagen, dass Sie nicht verwenden session. Ich hatte noch nicht die Verwendung der Sitzung für eine lange Zeit. Sobald Sie sich bewegen in einer web-farm-situation-Sitzung entweder bekommt viel langsamer oder viel mehr kompliziert oder beides.
Ob Sie durchkommen oder nicht hängt wirklich davon ab, wie viele Daten Sie speichern in der Sitzung, und wie viele Benutzer aktiv in den Sitzungs-timeout-Frist.
Gibt es eine Menge von caching und in-memory-Datenbank-Optionen verfügbar heute, dass eine bessere option sein. Schließlich, obwohl die Lösung so wie beschrieben klingt fraglich, ich würde nicht die Optimierung der bestehenden Lösung bis Sie tatsächlich gemessen ein problem.
Dies ist davon abhängig, was gespeichert wird, in den Datentabellen. In jedem Fall würde ich die ASP.NET Cache zu speichern diese datatables aus den folgenden Gründen.
Cache hat ein Ablaufdatum, das heißt, Sie können automatisch entfernen, es basiert auf einer Schiebe-oder absolut-Ablauf zeitlich Wert
Cache wird automatisch gelöscht, wenn die Prozesse Speicher "Druck" zu hoch ist.
Können Sie eine zwischengespeicherte Element spezifisch für einen Benutzer oder global für alle Benutzer, basierend auf seinen Schlüssel
Beispiel:
Problem, das Sie jetzt haben, ist allerdings, wenn die zugrunde liegenden Daten aktualisiert wird, und ob es akzeptabel ist, für Ihre Anwendung zu präsentieren, "alt" zwischengespeicherte Daten. Wenn es nicht akzeptabel ist, müssen Sie zwangsweise entfernen Sie ein Element aus dem cache, gibt es ein paar Mechanismen für das.
Können Sie setup ein SqlCacheDependency (die ich noch nie persönlich verwendet), oder Sie können einfach löschen Sie die zwischengespeicherten Objekt selbst mit
Cache.Remove(cachekey)
.Ist es vorzuziehen speichern "Häufig verwendet" Daten im Speicher; das ist gute Logik. Aber "Sitzung" bedeutet, dass es vorhanden ist für die Lebensdauer der Sitzung, und damit der Benutzer. Zweitens, während der Nutzer "Sitzung" Leben, wie du schon sagtest, das könnte sein, verbrauchen wertvolle Ressourcen auf der Server-Seite.
Was möchten Sie vielleicht zu prüfen, mit der "Cache" - Objekt, denn es dient dem gleichen Zweck mit "Ablauf".
Gibt es viele Möglichkeiten zur Wiederverwendung von Speicher in .NET
(1) ViewState
(2) Cache
(3) Sitzung
(4) Cookies
Aber ich würde für die "Cache" - Objekt.
Wenn Sie können nicht erhöhen Sie Speicher auf dem web-server dann ist die offensichtliche Antwort ist, speichern Sie es nicht in der session state und Holen Sie aus der Datenbank zu jeder Zeit.
Das problem mit diesem ist, welche Auswirkungen wird es haben auf Ihre Datenbank? Sind Sie nur verschieben das problem von der web-server der Datenbank-server?
Ist es viel einfacher, Maßstab, web-Server, als es ist, um scale-up/aus Datenbanken (und oft billiger, wenn Sie mit so etwas wie SQL-Server)
Wenn Ihr datatable hat kleinere Anzahl von Datensätzen, und es enthält keine vertraulichen Daten, dann können Sie ViewState als gut, aber Daten sollte kleiner sein als dieser Ansatz serialisieren Sie die Daten und speichern Sie es auf client-Seite ein und bekommt dann die Daten von der client-Seite zu speichern, auf server-Seite.