campo django-cache

Campos em cache para Django
Baixe Agora

campo django-cache Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • BSD License
  • Preço:
  • FREE
  • Nome do editor:
  • Martin Chase
  • Site do editor:
  • http://github.com/outofculture

campo django-cache Tag


campo django-cache Descrição

Django-Cached-Field é um aplicativo Django que fornece campos de cache de aipo, em cache em Django ORM para Django Caro para Calcular Django ORM e Aipo, mantenha os atributos caros para calcular atualizados. Examinando Método em um dos seus modelos: Classe Lamppost (Models.Model): @PROPERTY DEF SLOW_FULL_NAME (auto): Dormir (30) Retorna 'o% s% s de% s'% (self.Pesouro, self.first_name, auto. país) ugh; muito devagar. Vamos cache isso. Nós vamos querer algumas ferramentas. Aipo com django-aipo precisará ser configurado e cantarolando bem. Em seguida, vamos adicionar em nosso campo em cache, herdará do modelo apropriadamente: de Django_Cached_field Import CachedInderfield, ModelWithCachedFieldClass Lamppost (Modelos.Model, ModelWithCachedFields): Slow_full_name = CachedTextField (null = true) def calcular_slow_full_: Dormir (30) retornar 'o% s% s de% s% (self.weight, self.first_name, self.country) (yeah, calcular_ é apenas uma convenção. Eu claramente não desisti do fantasma dos trilhos .. .) Em seguida, migre seu esquema DB para incluir o novo campo em cache usando o sul ou role seu próprio. Observe que dois campos serão adicionados a esta tabela, cached_slow_full_name do tipo texto e slow_full_name_recalculation_needed do tipo booleano, provavelmente inadimplente para True.Already que é meio melhor. Lamppost.slow_full_name pode levar 30 segundos na primeira vez que é chamado para um determinado registro, mas a partir de então, ele será quase instantâneo. Claro, neste momento, nunca mudará depois que a primeira chamada. O pedaço importante restante do quebra-cabeça é invalidar nosso cache. Thoses Os campos constituintes são provavelmente alterados em algumas visualizações.py (isso pode ser mais esperto sobre perceber se os valores relevantes forem atualizados): @ render_to ("Lamppost / Edit.html") Def Edit (Request, Lamppost_ID): Lamppost = Lamppost. objetos.Get (pk = lamppost_id) se solicitar.method == 'post': form = lamppostform (request.post) se form.is_valid (): form.Save () form.instance.flag_slow_full_name_as_stale () else: form = lamppostform () return {'Form': Form, 'Lamppost': Lamppost} Esta é a parte mais difícil como o desenvolvedor! O cache requer que você caça cada lugar que o valor pode ser alterado e chamando esse método flag_slow_full_name_as_stale. O país atribuiu um novo valor aleatório todas as manhãs no Cron'O'clock? Esse sinalizador melhor seria obsoleto por Cron'O'one. Você calcula o peso baseado na soma de todos os pombos associados? Hook no pouso dos pombos. E decolagem. E tudo que muda o peso de um pombo individual. Como disse Abraham Lincoln, "existem apenas dois problemas difíceis na programação: nomeação, invalidação de cache e erros off-by-one." Instalação Você pode tornar as coisas fáceis em si mesmo: PIP Instalar Django-Cached-Fieldor, para uma instalação manual, você Pode clonar o repo e instalá-lo usando python e setup.py, clone git: //github.com/aquameta/django-cached-field.gitcd Django-Cached-Field / Python Setup.py Installested com Django 1.3.1, Aipo 2.3.1, Django-Aipo 2.3.3.ConfigurationTwo As alterações de configurações são praticamente necessárias para as coisas funcionarem: verifique se é um aplicativo registrado, certifique-se de que aipo vê seu arquivo de tarefas: instalado_apps + = celery_imports + = Uma alteração é opcional: se a recálculo deve acontecer quando marcada como obsoleta (padrão) ou seja deixada para a próxima vez que o atributo for acessado. Isso é útil para ambientes de teste em que você não se importa se os valores em cache são inválidos. Observe que nesta situação, você não precisaria de aula.cached_field_eager_recalculation = True # ou False para ambientes de testeThis é uma opção global, então as exceções individuais devem ser tratadas, passando o argumento and_recalculate para a chamada flag_field_as_stale, se você Bandeira de um campo como obsoleto em uma transação DB que demora mais para completar do que o trabalho de aipo leva para ser chamado.- Todos os métodos ORM (por exemplo, ordem_by, filtro) precisam usar cached_field.- recalcular_field usa .update (cached_field = para definir o valor .- flag_field_as_stale usa .update, como homepage de também.


campo django-cache Software Relacionado