django-cached-field

Софтуер снимки:
django-cached-field
Софтуер детайли:
Версия: 1.2.2
Дата на качване: 14 Apr 15
Розробник: Martin Chase
Разрешително: Безплатно
Популярност: 2

Rating: 1.0/5 (Total Votes: 1)

Джанго кеширана-област е Django приложение, което осигурява Целина-отложено, кеширани полета на Django ORM за скъпо-да-Изчисли данни
Използването Django ORM и целина, запази скъпо-да-Изчисли атрибути до актуална.
<Силен> Пример
Кажете имате бавен метод за някоя от вашите модели:
клас стълб на фенер (models.Model):
& Nbsp;property
& Nbsp; Def slow_full_name (самостоятелно):
& Nbsp; сън (30)
& Nbsp; връщане "The% S% S на% S '% (self.weight, self.first_name, self.country)
Уф; твърде бавно. Нека да кешира това. Ние ще искате още няколко инструмента. Целина с Джанго-целина ще трябва да бъде създаден и работеше безпроблемно. След това ние ще добавим в нашата кеширана поле, наследи от модела Mixin и преименуване нашия метод подходящ начин:
от django_cached_field внос CachedIntegerField, ModelWithCachedFields
клас стълб на фенер (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (нула = True)
& Nbsp; Def calculate_slow_full_name (самостоятелно):
& Nbsp; сън (30)
& Nbsp; връщане "The% S% S на% S '% (self.weight, self.first_name, self.country)
(Да, calculate_ е просто конвенция. I очевидно не издъхнал релси ...)
На следващо място, преход от db схема да включва новата кеширана областта с помощта на юг, или изграждане свой собствен. Имайте предвид, че двете области ще бъдат добавени към тази таблица, cached_slow_full_name от типа на текста и slow_full_name_recalculation_needed от тип Boolean, вероятно неизправния да е вярно.
Вече това е доста по-добре. lamppost.slow_full_name може да отнеме 30 секунди първи път тя се нарича за даден запис, но от този момент нататък, той ще бъде близо при мигновено. Разбира се, в този момент, тя никога няма да се промени след тази първа покана.
Останалата важна част от пъзела е да обезсили нашия кеш. Thoses съставни полета са вероятно променени по някакъв views.py (това би могло да бъде по-умен за да забележи, ако съответните стойности се актуализират):
render_to ("улична лампа / edit.html")
Def редактиране (молба, lamppost_id):
& Nbsp; стълб = Lamppost.objects.get (PK = lamppost_id)
& Nbsp; ако request.METHOD == "POST":
& Nbsp; форма = LamppostForm (request.POST)
& Nbsp; ако form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; друго:
& Nbsp; форма = LamppostForm ()
& Nbsp; връщане {"форма": форма, "стълб": стълб}
Това е най-трудната част, както разработчика! Кеширане изисква от вас преследва всяко място на стойност може да се променя и да се обадите, че flag_slow_full_name_as_stale метод. Дали държавата възлага случаен нова стойност всяка сутрин в cron'o'clock? Това знаме най-добре е да е остаряла от cron'o'one. Да се ​​изчисли теглото на база на сумата на всички свързани гълъби? Закачете в гълъби кацането. И излитане. И всичко, което се променя теглото индивидуална гълъб. Както каза Ейбрахам Линкълн, "Има само две тежки проблеми в програмирането:. Именуване, кеш обезсилване и на разстояние по един грешки"
<Силен> Монтаж
Можете да направим нещата лесни за себе си:
PIP инсталирате Джанго кеширана-област
Или, за ръчна инсталация, можете да клонирате репо и да го инсталирате с помощта на Python и setup.py:
Git клонинг Git: //github.com/aquameta/django-cached-field.git
CD Джанго кеширана-област /
питон setup.py инсталиране
Изпробван с Django 1.3.1, 2.3.1 целина, Джанго-целина 2.3.3.
<Силен> Configuration
Две настройки промени са доста много, необходими за нещата да работят: уверете се, че е регистриран приложение, уверете се, целина вижда своята файл задачи:
INSTALLED_APPS + = ['django_cached_field ",]
CELERY_IMPORTS + = ['django_cached_field.tasks ",]
Една промяна е по избор: дали преизчисляване трябва да се случи, когато маркирана като остаряла (по подразбиране) или да се остави на следващото атрибута е достъпен. Това е полезно за тестване на среда, където не ви е грижа, че вашите кеширани стойности са невалидни. Имайте предвид, че в тази ситуация, не би трябвало целина.
CACHED_FIELD_EAGER_RECALCULATION = True # или False за тестване среда
Това е глобална опция, така че отделни изключения трябва вместо това да се обработва чрез преминаване на and_recalculate аргумент към flag_FIELD_as_stale повикването.
<Силен> Уговорки
- Състояние Race ако сигнализирайте поле, както е остаряла в сделка db, че отнема повече време, отколкото на работата целина необходимо да се нарича.
- Всички методи ORM (напр order_by, филтър) трябва да използват cached_FIELD.
- Recalculate_FIELD използва .update (cached_FIELD = да настроите стойността.
- Flag_FIELD_as_stale използва .update, както

<силни> Изисквания :

  • Python
  • .
  • Django

Коментари към django-cached-field

Коментари не е намерена
добавите коментар
Включете на изображения!