django-cached-field

Screenshot der Software:
django-cached-field
Softwarebeschreibung:
Version: 1.2.2
Upload-Datum: 14 Apr 15
Entwickler: Martin Chase
Lizenz: Frei
Popularität: 2

Rating: 1.0/5 (Total Votes: 1)

django-cached-Feld ist ein Django-Applikation, die bietet Sellerie begünstigte, zwischengespeichert Felder auf Django ORM für teuer zu kalkulierender Daten
Mit Django ORM und Sellerie, halten teuer zu kalkulierender Attribute up-to-date.
Beispiel
Angenommen, Sie haben eine langsame Methode auf einer Ihrer Modelle:
Klasse Laternenpfahl (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (Selbst-):
& Nbsp; Schlaf (30)
& Nbsp; return 'Die% s% s von% s'% (self.weight, self.first_name, self.country)
Ugh; zu langsam. Lassen Sie uns Cache. Wir werden ein paar Werkzeuge möchten. Sellerie mit django-Sellerie müssen eingerichtet werden und brummt reibungslos. Dann werden wir in unserer zwischengespeichert Feld hinzufügen, erben von der Modell mixin und unsere Methode umbenennen angemessen:
von django_cached_field Import CachedIntegerField, ModelWithCachedFields
Klasse Laternenpfahl (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (Selbst-):
& Nbsp; Schlaf (30)
& Nbsp; return 'Die% s% s von% s'% (self.weight, self.first_name, self.country)
(Ja, calculate_ ist nur eine Konvention. Ich habe nicht eindeutig den Schienen Geist aufgegeben ...)
Anschließend migrieren Db-Schema, um das neue Feld mit zwischengespeicherten Süden zählen, oder rollen Sie Ihre eigenen. Beachten Sie, dass zwei Felder dieser Tabelle cached_slow_full_name vom Typ Text hinzugefügt und vom Typ boolean slow_full_name_recalculation_needed werden, wahrscheinlich in Verzug zu wahren.
Schon das ist ein bisschen besser. lamppost.slow_full_name kann 30 Sekunden dauern, wenn sie erstmalig für einen bestimmten Datensatz aufgerufen wird, aber von da an, wird es fast sofort sein. Natürlich an dieser Stelle, es wird nie nach dem ersten Anruf ändern.
Die übrigen wichtigen Teil des Puzzles ist es, unseren Cache ungültig zu machen. Thoses einzelnen Felder sind wahrscheinlich in einer views.py geändert (dies könnte klüger zu bemerken, wenn die entsprechenden Werte aktualisiert werden):
render_to ("Laternenpfahl / edit.html")
def bearbeiten (Anfrage, lamppost_id):
& Nbsp; Laternenpfahl = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; wenn request.method == 'POST':
& Nbsp; form = LamppostForm (request.POST)
& Nbsp; wenn form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; sonst:
& Nbsp; form = LamppostForm ()
& Nbsp; Rückkehr {"Form": Form, 'Laterne': Laternenpfahl}
Dies ist der schwierigste Teil als Entwickler! Caching erfordert, dass Sie jeden Ort, der Wert kann geändert werden, jagen und fordern, dass flag_slow_full_name_as_stale Verfahren. Ist Land eine zufällige neue Wert jeden Morgen im cron'o'clock zugeordnet? Diese Flagge war abgestanden besten durch cron'o'one sein. Haben Sie Gewicht zu berechnen, basierend auf der Summe aller verbundenen Tauben? Hänge die Tauben Landung. Und Start. Und alles, was Gewicht eines einzelnen Taube ändert. Als Abraham Lincoln sagte: "Es gibt nur zwei schwere Probleme bei der Programmierung:. Namens, Cache ungültig und Off-by-one Fehler"
Installation
Sie können die Dinge einfach auf sich selbst zu machen:
pip django-cached-Bereich zu installieren
Oder für eine manuelle Installation, können Sie die repo klonen und installieren Sie es mit Python und setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
cd django-cached-Feld /
python setup.py install
Getestet mit Django 1.3.1, Sellerie 2.3.1, django-Sellerie 2.3.3.
Konfiguration
Zwei Einstellungen Änderungen werden so ziemlich zu Aktivitäten Arbeit benötigt: stellen Sie sicher, es ist eine eingetragene App, stellen Sie sicher, Sellerie sieht seine Aufgaben-Datei:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Eine Änderung ist optional: ob Neuberechnung passieren soll, wenn als abgestanden (Standard) gekennzeichnet oder auf das nächste Mal das Attribut abgerufen gelassen werden. Dies ist nützlich für Testumgebungen, wo es dir egal ist, dass Ihre zwischengespeicherten Werte sind ungültig. Beachten Sie, dass in dieser Situation, würden Sie nicht brauchen, Sellerie.
CACHED_FIELD_EAGER_RECALCULATION = True # oder False für Testumgebungen
Dies ist eine globale Option, so dass einzelne Ausnahmen sollten stattdessen, indem das and_recalculate Argument an die flag_FIELD_as_stale Anruf behandelt werden.
Vorsichtsmaßnahmen
- Race-Bedingung, wenn Sie ein Feld als abgestanden in einer db Transaktion, die mehr in Anspruch nimmt als die Sellerie Job nimmt zu nennen Flagge.
- Alle ORM Methoden (zB order_by, Filter) müssen cached_FIELD verwenden.
- Recalculate_FIELD verwendet .update (cached_FIELD = um den Wert einzustellen.
- Flag_FIELD_as_stale verwendet .update sowie

Anforderungen :

  • Python
  • .
  • Django

Kommentare zu django-cached-field

Kommentare nicht gefunden
Kommentar hinzufügen
Schalten Sie auf die Bilder!