If you can't read please download the document
Upload
ricardo-banffy
View
1.226
Download
0
Embed Size (px)
Citation preview
Django para infogrficos
Do que precisvamos
Precisvamos de um back-end
Que pudesee gerar arquivos XML ou JSON
Que pudessem ser editados em tempo-real (ou quase isso)
Com uma interface jornalista-friendly
E que pudesse gerar diferentes formatos a partir dos dados que foram colocados l
Em resumo...
Um CRUD bem feito
E um BD que cospe uns JSONS e, se no tiver outro jeito, um XML
CRUD bem-feito
Compatvel com jornalistas
Gerando JSON
[ { "campeao": 227, "vice": 12, "vice_nome": "Argentina", "ano": 1930, "campeao_nome": "Uruguai", "terceiro_nome": "Estados Unidos", "quarto_nome": "Iugosl\u00e1via", "anfitriao": 227, "anfitriao_nome": "Uruguai", "quarto": 240, "campanhas": [ { "partidas_disputadas": 5, "saldo_de_gols": 8, "disputa_de_penaltis": 0, "gols_feitos": 16, "numero_de_pontos_ganhos": 8, "campanha": 196, "selecao_nome": "Argentina", "cartoes_vermelhos": 0, "selecao": 12, "quartas_de_final": 0, "semifinal": 1, "cartoes_amarelos": 0, "gols_sofridos": 8, "derrotas_nos_penaltis": 0, "numero_de_empates": 0, "numero_de_vitorias": 4, "final": 1, "vitorias_nos_penaltis": 0, "numero_de_derrotas": 1 }, { "partidas_disputadas": 2, "saldo_de_gols": -4, "disputa_de_penaltis": 0, "gols_feitos": 0, "numero_de_pontos_ganhos": 0, "campanha": 205, "selecao_nome": "B\u00e9lgica", "cartoes_vermelhos": 0, "selecao": 21, "quartas_de_final": 0, "semifinal": 0, "cartoes_amarelos": 0, "gols_sofridos": 4, "derrotas_nos_penaltis": 0, "numero_de_empates": 0, "numero_de_vitorias": 0, "final": 0, "vitorias_nos_penaltis": 0, "numero_de_derrotas": 2 }, { "partidas_disputadas": 2, "saldo_de_gols": -8, "disputa_de_penaltis": 0, "gols_feitos": 0, "numero_de_pontos_ganhos": 0, "campanha": 206, "selecao_nome": "Bol\u00edvia", "cartoes_vermelhos": 0, "selecao": 29, "quartas_de_final": 0, "semifinal": 0, "cartoes_amarelos": 0, "gols_sofridos": 8, "derrotas_nos_penaltis": 0, "numero_de_empates": 0, "numero_de_vitorias": 0, "final": 0, "vitorias_nos_penaltis": 0, "numero_de_derrotas": 2 },
Do que no precisvamos?
Gerar os grficos propriamente ditosComponentes Flash ou JavaScript fariam essa parte
Ainda que a arquitetura permita fazermos isso, se quisermos muito
Servir pginas inteiras em torno dos componentes com dados
Designers fazem UI melhor do que eu
Por que Django?
O admin
O ORM
O mdulo simplejson
O mapeamento de URLs
O framework de testes
O Admin
Jeito declarativo de definir interfaces de manuteno
Autenticao/autorizao embutidas (j fiz um e j chega)
o nosso CRUD
O ORM
Fcil de montar queries
Deixo que ele otimize tudo
No escrevo SQL
Eventualmente, posso mudar de banco para um NoSQL se a performance melhorar alguma coisa (o pessoal do django-nonrel tem feito bom progresso)
Se precisar muito, posso escrever SQL tunado moMas nunca precisei
O mdulo simplejson
simplejson.JSONEncoder(indent = 4).encode({'rotulo': 'meu
dado',
'valor': 123})
Simples assim
No XML (e isso bom)
O mapeamento de URLs
Permite criar a iluso de arquivos estticos
O cliente no precisa saber o que est acontecendo
As URLs so bonitas (memorizveis)A linha
(r'^(?P[\w\-]*)_datas.json$', views.indicador_datas),Cria URLs como
http://servidor/aplicacao/pib_datas.jsonE ficam amigveis para caches
Como ficou
2 servidores Apache com Django
1 servidor MySQL
Quantos caches precisarmos (temos 2)
atrs de um balanceador
Back-end atende at 400 requests por segundo (em cada servidor), mas nunca chega nem perto disso
BD se sente solitrio, sem ter o que fazer
Caches atendem quase todos os requests
Tipos de dados
Cada tipo de dado pede uma aplicao diferente (no nosso modelo)
H aplicaes compartilhadasIsso viola um pouco as recomendaes oficiais
from backend.common.models import Pais, UF
Mas resolve nosso problema de dados partilhados
e compartimenta o acesso aos dados
Como podemos crescer?
Mais caches por backend
Mais backends
Replicao no BD
BDs no relacionais (?)
No estamos nem perto dos limites da infra-estrutura
Alternativas
Elastic Search tem sido pesquisadoSimples de usar
Pode ser persistido
mas no pode cruzar dados e fazer queries complicadas no servidor
Dvidas?
Click to edit the title text format