2009-08-24 4 views
1

Ich habe eine "Punktzahl", die ich für mehrere Elemente für mehrere Benutzer berechnen muss. Jeder Benutzer hat viele viele Punkte, die für ihn einzigartig sind, und das Berechnen kann zeit-/prozessorintensiv sein. (Die Langsamkeit ist nicht am Ende der Datenbank). Um dies zu bewältigen, verwende ich Memcached. Ohne Memcache würden einige Seiten 10 Sekunden zum Laden benötigen! Memcache scheint gut zu funktionieren, weil die Scores sehr kleine Informationen sind, aber eine Weile brauchen, um sie zu berechnen. Ich setze den Schlüssel tatsächlich so, dass er niemals abläuft, und dann lösche ich ihn unter gelegentlichen Umständen, die sich ändern.Ok Memcache auf diese Weise zu verwenden? oder brauchen Sie eine Systemrearchitektur?

Ich betrete eine neue Phase mit diesem Produkt und überlege mir, das Ganze neu zu gestalten. Es scheint eine Möglichkeit zu geben, die Werte iterativ zu berechnen und sie dann in einem lokalen Feld zu speichern. Es wird ein bisschen ähnlich zu dem, was jetzt passiert, nur die Wert-Updates werden schneller passieren, und der Cache wird in der realen Datenbank sein, und die Verwaltung wird ein bisschen mehr Arbeit sein (ich denke, ich würde immer noch Memcache oben verwenden davon aber).

Wenn es darauf ankommt, ist alles in Python/Django.

Beabsichtigt der Cache wie diese schlechte Praxis? Ist es o.k? Warum? Soll ich Dinge neu konstruieren?

Antwort

2

Wenn es nicht kaputt ist ... repariere es nicht; ^) Es scheint, dass deine Methode funktioniert, also würde ich sagen, bleib dabei. Sie können sich memcachedb (oder tokyo cabinet) anschauen, was eine persistente Version von Memcache ist. Wenn der Memcache-Computer abstürzt und neu startet, müssen auf diese Weise nicht alle Werte neu berechnet werden.

1

Sie wenden hier mehrere architektonische Muster an, und jeder von ihnen hat sicherlich einen Platz. Es gibt hier nicht genügend Informationen, um zu bewerten, ob Ihre aktuelle Lösung neu konzipiert werden muss oder ob Ihre Ideen funktionieren. Es scheint mir so, als ob Ihr Verständnis der Anforderungen des Benutzers wächst, möchten Sie vielleicht Dinge verbessern.

Wie immer, Prototyp, messen Sie die Leistung, berücksichtigen Sie den Kompromiss zwischen Komplexität und Leistung - Sie müssen nicht so schnell wie möglich sein, nur schnell genug.

Caching in verschiedenen Formen ist oft der Schlüssel zu einer guten Leistung. Die Frage ist hier, ob es sich lohnt, die verkürzten Werte beizubehalten. Wenn sie im Laufe der Zeit stabil sind, ist dies oft eine effektive Strategie. Ob der Cache beibehalten oder Platz für sie in Ihrem Datenbankschema geschaffen wird, hängt wahrscheinlich von den Zugriffsmustern ab. Da es verschiedene Abfragepfade gibt, kann ein sorgfältig gestaltetes Datenbankschema sinnvoll sein.

0

Anstatt memcached zu verwenden, speichern Sie die berechnete Punktzahl an derselben Stelle wie Ihre anderen Daten. Dies kann einfacher sein und weniger Boxen erfordern.

Memcached ist nicht unbedingt die Antwort auf alles; Es ist für Systeme gedacht, die sehr hoch lesen müssen. Es klingt wie in Ihrem Fall, muss es nicht, es muss einfach ein bisschen effizienter sein.

Verwandte Themen