django-cached-field

Software screenshot:
django-cached-field
Software detaljer:
Version: 1.2.2
Upload dato: 14 Apr 15
Udvikler: Martin Chase
Licens: Gratis
Popularitet: 2

Rating: 1.0/5 (Total Votes: 1)

django-cached-felt er en Django app, der giver selleri-udskudt, cachede felter på Django ORM for dyre-til-beregne data
Brug af Django ORM og Selleri, holder dyre-til-beregne attributter up-to-date.
Eksempel
Sig du har en langsom metode på en af ​​dine modeller:
klasse Lysmast (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (selv-):
& Nbsp; søvn (30)
& Nbsp; tilbagevenden '% s% s af% s'% (self.weight, self.first_name, self.country)
Ugh; for langsomt. Lad cache det. Vi ønsker et par værktøjer. Selleri med Django-selleri vil skulle oprettes og summende langs glat. Så vil vi tilføje i vores cachede felt, arver fra den model MixIn og omdøbe vores metode passende:
fra django_cached_field import CachedIntegerField, ModelWithCachedFields
class Lamppost (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (selv-):
& Nbsp; søvn (30)
& Nbsp; tilbagevenden '% s% s af% s'% (self.weight, self.first_name, self.country)
(Ja, calculate_ er blot en konvention. Jeg har klart ikke opgivet skinner spøgelse ...)
Dernæst migrere db skema til at omfatte nye cached felt ved hjælp sydpå, eller rulle din egen. Bemærk, at to felter vil blive tilføjet til denne tabel, cached_slow_full_name af type tekst og slow_full_name_recalculation_needed af type boolean, sandsynligvis misligholdende til true.
Allerede det er kinda bedre. lamppost.slow_full_name kan tage 30 sekunder første gang det bliver kaldt for en given post, men fra da af, det vil være næsten øjeblikkelig. Selvfølgelig, på dette tidspunkt, det vil aldrig ændre efter den første opkald.
Den resterende vigtige brik i puslespillet er at afkræfte vores cache. Thoses konstituerende felter er formentlig ændret på nogle views.py (dette kunne være mere smart om at lægge mærke hvis de pågældende værdier opdateres):
render_to ("lygtepæl / edit.html")
def edit (anmodning lamppost_id):
& Nbsp; lygtepæl = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; hvis request.METHOD == 'POST':
& Nbsp; formen = LamppostForm (request.POST)
& Nbsp; hvis form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; andet:
& Nbsp; formen = LamppostForm ()
& Nbsp; tilbagevenden {»form«: form, «lygtepæl ': lygtepæl}
Dette er den sværeste del, da udvikleren! Caching kræver, at du jage hvert sted værdien kan ændres, og at kalde det flag_slow_full_name_as_stale metode. Er land tildeles en tilfældig ny værdi hver morgen på cron'o'clock? Denne flag havde bedst være uaktuelle ved cron'o'one. Har du beregne vægten baseret på summen af ​​alle dermed forbundne duer? Hook i duer landing. Og start. Og alt, der ændrer en individuel due vægt. Som Abraham Lincoln sagde: "Der er kun to hårde problemer i programmering:. Navngivning, cache ugyldiggørelse og off-by-one fejl"
Installation
Du kan gøre tingene nemt for dig selv:
pip installere django-cached-felt
Eller, for en manuel installation, kan du klone repo og installere den ved hjælp python og setup.py:
git klon git: //github.com/aquameta/django-cached-field.git
cd Django-cached-felt /
python setup.py installere
Testet med Django 1.3.1, selleri 2.3.1, django-selleri 2.3.3.
Konfiguration
Er temmelig meget kræves to indstillinger ændringer for ting at arbejde: sørg for at det er et registreret app, skal du sørge for selleri ser sine opgaver fil:
INSTALLED_APPS + = ['django_cached_field «]
CELERY_IMPORTS + = ['django_cached_field.tasks «]
En ændring er valgfri: om omberegning skal ske, når markeret som uaktuelle (standard) eller overlades til den næste gang attributten er adgang. Dette er nyttigt for testmiljøer, hvor du er ligeglad, at dine cachede værdier er ugyldige. Bemærk, at i denne situation, vil man ikke behøver selleri.
CACHED_FIELD_EAGER_RECALCULATION = True # eller falsk for testmiljøer
Dette er en global indstilling, så de enkelte undtagelser bør i stedet håndteres ved at vælte and_recalculate argument til flag_FIELD_as_stale opkald.
Advarsler
- Race tilstand, hvis du afmærke et område som uaktuelle i en db transaktion, der tager længere tid at gennemføre end selleri job tager at blive kaldt.
- Alle ORM metoder (f.eks order_by, filtrer) skal bruge cached_FIELD.
- Recalculate_FIELD bruger .update (cached_FIELD = for at indstille værdien.
- Flag_FIELD_as_stale bruger .update, samt

Krav :

  • Python
  • .
  • Django

Kommentarer til django-cached-field

Kommentarer ikke fundet
Tilføj kommentar
Tænd billeder!