django-cached-field

Yazılım ekran görüntüsü:
django-cached-field
Yazılım detaylar:
Versiyon: 1.2.2
Qayıt: 14 Apr 15
Geliştirici: Martin Chase
Lisans: Ücretsiz
Popülerlik: 2

Rating: 1.0/5 (Total Votes: 1)

django-önbelleğe alan sağlayan bir Django uygulaması Kereviz-ertelenmiş, pahalı-için-hesapla veriler için Django ORM önbelleğe alanlar
Django ORM ve Kereviz kullanarak, pahalı-için-hesapla up-to-date bağlıyor tutmak.
Örnek
Eğer modelini seçebilir yavaş bir yöntem var ki:
sınıf Lamppost (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (öz):
& Nbsp; uyku (30)
& Nbsp; dönüş '% s% s% s' (% self.weight, self.first_name, self.country)
Ugh; çok yavaş. En emin önbelleğe edelim. Biz bir kaç araçları isteyeceksiniz. Django-kereviz kereviz kurmak ve sorunsuz boyunca uğultu gerekir. Sonra bizim önbelleğe alınmış alanda ekleyeceğiz, modeli mixin devralan ve uygun bizim yöntemini yeniden adlandırmak:
django_cached_field ithalat CachedIntegerField, ModelWithCachedFields gelen
sınıf Lamppost (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = true)
& Nbsp; def calculate_slow_full_name (öz):
& Nbsp; uyku (30)
& Nbsp; dönüş '% s% s% s' (% self.weight, self.first_name, self.country)
(Evet, calculate_ sadece bir kongre. Ben açıkça ... raylar hayalet vazgeçmiş değil edilir)
Sonraki, güney kullanarak yeni önbelleğe alan eklemek için db şema göç, veya kendi rulo. Iki alan muhtemelen doğru varsaymak, bu tabloda, tipi metin cached_slow_full_name ilave ve tipi boolean slow_full_name_recalculation_needed unutmayın.
Zaten bu tür iyi. lamppost.slow_full_name 30 saniyede verilen bir kayıt için çağrılan ilk zaman alabilir, ama o andan itibaren, bu hemen hemen anında olacak. Tabii ki, bu noktada, o ilk aramadan sonra asla değişmeyecek.
Bulmacanın geri kalan önemli bir parçası bizim önbelleği geçersiz olduğunu. Thoses oluşturan alanlar muhtemelen (bu değerler ilgili güncellenir eğer fark hakkında daha zeki olabilir) bazı views.py değiştirildi:
render_to ("lamppost / edit.html")
def düzenlemek (istek, lamppost_id):
& Nbsp; lamppost = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; eğer request.method == 'POST':
& Nbsp; bir şekilde = LamppostForm (request.POST)
& Nbsp;) (form.is_valid eğer:
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; else:
& Nbsp; bir şekilde = LamppostForm ()
& Nbsp; return {'formu': Form, 'laf': lamppost}
Bu geliştirici olarak en zor kısmı olduğunu! Önbelleğe alma değeri değiştirilebilir her yerde avlamak ve bu flag_slow_full_name_as_stale yöntemi çağırmadan gerektirir. Ülke rastgele yeni bir değer cron'o'clock her sabah atanır? Bu bayrak iyi cron'o'one tarafından bayat vardı. Eğer ilgili tüm güvercinlerin toplamına dayalı ağırlığı hesaplamak musunuz? Güvercinler iniş içine asın. Ve kalkış. Ve tek bir güvercin ağırlığını değiştirir her şeyi. Abraham Lincoln dediği gibi, "sadece iki sert programlama sorunları vardır:. Adlandırma, önbellek iptal ve off-by-bir hata"
Kurulum
Sen kendin için bir şeyler kolay yapabilirsiniz:
Django-önbelleğe-alan yüklemeniz pip
Ya da, bir manuel kurulum için, size repo klonlamak ve python ve setup.py kullanarak yükleyebilirsiniz:
git clone git: //github.com/aquameta/django-cached-field.git
cd Django-önbelleğe alan /
piton setup.py install
Django 1.3.1, 2.3.1 kereviz, django-kereviz 2.3.3 ile test edilmiştir.
Yapılandırma
İki ayar değişiklikleri hemen hemen işe şeyler için gerekli olan: bu, emin kereviz kendi görevleri dosyasını görür hale kayıtlı uygulama emin olun:
INSTALLED_APPS + = ['django_cached_field']
CELERY_IMPORTS + = ['django_cached_field.tasks']
Bir değişiklik isteğe bağlıdır: bayat (varsayılan) olarak işaretlendi veya nitelik erişilen sonraki zaman bırakılacaktır zaman yeniden hesaplama gerçekleşmesi gerektiğini belirtir. Eğer önbelleğe alınmış değerleri geçersiz olduğunu umurumda değil nerede bu test ortamları için yararlıdır. Bu durumda, size kereviz gerek olmazdı unutmayın.
CACHED_FIELD_EAGER_RECALCULATION = true # veya test ortamları için Yanlış
Bu nedenle bireysel istisnalar yerine flag_FIELD_as_stale çağrısına and_recalculate argüman ileterek ele alınmalıdır küresel bir seçenektir.
Uyarılar
- Yarış koşul kereviz işi çağrılacak gereken daha tamamlanması daha uzun sürer db işlemde bir alan olarak bayat bayrak eğer.
- Tüm ORM yöntemleri (örneğin order_by, filtre) cached_FIELD kullanmanız gerekir.
- Recalculate_FIELD değerini ayarlamak için (= cached_FIELD .update kullanır.
- Flag_FIELD_as_stale yanı sıra, .update kullanır

Gereksinimler :

  • Python
  • .
  • Django

Yorumlar django-cached-field

Yorum Bulunamadı
Yorum eklemek
Görüntülerde açın!