2010-08-26 4 views
10

Ich arbeite an einer Webanwendung in ASP.NET/C#, die für die hohe Benutzerlast skalierbar sein muss (wird wahrscheinlich in einer Webfarm ausgeführt). Da es für eine hohe Anzahl von Nutzern, etwa 1 Million plus, aber die Anzahl der Online-Nutzer wäre etwa 30K-50K. Ich plane, Zwischenspeicherung (Provider basiert) zu verwenden, und fragte mich:Zwischenspeichern aller Benutzer in ASP.NET

  1. Ist es eine gute Idee, ALLE Benutzer für die Leistung im Cache? Ich plane, alle anderen generischen Daten wie Einstellungen usw. zu cachen, aber wie effizient wäre es, ALLE Benutzer im Speicher zwischenzuspeichern? Wenn ein Benutzer sein Profil ändert, werde ich nur diesen bestimmten Benutzer im Cache neu laden (mit einer Sammlung aller Benutzer). Irgendwelche Vorschläge zu diesem Ansatz?

  2. Muss ich mich um die Sperrung kümmern, wenn Sie den Cache für diese Benutzer verwenden? Eine einzige Bearbeitung des Profils wäre der Benutzer selbst, das wäre eine atomare Operation, obwohl es mehrere Leseoperationen in verschiedenen Threads geben würde. Wenn ich also Benutzer aus dem Cache abrufe oder einen bestimmten Benutzer aktualisiere, sollte ich die Sperre verwenden?

Dank

Asif

Antwort

6

Alles in Global Cache, das nur für einen einzelnen Benutzer nützlich ist, ist normalerweise eine schlechte Idee und ein Performance-Killer. Optimieren Sie Ihre Datenbankabfragen, und Sie werden in viel besserer Form sein.

Als allgemeine Faustregel sollten Sie nur Dinge im Cache behalten, die teuer aus der Datenbank zu bekommen sind, und mehr als ein Benutzer möchte diese Informationen auf einmal sehen. Wie eine Liste der Top 100 Produkte oder so. Kleine Datenmengen, die relativ günstig aus der Datenbank abgerufen werden können und nur für eine einzelne Person nützlich sind, sollten dort bleiben, wo sie sind.

Caching erhöht die Komplexität enorm und vor allem in einer Webfarm. Führen Sie keine unnötige Komplexität ein, es sei denn, Sie müssen dies unbedingt tun. Warten Sie, bis Sie ein tatsächliches Leistungsproblem haben, bevor Sie versuchen, es zu lösen.

0

Caching Benutzer ist wahrscheinlich eine gute Idee. Es hängt jedoch davon ab, wie viele Daten Sie für jeden Benutzer zwischenspeichern und wie hoch die Kosten für das Abrufen der Daten sind, unabhängig davon, wo sie gespeichert sind.

Zum Sperren - kann jemand anderes ein Benutzerprofil bearbeiten (wie ein Admininstor)? Wäre das ein häufiges Vorkommnis? Wenn dies der Fall ist, möchten Sie vielleicht etwas sperren. Ansonsten, wenn nur der Benutzer seine eigenen Sachen bearbeiten kann, würde ich nicht stören.