Globalcode – Open4education 
Trilha – Python 
Jonathan Simon Prates 
Analista de Desenvolvimento - Terra Networks 
@thumbo...
Globalcode – Open4education 
Migração de database 
Migrando de C# e Oracle para Python e MongoDB
Globalcode – Open4education 
Quem sou eu? 
Analista de desenvolvimento da 
plataforma de vídeos do Terra. 
Formado em Sist...
Globalcode – Open4education 
Plataforma de vídeos: 
Plataforma de vídeos 
ao vivo e VOD. 
América Latina, EUA 
e Espanha. ...
Globalcode – Open4education 
Como evoluímos: 
A plataforma cresceu muito desde 
2004. 
Novas funcionalidades (2009 mobile,...
Globalcode – Open4education 
A motivação ... 
6 WebServices 
2 APIs 
+40 Tabelas 
+10 MViews entre 
BR e USA 
Deploy em 
p...
Globalcode – Open4education 
A motivação ... 
Baixa 
Performance 
Tabela 
compilada 
HEIN?
Globalcode – Open4education 
Oracle VS MongoDB 
Tabela “compilada” = Coleção não 
relacional. 
Precisamos realmente do Ora...
Globalcode – Open4education 
Então o Oracle é ruim?
Globalcode – Open4education 
Afirmações clássicas 
Preciso de performance, então uso 
Oracle. 
Não é orientado a objetos, ...
Globalcode – Open4education 
Se vamos mudar ... 
- rollbacks 
- madrugadas 
- testes em produção
Globalcode – Open4education 
Muda tudo então!! 
Estávamos no caminho certo? 
Sugestão para mudarmos. 
Licenças de sistema ...
Globalcode – Open4education 
Mas por que Python?
Globalcode – Open4education 
Mas por que Python? 
Testes Performance Estável 
Python 
C# 
PHP 
Ruby
Globalcode – Open4education 
SIMPLICIDADE
Globalcode – Open4education 
Pika 
localshop
Globalcode – Open4education 
O que ouvimos: 
Coisa de Startup 
Impossível sem parar a plataforma 
Python não é melhor que ...
Globalcode – Open4education 
“PROGRAMAR A PLATAFORMA FOI 
MAIS FÁCIL QUE CONVENCER 
ALGUMAS PESSOAS...”
Globalcode – Open4education 
Desafios: 
Como sincronizar as bases? 
Manter ou não manter as mesmas 
entidades? 
Como garan...
Globalcode – Open4education 
Como sincronizar as 
bases? 
Feeds 
CDN CMS 
TTV API 
Buscador 
Encoding 
TTV 
Desktop 
TTV M...
Globalcode – Open4education 
Como sincronizar 
as bases? 
Serviço de mensageria 
Protocolo AMQP 
Open Source 
Puka, Pika, ...
Globalcode – Open4education 
Desafios: 
Como sincronizar as bases? 
Manter ou não manter as mesmas 
entidades? 
Como garan...
Globalcode – Open4education 
Manter ou não manter as 
mesmas entidades? 
Desnormalização dos dados 
Pensado na consulta 
c...
Globalcode – Open4education 
Manter ou não manter as 
mesmas entidades? 
MongoDB – Drivers para várias linguagens. 
Mongoe...
Globalcode – Open4education 
Desafios: 
Como sincronizar as bases? 
Manter ou não manter as mesmas 
entidades? 
Como garan...
Globalcode – Open4education 
Como garantir a saída dos 
dados sejam iguais? 
TerraTV API 
Pedir para os 
clientes mudar su...
Globalcode – Open4education 
Como garantir a saída dos 
dados sejam iguais? 
TerraTV API 
(aspx/IIS) 
Nova API 
(python/ng...
Globalcode – Open4education 
Como garantir a saída dos 
dados sejam iguais? 
Flask 
JSON ou XML 
REST 
Utilização de templ...
Globalcode – Open4education 
Desafios: 
Como sincronizar as bases? 
Manter ou não manter as mesmas 
entidades? 
Como garan...
Globalcode – Open4education 
Updates, ambiente limpo e 
deploy. Como fazer? 
“The Python Package 
Index is a repository of...
Globalcode – Open4education 
Updates, ambiente limpo e 
deploy. Como fazer? 
Instalações simples 
Ambientes isolados 
Fáci...
Globalcode – Open4education 
Updates, ambiente limpo e 
deploy. Como fazer? 
Integração Contínua 
com Jenkins 
Geração de ...
Globalcode – Open4education 
Tratamento de 
imagens
Globalcode – Open4education 
Tratamento de imagens
Globalcode – Open4education 
Tratamento de imagens 
PIL 
Chamada através do 
ID do vídeo 
Resize em tempo real 
via parâme...
Globalcode – Open4education 
Conclusão
Globalcode – Open4education 
Preciso mudar? 
Só consigo testar em produção 
Na primeira nunca compila, depois vai 
Não tem...
Globalcode – Open4education 
Conclusão 
Vários sistemas simples e pequenos geram 
soluções complexas. 
Quanto maior o códi...
Globalcode – Open4education 
Obrigado! 
jonathan.simonprates@gmail.com 
@thumbox 
br.linkedin.com/in/jonathanprates/
Próximos SlideShares
Carregando em…5
×

Migração de Banco de Dados - Oracle para MongoDB - TDC2014

569 visualizações

Publicada em

Migração de Banco de Dados - Oracle para MongoDB - TDC2014 - Trilha Python.

Como o TerraTV migrou sua plataforma de C# para Python e Oracle para MongoDB. Mostramos algumas abordagens e ferramentas utilizadas para essa migração.

Publicada em: Internet
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
569
No SlideShare
0
A partir de incorporações
0
Número de incorporações
14
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Migração de Banco de Dados - Oracle para MongoDB - TDC2014

  1. 1. Globalcode – Open4education Trilha – Python Jonathan Simon Prates Analista de Desenvolvimento - Terra Networks @thumbox
  2. 2. Globalcode – Open4education Migração de database Migrando de C# e Oracle para Python e MongoDB
  3. 3. Globalcode – Open4education Quem sou eu? Analista de desenvolvimento da plataforma de vídeos do Terra. Formado em Sistemas de Informação (UNIRITTER) Mestrando em Computação Aplicada (UNISINOS)
  4. 4. Globalcode – Open4education Plataforma de vídeos: Plataforma de vídeos ao vivo e VOD. América Latina, EUA e Espanha. Olimpíadas, Shows Ao Vivo, Liga Europa, Programas Ao Vivo durante a tarde. Desktop, Mobile, Tablets, Smart TVs.
  5. 5. Globalcode – Open4education Como evoluímos: A plataforma cresceu muito desde 2004. Novas funcionalidades (2009 mobile, 2010 smarttvs, 2012 lives, etc). Um novo webservice a cada anos. Base de dados Oracle em Miami e outra em Porto Alegre.
  6. 6. Globalcode – Open4education A motivação ... 6 WebServices 2 APIs +40 Tabelas +10 MViews entre BR e USA Deploy em produção? Zipa e manda na zuera!
  7. 7. Globalcode – Open4education A motivação ... Baixa Performance Tabela compilada HEIN?
  8. 8. Globalcode – Open4education Oracle VS MongoDB Tabela “compilada” = Coleção não relacional. Precisamos realmente do Oracle? O Oracle custa 15 vezes MAIS. Impossível colocar um valor default em um campo.
  9. 9. Globalcode – Open4education Então o Oracle é ruim?
  10. 10. Globalcode – Open4education Afirmações clássicas Preciso de performance, então uso Oracle. Não é orientado a objetos, então está errado. Vou ter que escrever o backend do meu site em C/C++ para ficar mais rápido. Meu sistema não precisa de testes.
  11. 11. Globalcode – Open4education Se vamos mudar ... - rollbacks - madrugadas - testes em produção
  12. 12. Globalcode – Open4education Muda tudo então!! Estávamos no caminho certo? Sugestão para mudarmos. Licenças de sistema operacional. Reduzir custos.
  13. 13. Globalcode – Open4education Mas por que Python?
  14. 14. Globalcode – Open4education Mas por que Python? Testes Performance Estável Python C# PHP Ruby
  15. 15. Globalcode – Open4education SIMPLICIDADE
  16. 16. Globalcode – Open4education Pika localshop
  17. 17. Globalcode – Open4education O que ouvimos: Coisa de Startup Impossível sem parar a plataforma Python não é melhor que C# Que tal usar Java então? O pessoal conhece C#, não Python...
  18. 18. Globalcode – Open4education “PROGRAMAR A PLATAFORMA FOI MAIS FÁCIL QUE CONVENCER ALGUMAS PESSOAS...”
  19. 19. Globalcode – Open4education Desafios: Como sincronizar as bases? Manter ou não manter as mesmas entidades? Como garantir a saída dos dados sejam iguais? Updates, ambiente limpo e deploy. Como fazer?
  20. 20. Globalcode – Open4education Como sincronizar as bases? Feeds CDN CMS TTV API Buscador Encoding TTV Desktop TTV Mobile SmartTVs Parceiros
  21. 21. Globalcode – Open4education Como sincronizar as bases? Serviço de mensageria Protocolo AMQP Open Source Puka, Pika, PyAMQPlib, kombu CMS Worker Mongo Worker Oracle
  22. 22. Globalcode – Open4education Desafios: Como sincronizar as bases? Manter ou não manter as mesmas entidades? Como garantir a saída dos dados sejam iguais? Updates, ambiente limpo e deploy. Como fazer?
  23. 23. Globalcode – Open4education Manter ou não manter as mesmas entidades? Desnormalização dos dados Pensado na consulta canais videos videos_x_canais
  24. 24. Globalcode – Open4education Manter ou não manter as mesmas entidades? MongoDB – Drivers para várias linguagens. Mongoengine – Object-Document Mapper (ODM) Schemaless
  25. 25. Globalcode – Open4education Desafios: Como sincronizar as bases? Manter ou não manter as mesmas entidades? Como garantir a saída dos dados sejam iguais? Updates, ambiente limpo e deploy. Como fazer?
  26. 26. Globalcode – Open4education Como garantir a saída dos dados sejam iguais? TerraTV API Pedir para os clientes mudar suas implementações?
  27. 27. Globalcode – Open4education Como garantir a saída dos dados sejam iguais? TerraTV API (aspx/IIS) Nova API (python/nginx) Nginx rewrite Balanceador: api.terra.com.br IIS
  28. 28. Globalcode – Open4education Como garantir a saída dos dados sejam iguais? Flask JSON ou XML REST Utilização de templates para manter compatibilidade Testes automatizados através dos XSDs gerados a partir do serviço antigo
  29. 29. Globalcode – Open4education Desafios: Como sincronizar as bases? Manter ou não manter as mesmas entidades? Como garantir a saída dos dados sejam iguais? Updates, ambiente limpo e deploy. Como fazer?
  30. 30. Globalcode – Open4education Updates, ambiente limpo e deploy. Como fazer? “The Python Package Index is a repository of software for the Python programming language.” Localshop – “A private pypi server including auto-mirroring of pypi.” $ pip install videoapi localshop
  31. 31. Globalcode – Open4education Updates, ambiente limpo e deploy. Como fazer? Instalações simples Ambientes isolados Fácil update Fácil rollback virtualenv is a tool to create isolated Python environments. Cada aplicação tem seu próprio virtualenv Dependências entre libs de python são tratadas de forma distintas
  32. 32. Globalcode – Open4education Updates, ambiente limpo e deploy. Como fazer? Integração Contínua com Jenkins Geração de pacote de forma automática após push no master branch do GIT.
  33. 33. Globalcode – Open4education Tratamento de imagens
  34. 34. Globalcode – Open4education Tratamento de imagens
  35. 35. Globalcode – Open4education Tratamento de imagens PIL Chamada através do ID do vídeo Resize em tempo real via parâmetros da URL Única imagem na storage. Controle dos cabeçalhos HTTPs.
  36. 36. Globalcode – Open4education Conclusão
  37. 37. Globalcode – Open4education Preciso mudar? Só consigo testar em produção Na primeira nunca compila, depois vai Não tem como testar isso Tenho muitos relacionamentos, por isso meu sistema é lento Só posso instalar na madrugada
  38. 38. Globalcode – Open4education Conclusão Vários sistemas simples e pequenos geram soluções complexas. Quanto maior o código, maior a chance de bugs. Evitar classes grandes, métodos grandes e código duplicado. Usar ferramentas de qualidade como pylint e pep8. Faça o seu código o mais simples possível.
  39. 39. Globalcode – Open4education Obrigado! jonathan.simonprates@gmail.com @thumbox br.linkedin.com/in/jonathanprates/

×