django-cached-field

Software screenshot:
django-cached-field
Software ətraflı:
Version: 1.2.2
Tarixi Upload: 14 Apr 15
Geliştirici: Martin Chase
Lisenziya: Pulsuz
Məşhurluq: 2

Rating: 1.0/5 (Total Votes: 1)

Django-cached sahəsində təmin edən Django app Kərəviz təxirə salınmış, bahalı-to-hesablamaq məlumat üçün Django ORM cached sahələri
Django ORM və Kərəviz istifadə edərək, bahalı-to-hesablamaq up-to-tarix atributları saxlamaq.
Məsələn
Siz modellərindən biri bir yavaş metodu De:
class Lamppost (models.Model):
& Nbsp; @ mülkiyyət
& Nbsp; def slow_full_name (özünü):
& Nbsp; yuxu (30)
& Nbsp; qaytarılması '% s% s% s'% (self.weight, self.first_name, self.country)
Uf; çox yavaş. Ki cache edək. Biz bir neçə alətlər lazımdır. Django-kərəviz ilə kərəviz qurmaq və rəvan boyunca uğultu etmək lazımdır. Sonra cached sahəsində əlavə edəcəyik, model mixin varis və müvafiq bizim metodu adını dəyişmək:
django_cached_field idxal CachedIntegerField, ModelWithCachedFields dən
class Lamppost (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (özünü):
& Nbsp; yuxu (30)
& Nbsp; qaytarılması '% s% s% s'% (self.weight, self.first_name, self.country)
(Bəli, calculate_ bir konqres. Mən aydın ... relslər hayalet imtina deyil olunur)
Next, cənub istifadə edərək, yeni cached sahəsində əlavə etmək üçün db şeması miqrasiya və ya öz gəzmək. Iki sahələrində yəqin ki, doğru u mənim, bu masa, növü mətn cached_slow_full_name əlavə və növü boolean slow_full_name_recalculation_needed olacaq unutmayın.
Onsuz da o kinda daha yaxşıdır. lamppost.slow_full_name 30 saniyə bu bir rekord adlı olur ilk dəfə ala bilər, lakin sonra, bu yaxın ani olacaq. Əlbəttə ki, bu nöqtədə, bu, ilk zəng sonra heç vaxt dəyişməyəcək.
puzzle qalan mühüm parça bizim cache qüvvədən edir. Thoses təsis sahələri, yəqin ki, (bu müvafiq dəyərlər yenilənir əgər fərq haqqında daha ağıllı ola bilər) bir views.py dəyişdirilir:
render_to ("lampa diyəri / edit.html")
def edit (tələb, lamppost_id):
& Nbsp; lampa diyəri = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; əgər request.METHOD == 'POST:
& Nbsp; form = LamppostForm (request.POST)
& Nbsp;) (form.is_valid əgər:
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; başqa:
& Nbsp; form = LamppostForm ()
& Nbsp; qaytarılması {'şəklində: forması,' lampa diyəri: lampa diyəri}
Bu geliştirici kimi ən çətin hissəsidir! Caching siz dəyəri dəyişdirilə bilər hər yerdə aşağı ov və flag_slow_full_name_as_stale metodu zəng tələb edir. Ölkə təsadüfi yeni dəyər cron'o'clock hər səhər verilir? Bu bayraq yaxşı cron'o'one ilə bayat ola idi. Bütün bağlı göyərçinlər məbləğ əsasında çəki hesablamaq edirsiniz? Göyərçinlər açılış çəngəl. Və takeoff. Və fərdi göyərçin çəki dəyişikliklər hər şey. Abraham Lincoln dediyi kimi, "yalnız iki ağır proqramlaşdırma problemlər var. Adlandırma, cache ləğv və off-by-bir səhvlər"
Quraşdırma
Siz özünüz şeyi asan edə bilər:
Django-cached sahədən bərpa tırtıl
Və ya, bir dərslik quraşdırma üçün, repo klon və python və setup.py istifadə edərək quraşdıra bilərsiniz:
git klon git: //github.com/aquameta/django-cached-field.git
cd Django-cached sahədə /
python bərpa setup.py
Django 1.3.1, kərəviz 2.3.1 Django-kərəviz 2.3.3 ilə test edilmişdir.
Konfiqurasiya
Iki parametrləri dəyişikliklər olduqca çox iş şeylər üçün tələb olunur: o, əmin kərəviz onun vəzifələri fayl görür etmək qeydə app əmin olun:
INSTALLED_APPS + = ['django_cached_field']
CELERY_IMPORTS + = ['django_cached_field.tasks']
Bir dəyişiklik bağlıdır: bayat (default) kimi qeyd və ya atributu əldə növbəti dəfə buraxılacaq zaman yenidən hesablanması baş olub. Sizin cached dəyərlər etibarsız olduğunu vecimə deyil bu test mühit üçün faydalıdır. Bu vəziyyətdə, kərəviz lazım deyil ki, unutmayın.
CACHED_FIELD_EAGER_RECALCULATION = True # və ya sınaq mühit üçün False
Bu fərdi istisnalar yerinə flag_FIELD_as_stale zəng and_recalculate dəlil keçərək idarə olunmalıdır qlobal seçim edir.
Caveats
- Race vəziyyəti kərəviz iş adlandırmaq üçün lazım çox başa çatdırmaq üçün uzun çəkir ki, bir db əməliyyat sahəsində kimi köhnə bayrağı əgər.
- Bütün ORM üsulları (məsələn, order_by, filter) cached_FIELD istifadə etmək lazımdır.
- Recalculate_FIELD dəyəri təyin etmək üçün = (cached_FIELD .update istifadə edir.
- Flag_FIELD_as_stale, eləcə də .update istifadə

tələblər

  • Python
  • .
  • Django

Şərh django-cached-field

Şərhlər tapılmadı
Şərh əlavə
Images yandırın!