2. Dois problemas em uma Amazon ec2 t2.micro
- CPU Stolen: roubo de processamento
- acontece quando o uso de CPU é maior que o uso de
de CPU contratada.
https://www.google.com.br/?ion=1&espv=2#q=cpu%20stolen%20ec2%20micro
- Memória
3. Use REDIS para guardar suas sessões
e elimine uma consulta no banco de dados.
e também muitas outras.
4. Use .iterators(), .exists() e .count()
O queryset cache é um problema se você não precisa de todos os resultados
mais de uma vez.
# O `iterator()` method garante que apenas uma linha por vez seja retornada,
salvando memória.
for p in Produto.objects.all().iterator():
print(p.name)
if Produto.objects.all().exists(): # não salva todo retorno em memória
print(‘existe’)
print Produto.objects.count() # muiiito melhor que len(Produto.objects.all())
5. Use select_related e prefetch_related
class ModelA(models.Model):
nameA = models.CharField(max_length=255)
class ModelB(models.Model):
modela = ForeignKey(ModelA)
nameB = models.CharField(max_length=255)
class ModelC(models.Model):
mm = ManyToManyField(ModelA)
6. Use select_related e prefetch_related
for b in ModelB.objects.all():
print b.modela.nameA # lento aqui
for b in ModelB.objects.select_related('modela').all(): # Forward FK relationship
print b.modela.nameA # rápido agora (JOINS por trás)
# --------------------------------------------------------------------
for a in ModelA.objects.all():
for b in a.modelb_set.all(): # lento aqui (um hit no banco a cada iteração)
print b.nameB
for in ModelA.objects.prefetch_related('modelb_set').all() # Reverse FK relationship
for b in a.modelb_set.all(): # rápido agora (carregado com um SELECT IN por trás)
print b.nameB
7. Use select_related e prefetch_related
for c in ModelC.objects.all():
for a in c.mm.all(): # lento aqui (um hit no banco a cada iteração)
print a.nameA
for in ModelC.objects.prefetch_related(mm).all() # ManyToMany relationship
for a in c.mm.all(): # rápido agora (carregado com um SELECT IN por trás)
print a.nameA
8. Separe tudo
Use um servidor de banco de dados separado da aplicação (Amzon RDS por ex)
Use um servidor de mídia separado separado da aplicação (Amazon S3 por ex)
Use um servidor de cache separado separado da aplicação (Amazon
ElastiCache)
Use um servidor para buscas internas separado da aplicação (Um Elasticsearch
rodando em outra VM)
10. Use cache sempre
O uso de cache evita processamento pesado na máquina, deixando ela bem
tranquila.
Do próprio django:
- per-view cache
- Template fragment caching
Terceiros: Varnish