Ein wenig Vorgeschichte: Ich arbeite an einer Webanwendung, die ziemlich viel Zeit benötigt, um Daten vorzubereiten / zu verarbeiten, bevor sie dem Benutzer zum Bearbeiten / Manipulieren zur Verfügung stehen. Die Datenanforderung Aufgabe ~ 15 / 20 Sekunden zu vervollständigen und ein paar Sekunden zu verarbeiten. Danach kann der Benutzer die Werte im laufenden Betrieb bearbeiten. Bei jeder Manipulation von Werten müssen die Daten vollständig neu verarbeitet werden.
Update: Um Verwirrung zu vermeiden, mache ich nur den Datenaufruf 1 Mal (die 15-Sekunden-Hit) und dann wollen, um die Ergebnisse im Speicher zu halten, so dass ich nicht haben, um es erneut aufrufen, bis der Benutzer 100% fertig ist mit ihm arbeiten. Also, der erste Abruf wird eine Weile dauern, aber mit Ajax, ich werde die In-Memory-Daten zu treffen, um ständig zu aktualisieren und halten die Reaktionszeit auf rund 2 Sekunden oder so (ich hoffe).
Um dies effizient zu gestalten, verschiebe ich die ursprünglichen Daten in den Speicher und verwende Ajax-Aufrufe zurück zum Server, damit ich die Verarbeitungszeit für die Neuberechnung reduzieren kann, die bei den Aktualisierungen dieses Benutzers erfolgt.
Hier ist meine Frage, mit Leistung im Verstand, was wäre der beste Weg, um diese Daten zu speichern, vorausgesetzt, dass nur 1 Benutzer wird w / diese Daten zu einem bestimmten Zeitpunkt arbeiten.
Außerdem könnte der Benutzer möglicherweise einige Stunden lang mit diesem Prozess beschäftigt sein. Wenn der Benutzer mit den Daten arbeitet, benötige ich eine Art Failsafe, um die aktuellen Daten des Benutzers zu speichern (entweder in einer Datenbank oder in einer serialisierten Binärdatei), falls die Sitzung auf irgendeine Weise unterbrochen wird. Mit anderen Worten, ich brauche eine Lösung, die einen geeigneten Hook hat, um die Daten des Speicherobjekts zu löschen, falls der Benutzer zu lange unterbrochen / abgelenkt wird.
So weit meine Überlegungen:
Session State - Profis: Auf einen Benutzer beschränkt. Verfügt über das Ereignis Sitzungsende, das meine Anforderungen an die Ausfallsicherheit erfüllt. Nachteile: Langsamste Ausführung meiner derzeitigen Optionen. Das Sitzungsende-Ereignis ist manchmal schwierig zu gewährleisten, dass es richtig ausgelöst wird.
Caching - Profis: Gute Perf. Hat Zugriff auf Abhängigkeiten, was später ein Bonus sein könnte, aber im aktuellen Rahmen nicht wirklich nützlich ist. Nachteile: Kein einfacher Failsafe-Schritt außer einem auf Zeitintervallen basierenden Schreiben. Globaler Anwendungsbereich - es muss sichergestellt werden, dass die Benutzer nicht mit der Arbeit der anderen kollidieren.
Statisch - Profis: Beste Perf. Einfacher zu pflegen, da ich meine aktuellen Klassenstrukturen direkt nutzen kann. Nachteile: Kein einfacher ausfallsichernder Schritt außer einem auf Zeitintervallen basierenden Schreiben. Globaler Geltungsbereich - es muss sichergestellt werden, dass die Benutzer nicht mit der Arbeit der anderen kollidieren.
Hat jemand einen Vorschlag oder einen Kommentar, welche Option ich wählen sollte?
Gracias.
Aktualisieren: Ich vergaß zu erwähnen, dass ich VB.Net, Asp.Net und Sql Server 2005 verwende, um diese Aufgabe zu erfüllen.