django-cached-field

Screenshot Software:
django-cached-field
Detalii soft:
Versiune: 1.2.2
Incarca data: 14 Apr 15
Producător: Martin Chase
Licenţă: Gratuit
Popularitate: 2

Rating: 1.0/5 (Total Votes: 1)

este o aplicatie Django, care oferă în cache-teren-django Țelină-amânată, câmpurile cache pe Django ORM pentru datele scump-to-calcula
Utilizarea Django ORM si telina, să păstreze-scump la calculeze atribute up-to-date.
Exemplul
Să presupunem că aveți o metodă lent pe unul dintre modelul:
Clasa de felinar (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (auto):
& Nbsp; de somn (30)
& Nbsp; întoarcere "% s% s din% s '% (self.weight, self.first_name, self.country)
Ugh; prea lent. Să cache asta. Vom dori câteva instrumente. Țelină cu django-telina va trebui să se înființeze și fredonând de-a lungul lin. Apoi vom adăuga în domeniul nostru în cache, moșteni de la modelul mixin și a redenumi metoda noastra corespunzător:
de la CachedIntegerField import django_cached_field, ModelWithCachedFields
Clasa de felinar (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (nule = True)
& Nbsp; def calculate_slow_full_name (auto):
& Nbsp; de somn (30)
& Nbsp; întoarcere "% s% s din% s '% (self.weight, self.first_name, self.country)
(Da, calculate_ este doar o convenție. Eu clar nu au dat duhul șine ...)
Apoi, migra schema ta db pentru a include noul câmp Cached folosind sud, sau rola ta. Rețineți că două domenii vor fi adăugate la această masă, cached_slow_full_name de tip text și slow_full_name_recalculation_needed de tip boolean, probabil obligațiile de adevărat.
Deja e cam mai bine. lamppost.slow_full_name poate dura 30 secunde prima dată când este chemat pentru o anumită înregistrare, dar de atunci, va fi instant aproape. Desigur, în acest moment, se va schimba niciodată după aceea prim apel.
Piesa importantă rămasă de puzzle este de a invalida cache nostru. Câmpuri constitutive thoses sunt, probabil, modificate în unele views.py (acest lucru ar putea fi mai inteligent despre observe dacă valorile relevante sunt actualizate):
render_to ("felinar / edit.html")
def edita (cerere, lamppost_id):
& Nbsp; felinar = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; dacă request.METHOD == 'POST':
& Nbsp; formular = LamppostForm (request.POST)
& Nbsp; dacă form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; altfel:
& Nbsp; formular = LamppostForm ()
& Nbsp; întoarcerea {"formă": formă, "felinar": felinar}
Aceasta este partea cea mai grea ca dezvoltator! Caching necesită vâna fiecare loc de valoarea ar putea fi schimbată și apelarea această metodă flag_slow_full_name_as_stale. Este țară atribuie o valoare aleatoare nou în fiecare dimineață la cron'o'clock? Asta pavilion a fi cel mai bun stătut de cron'o'one. Ai calcula greutate în funcție de suma tuturor porumbei asociate? Hook în aterizare porumbei. Și decolare. Și tot ceea ce se schimbă greutatea unui porumbel individ. Așa cum a spus Abraham Lincoln, "Există doar două probleme dificile in programarea:. Denumire, cache invalidare și off-de-unu erori"
Instalare
Puteți face lucrurile usor pentru tine:
Pip instala în cache-django-câmp
Sau, pentru o instalare manual, puteți clona repo și instalați-o folosind python și setup.py:
git git clona: //github.com/aquameta/django-cached-field.git
cd django-în cache-field /
python setup.py instalare
Testat cu Django 1.3.1, 2.3.1 telina, django-țelină 2.3.3.
Configurare
Doua schimbari setări sunt destul de mult necesare pentru lucruri la muncă: asigurați-vă că este o aplicatie înregistrat, asigurați-vă că telina reușește dosarul său sarcini:
INSTALLED_APPS + = ['django_cached_field ",]
CELERY_IMPORTS + = ['django_cached_field.tasks ",]
O schimbare este opțională: dacă recalcularea ar trebui să se întâmple atunci când marcate ca vechi (implicit) sau poate fi lăsat la următoarea atributul este accesat. Acest lucru este util pentru mediile de testare în cazul în care nu-mi pasă că valorile cache sunt nevalide. Rețineți că, în această situație, nu ar avea nevoie de telina.
CACHED_FIELD_EAGER_RECALCULATION = Adevărat sau fals # pentru medii de testare
Aceasta este o opțiune globală, deci excepții individuale ar trebui să fie în schimb manipulate prin trecerea argumentul and_recalculate la apelul flag_FIELD_as_stale.
Avertismente
- Stare Race dacă semn un câmp ca stătut într-o tranzacție db care durează mai mult pentru a finaliza decât lucrarea telina nevoie pentru a fi numit.
- Toate metodele ORM (de exemplu order_by, filtru) necesitatea de a utiliza cached_FIELD.
- Recalculate_FIELD .update juca (cached_FIELD = pentru a seta valoarea.
- Flag_FIELD_as_stale foloseste .update, precum și

Cerințe :

  • Python
  • .
  • Django

Comentarii la django-cached-field

Comentariile nu a fost găsit
Adauga comentarii
Porniţi pe imagini!