django-cached-field

Szoftver screenshot:
django-cached-field
Szoftver adatai:
Változat: 1.2.2
Feltöltés dátuma: 14 Apr 15
Fejlesztő: Martin Chase
Engedély: Ingyenes
Népszerűség: 2

Rating: 1.0/5 (Total Votes: 1)

A Django-cache-elt-mező a Django app, amely Zeller-halasztott, tárolt mezők Django ORM drága-to-számítsa adatok
Segítségével Django ORM és a zeller, tartsa költségesen számítsa attribútumok up-to-date.
példa
Tegyük fel, hogy egy lassú módszer az egyik a modellek:
osztály lámpaoszlop (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (self):
& Nbsp; sleep (30)
& Nbsp; return 'A% s% s% s "% (self.weight, self.first_name, self.country)
Huh; túl lassú. Nézzük cache, hogy. Majd szeretnék egy pár eszközt. Zeller Django-zeller kell majd létrehozni, és dúdolt együtt zökkenőmentesen. Aztán adjunk hozzá a gyorsítótárunkban területen, öröklik a modell mixin és nevezze meg a módszer megfelelően:
a django_cached_field import CachedIntegerField, ModelWithCachedFields
osztály lámpaoszlop (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (self):
& Nbsp; sleep (30)
& Nbsp; return 'A% s% s% s "% (self.weight, self.first_name, self.country)
(Ja, calculate_ csupán egy konvenció. Én egyértelműen nem adta fel a síneket szellem ...)
Ezután költöztetését db sémát az új gyorsítótárazásos mezőt délre, vagy forgassa a saját. Ne feledje, hogy a két területen kerül majd ez a táblázat, cached_slow_full_name típusú szöveget és slow_full_name_recalculation_needed logikai típusú, valószínűleg mulasztó hogy igaz.
Már ez kicsit jobb. lamppost.slow_full_name 30 másodpercet vehet az első alkalom, hogy meghívásra kerül az adott rekord, de attól kezdve, hogy lesz közel instant. Természetesen ezen a ponton, hogy soha nem fog változni, miután az első hívást.
A fennmaradó fontos darabja a puzzle, hogy érvényteleníti a cache. Thoses alkotó mezők valószínűleg megváltozott néhány views.py (ez lehet okosabb mintegy észrevenni, ha a vonatkozó értékek folyamatosan frissülnek):
render_to ("lámpaoszlop / edit.html")
def szerkesztés (kérésre, lamppost_id):
& Nbsp; lámpaoszlop = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; Ha request.METHOD == "POST":
& Nbsp; form = LamppostForm (request.POST)
& Nbsp; Ha form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; mást:
& Nbsp; form = LamppostForm ()
& Nbsp; visszatérése {"forma": form, "lámpaoszlop": lámpaoszlop}
Ez a legnehezebb része a fejlesztő! Caching megköveteli, levadászni minden helyen az értéket meg lehet változtatni, és felszólította, hogy flag_slow_full_name_as_stale módszert. Az ország rendelt egy random új értéket minden reggel cron'o'clock? Hogy a lobogó volt a legjobb állott a cron'o'one. Számítjuk ki súlya alapján az összeg az összes kapcsolódó galambok? Akassza be a galambok partra. És felszállás. És minden, ami megváltoztatja az egyén galamb súlyát. Mint Abraham Lincoln mondta: "Már csak két kemény problémák programozás: elnevezésére, cache érvénytelenítés és off-by-one hiba."
Telepítés
Tudod, hogy a dolgok egyszerűen magaddal:
pip telepíteni Django-cache-elt-téren
Vagy, a kézi telepítés, akkor klónozza a repo és telepítést python és setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
cd Django-cache-elt-field /
python setup.py telepíteni
Tesztelt Django 1.3.1, 2.3.1 zeller, Django-zeller 2.3.3.
Configuration
Két beállítás változások nagyjából szükséges dolgok működjenek: győződjön meg róla, hogy a regisztrált app, győződjön meg róla, zeller látja feladatait file:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Az egyik változás nem kötelező: e újratervezés történjen, amikor megjelölve állott (alapértelmezett), vagy hagyni, hogy a következő alkalommal az attribútum elérhető. Ez próbájára környezetben, ahol nem érdekel, hogy a gyorsítótárazásos értékek érvénytelenek. Ne feledje, hogy ebben a helyzetben, akkor nem kell zellert.
CACHED_FIELD_EAGER_RECALCULATION = True # vagy hamis a tesztkörnyezetben
Ez egy globális lehetőség, vagyis az egyéni kivételek ehelyett kezelni azáltal, hogy a and_recalculate érv a flag_FIELD_as_stale hívást.
Ellenjavallat
- Versenyhelyzet ha Zászló téren állott a db tranzakció, amely hosszabb ideig tart, mint a zeller munkát úgy lehet nevezni.
- Minden ORM módszerek (pl order_by, filter) kell használni cached_FIELD.
- Recalculate_FIELD használ .update (cached_FIELD = beállítani az értéket.
- Flag_FIELD_as_stale használ .update is.

követelmények :

  • Python
  • Django

Hozzászólások a django-cached-field

Hozzászólás nem található
Megjegyzés hozzáadása
Kapcsolja be a képeket!