django-cached-field

Software screenshot:
django-cached-field
Software informatie:
Versie: 1.2.2
Upload datum: 14 Apr 15
Ontwikkelaar: Martin Chase
Licentie: Gratis
Populariteit: 2

Rating: 1.0/5 (Total Votes: 1)

-django cached-veld is een Django app die biedt Selderij-uitgesteld, in de cache velden op Django ORM voor dure-to-calculate gegevens
Met behulp van Django ORM en selderij, houden duur te berekenen attributen up-to-date.
Voorbeeld
Stel dat je een langzame methode op een van uw modellen:
klasse Lantaarnpaal (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (zelf):
& Nbsp; de slaap (30)
& Nbsp; return 'De% s% s van% s'% (self.weight, self.first_name, self.country)
Ugh; te traag. Laten we de cache dat. We willen een paar tools. Selderij met django-selderij zal moeten worden opgezet en neuriën soepel. Dan zullen we aan onze gecached veld, erven van het model mixin en hernoem onze methode adequaat:
van django_cached_field import CachedIntegerField, ModelWithCachedFields
klasse Lantaarnpaal (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (zelf):
& Nbsp; de slaap (30)
& Nbsp; return 'De% s% s van% s'% (self.weight, self.first_name, self.country)
(Ja, calculate_ is gewoon een conventie. Ik heb duidelijk nog niet opgegeven hebben van de rails ghost ...)
Vervolgens migreren uw db schema om de nieuwe cached veld zijn het gebruik van het zuiden, of rol je eigen. Merk op dat twee velden zullen worden toegevoegd aan deze tafel, cached_slow_full_name van het type tekst en slow_full_name_recalculation_needed van het type boolean, waarschijnlijk in gebreke gebleven om waar.
Al dat is een beetje beter. lamppost.slow_full_name kan 30 seconden duren voordat de eerste keer dat het wordt opgeroepen voor een bepaalde record, maar vanaf dat moment, zal het bijna onmiddellijk zijn. Natuurlijk, op dit punt, het zal nooit veranderen na dat eerste gesprek.
De resterende belangrijk stuk van de puzzel is om onze cache ongeldig. Thoses samenstellende velden zijn waarschijnlijk veranderd in sommige views.py (dit kan slimmer over te merken indien de desbetreffende waarden worden bijgewerkt zijn):
render_to ("lantaarnpaal / edit.html")
def bewerken (aanvraag, lamppost_id):
& Nbsp; lantaarnpaal = Lamppost.objects.get (PK = lamppost_id)
& Nbsp; als request.method == 'POST':
& Nbsp; vorm = LamppostForm (request.POST)
& Nbsp; als form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; anders:
& Nbsp; vorm = LamppostForm ()
& Nbsp; return {'vorm': vorm, 'lantaarnpaal': lantaarnpaal}
Dit is het moeilijkste deel als de ontwikkelaar! Caching vereist dat u jagen elke plaats de waarde zou kunnen worden veranderd en roepen dat flag_slow_full_name_as_stale methode. Wordt het land toegewezen aan een willekeurige nieuwe waarde elke ochtend om cron'o'clock? Die vlag had best zijn oudbakken door cron'o'one. Heeft u gewicht te berekenen op basis van de som van alle bijbehorende duiven? Haak in de duiven landing. En opstijgen. En alles wat het gewicht van een individu duif verandert. Zoals Abraham Lincoln zei: "Er zijn slechts twee harde problemen in de programmering:. Naamgeving, cache ongeldigverklaring en off-voor-één fouten"
installatie
Je kunt dingen makkelijk te maken over jezelf:
Pip-django cached-veld te installeren
Of, voor een handmatige installatie, kunt u de repo te klonen en te installeren met behulp van python en setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
cd django-cached-veld /
python setup.py installeren
Getest met Django 1.3.1, selderij 2.3.1, django-selderij 2.3.3.
Configuratie
Twee instellingen veranderingen zijn vrij veel nodig wat er te werk: zorg ervoor dat het een geregistreerd app, zorg ervoor dat selderij ziet haar taken bestand:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Een verandering is optioneel: of herberekening moet gebeuren wanneer gemarkeerd als oudbakken (standaard) of worden overgelaten aan de volgende keer dat het attribuut wordt benaderd. Dit is handig voor het testen omgevingen waar je niet kan schelen dat je de cache waarden zijn ongeldig. Merk op dat in deze situatie, zou je niet selderij nodig.
CACHED_FIELD_EAGER_RECALCULATION = True # of Onwaar voor testomgevingen
Dit is een algemene optie, zodat individuele uitzonderingen moeten in plaats daarvan door het passeren van de and_recalculate argument om de flag_FIELD_as_stale oproep worden behandeld.
Voorbehoud
- Race conditie als je vlag een veld als oudbakken in een db transactie die langer in beslag neemt dan de selderij baan neemt genoemd te worden.
- Alle ORM methoden (bv order_by, filter) moeten cached_FIELD gebruiken.
- Recalculate_FIELD gebruikt .update (cached_FIELD = om de waarde in te stellen.
- Flag_FIELD_as_stale gebruikt .update, evenals

Eisen

  • Python
  • .
  • Django

Reacties op django-cached-field

Reacties niet gevonden
Commentaar toe te voegen
Zet op de beelden!