Django para infográficos

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