django-cached-field

Software screenshot:
django-cached-field
Podrobnosti Software:
Verze: 1.2.2
Datum uploadu: 14 Apr 15
Vývojka: Martin Chase
Licence: Volný
Popularita: 2

Rating: 1.0/5 (Total Votes: 1)

Django mezipaměti pole je aplikace, Django, který poskytuje celer-odložena, cache pole na Django ORM za drahé-to-vypočítat údajům
Použití Django ORM a celer, držet drahý-to-spočítat atributy up-to-date.
Příklad
Řekněme, že máte pomalý metodu na jedné ze svých modelů:
třída kandelábr (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (self):
& Nbsp; spánek (30)
& Nbsp; return "% s% s% s '% (self.weight, self.first_name, self.country)
Fuj; příliš pomalý. Pojďme mezipaměti to. Budeme chtít několik nástrojů. Celer s Django-celerem bude třeba nastavit a bzučí kolem hladce. Pak přidáme v našem oboru s mezipamětí, dědí z modelu mixin a přejmenovat naši metodu vhodně:
od django_cached_field dovozu CachedIntegerField, ModelWithCachedFields
třída kandelábr (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (self):
& Nbsp; spánek (30)
& Nbsp; return "% s% s% s '% (self.weight, self.first_name, self.country)
(Jo, calculate_ je jen úmluva. Jasně jsem se nevzdal kolejnicemi ducha ...)
Dále, migraci db schéma, aby zahrnovala nové mezipaměti pole pomocí jih, nebo vytvořit vlastní. Všimněte si, že dvě pole budou přidány do této tabulky, cached_slow_full_name typu textu a slow_full_name_recalculation_needed typu boolean, pravděpodobně prodlení na hodnotu true.
Už je to trochu lepší. lamppost.slow_full_name může trvat 30 sekund při prvním volána pro daný záznam, ale od té doby, bude to blízko instant. Samozřejmě, že v tomto bodě, že se nikdy nezmění po tomto prvním hovoru.
Zbývající důležitý kousek skládačky je zruší náš cache. Thoses voliče pole jsou pravděpodobně změnit v nějakém views.py (to by mohl být chytřejší o povšimnutí, pokud jsou aktualizovány příslušné hodnoty):
render_to ("kandelábr / edit.html")
def editovat (požadavek, lamppost_id):
& Nbsp; kandelábr = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; v případě, request.METHOD == "POST":
& Nbsp; forma = LamppostForm (request.POST)
& Nbsp; pokud form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; jinde:
& Nbsp; forma = LamppostForm ()
& Nbsp; return {"forma": forma, "kandelábr": kandelábr}
To je ta nejtěžší část jako developer! Caching vyžaduje dopadnout každé místo, je hodnota, kterou lze změnit a volání, že flag_slow_full_name_as_stale metody. Je země přiřazena náhodná novou hodnotu každé ráno na cron'o'clock? Tato vlajka se nejlépe zastaralá by cron'o'one. Myslíte si, počítat váhu na základě součtu všech souvisejících holubů? Háček do holuby přistání. A vzlet. A vše, co se změní hmotnost jednotlivého holuba. Jak řekl Abraham Lincoln: "Existují jen dva tvrdé problémy ve vysílání:. Pojmenování, mezipaměť zneplatnění a chyby off-by-one"
Instalace
Můžete dělat věci jednoduše na sebe:
Pip nainstalovat Django mezipaměti-pole
Nebo, pro ruční instalaci, můžete naklonovat repo a nainstalovat pomocí jazyka Python a setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
CD Django mezipaměti pole /
python setup.py nainstalovat
Testováno s Django 1.3.1, 2.3.1, celer, Django-celer 2.3.3.
Configuration
Dvě změny nastavení jsou do značné míry nutné pro věci do práce: ujistěte se, že je to registrovaná aplikace, ujistěte se, že celer vidí své úkoly souboru:
INSTALLED_APPS + = ['django_cached_field "]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Jedna změna je volitelná: zda přepočet by měl nastat, když označen jako vydýchaného (výchozí), nebo může být ponechána na příštím atribut je přístupná. To je užitečné pro testování prostředí, kde je vám to jedno, že vaše cache hodnoty jsou neplatné. Všimněte si, že v této situaci by nepotřebujete celer.
CACHED_FIELD_EAGER_RECALCULATION = True # nebo False na testovacích prostředí
To je globální možnost, aby jednotlivé výjimky by se místo toho být řešeny předáním and_recalculate argumentu flag_FIELD_as_stale hovoru.
Upozornění
- Race podmínkou, pokud jste vlajka pole jako stale v db transakci, která trvá déle, než celer práce znamená být nazýván.
- Všechny metody ORM (např order_by, filtr) je třeba použít cached_FIELD.
- Recalculate_FIELD používá .update (cached_FIELD = nastavte hodnotu.
- Flag_FIELD_as_stale využívá .update, jakož i

Požadavky na :

  • Python
  • .
  • Django

Komentáře k django-cached-field

Komentáře nebyl nalezen
Přidat komentář
Zapnout obrázky!