2009-08-04 5 views
0

Szenario:Gemeinsame Nutzung statische Klassen Daten accross Webgarten/Bauernhof

  • ASP.NET-Website
  • Globale statische Klassen TONNEN Konfigurationsdaten
  • die statischen Daten ist meist schreibgeschützt enthält, aber es in eine Zeit lang hin und wieder ändern
  • Daten in statischen Klassen können in Echtzeit muss, jederzeit

jetzt funktioniert das wirklich toll In einem einzigen Worker-Prozess sind alle Konfigurationsdaten immer im Speicher (Schreiben von Änderungen auf die Festplatte nur, wenn Änderungen an den Daten vorgenommen werden), und da es ein LOT verwendet wird, beschleunigt es die Anwendung um Größenordnungen (im Vergleich zur Speicherung in der Datenbank und Abfragen bei jeder Anfrage)

Wie würden Sie diese Anwendung konvertieren, damit sie in einem Webgarten oder sogar in einer Webfarm-Umgebung verwendet werden kann?

was ich suche ist ein Echtzeit-Synchronisationsmechanismus

die Frage, offensichtlich ist, dass jeder Arbeiter hätte es eigene Kopie der statischen Klassen Daten ist; Ich habe einige Ideen zu dem Ansatz, den ich nehmen würde, aber würde gerne sehen, welche anderen Ideen Menschen haben

Antwort

1

Sie könnten das Datum auf einer freigegebenen Datei im Dateisystem überprüfen. Jedes Mal, wenn sich die Konfigurationsdaten ändern, berühren Sie einfach die Datei, um das Änderungsdatum zu ändern. Vergleichen Sie das Datum, an dem Ihr Programm die Daten zuletzt mit dem Datum der Datei geladen hat. Wenn die Datei ein neueres Datum hat, laden Sie die Daten neu und aktualisieren Sie Ihr LastLoaded-Datum.

Es ist leicht und ermöglicht das einfache Auslösen von Daten. Solange sich die Datei seit einiger Zeit nicht geändert hat, sollte das Betriebssystem die meisten Datei-Metadaten sowieso in ram haben.

Während ich keine Leistungsvergleiche durchgeführt habe, habe ich diesen Weg immer als den robusten und einfach zu implementierenden Weg gesehen, die Nachricht "Cache neu laden" an alle Clients zu übergeben.

DateTime cacheDate = DateTime.Now.AddHours(-1); 
DateTime fileDate = System.IO.File.GetLastWriteTime(@"C:\cachefile.txt"); 
if(fileDate > cacheDate) 
{ 
    //Reload cache 
    cacheDate = DateTime.Now; 
} 
//Get Cached Data 

Sie können auch den HttpContext-Cache verwenden.

Ich habe das vorher nicht auf diese Weise verwendet, also weiß ich nicht viel darüber, wie es funktioniert.

+0

danke für die Antwort, die Daten befinden sich in einem DB, aber die Technik könnte gelten – BlackTigerX

Verwandte Themen