SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Globalcode – Open4education 
Trilha – Python 
Jonathan Simon Prates 
Analista de Desenvolvimento - Terra Networks 
@thumbox
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 Sistemas de Informação 
(UNIRITTER) 
Mestrando em Computação Aplicada 
(UNISINOS)
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.
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.
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!
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 Oracle? 
O Oracle custa 15 vezes MAIS. 
Impossível colocar um valor default em 
um campo.
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, 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.
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 operacional. 
Reduzir custos.
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 C# 
Que tal usar Java então? 
O pessoal conhece C#, não Python...
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 garantir a saída dos dados sejam 
iguais? 
Updates, ambiente limpo e deploy. 
Como fazer?
Globalcode – Open4education 
Como sincronizar as 
bases? 
Feeds 
CDN CMS 
TTV API 
Buscador 
Encoding 
TTV 
Desktop 
TTV Mobile 
SmartTVs 
Parceiros
Globalcode – Open4education 
Como sincronizar 
as bases? 
Serviço de mensageria 
Protocolo AMQP 
Open Source 
Puka, Pika, 
PyAMQPlib, kombu 
CMS 
Worker 
Mongo 
Worker 
Oracle
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?
Globalcode – Open4education 
Manter ou não manter as 
mesmas entidades? 
Desnormalização dos dados 
Pensado na consulta 
canais 
videos 
videos_x_canais
Globalcode – Open4education 
Manter ou não manter as 
mesmas entidades? 
MongoDB – Drivers para várias linguagens. 
Mongoengine – Object-Document Mapper (ODM) 
Schemaless
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?
Globalcode – Open4education 
Como garantir a saída dos 
dados sejam iguais? 
TerraTV API 
Pedir para os 
clientes mudar suas 
implementações?
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
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
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?
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
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
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.
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âmetros da URL 
Única imagem na 
storage. 
Controle dos 
cabeçalhos HTTPs.
Globalcode – Open4education 
Conclusão
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
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.
Globalcode – Open4education 
Obrigado! 
jonathan.simonprates@gmail.com 
@thumbox 
br.linkedin.com/in/jonathanprates/

Contenu connexe

Tendances

Service virtualization floripa
Service virtualization floripaService virtualization floripa
Service virtualization floripaErnesto Barbosa
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Javatdc-globalcode
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Marcos Paulo
 
Docker como super comando
Docker como super comandoDocker como super comando
Docker como super comandoRafael Gomes
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooEder Magalhães
 
Como ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhorMarcos Paulo
 
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Python
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em PythonTDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Python
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Pythontdc-globalcode
 
Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaFernando Boaglio
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispors4nx
 
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.tdc-globalcode
 
Conheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareConheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareLetticia Nicoli
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
1o projeto Spider Project SCPM
1o projeto Spider Project SCPM1o projeto Spider Project SCPM
1o projeto Spider Project SCPMPeter Mello
 
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Stefan Teixeira
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014Leo Lorieri
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 

Tendances (20)

Service virtualization floripa
Service virtualization floripaService virtualization floripa
Service virtualization floripa
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Java
 
Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016Como contribuir-com-open-source-php conference-2016
Como contribuir-com-open-source-php conference-2016
 
Hack Thursday - NodeJS
Hack Thursday - NodeJSHack Thursday - NodeJS
Hack Thursday - NodeJS
 
Docker como super comando
Docker como super comandoDocker como super comando
Docker como super comando
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Como ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhor
 
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Python
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em PythonTDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Python
TDC2016SP - Desenvolvendo uma linguagem maker inclusiva em Python
 
Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do Java
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispor
 
Apresentação QtConBr
Apresentação QtConBrApresentação QtConBr
Apresentação QtConBr
 
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
 
Conheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live ShareConheça Visual Studio IntelliCode e Visual Studio Live Share
Conheça Visual Studio IntelliCode e Visual Studio Live Share
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
1o projeto Spider Project SCPM
1o projeto Spider Project SCPM1o projeto Spider Project SCPM
1o projeto Spider Project SCPM
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
 
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014
 
Jenkins
JenkinsJenkins
Jenkins
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 

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

TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APIEdlaine Zamora
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
Controlando a versão de seu banco de dados com Migrations
Controlando a versão de seu banco de dados com MigrationsControlando a versão de seu banco de dados com Migrations
Controlando a versão de seu banco de dados com MigrationsAndre Carlucci
 
Cross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumCross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumMaximiliano Alves
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterEdlaine Zamora
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerWellington Silva
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começouJose Wilker
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...tdc-globalcode
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouJose Wilker
 
Dividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETDividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETtdc-globalcode
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015Adriano Schmidt
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Paulo Cesar Ortins Brito
 
Implementando uma Device Farm Android
Implementando uma Device Farm AndroidImplementando uma Device Farm Android
Implementando uma Device Farm AndroidThialison Souza
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 

Similaire à Migração de Banco de Dados - Oracle para MongoDB - TDC2014 (20)

TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Controlando a versão de seu banco de dados com Migrations
Controlando a versão de seu banco de dados com MigrationsControlando a versão de seu banco de dados com Migrations
Controlando a versão de seu banco de dados com Migrations
 
Cross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appiumCross testing mobile com ruby, cucumber e appium
Cross testing mobile com ruby, cucumber e appium
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começou
 
IC-Testes Invasao
IC-Testes InvasaoIC-Testes Invasao
IC-Testes Invasao
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começou
 
Dividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETDividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NET
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#
 
Implementando uma Device Farm Android
Implementando uma Device Farm AndroidImplementando uma Device Farm Android
Implementando uma Device Farm Android
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 

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

  • 1. Globalcode – Open4education Trilha – Python Jonathan Simon Prates Analista de Desenvolvimento - Terra Networks @thumbox
  • 2. Globalcode – Open4education Migração de database Migrando de C# e Oracle para Python e MongoDB
  • 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. 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. 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. 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. Globalcode – Open4education A motivação ... Baixa Performance Tabela compilada HEIN?
  • 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. Globalcode – Open4education Então o Oracle é ruim?
  • 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. Globalcode – Open4education Se vamos mudar ... - rollbacks - madrugadas - testes em produção
  • 12. Globalcode – Open4education Muda tudo então!! Estávamos no caminho certo? Sugestão para mudarmos. Licenças de sistema operacional. Reduzir custos.
  • 13. Globalcode – Open4education Mas por que Python?
  • 14. Globalcode – Open4education Mas por que Python? Testes Performance Estável Python C# PHP Ruby
  • 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. Globalcode – Open4education “PROGRAMAR A PLATAFORMA FOI MAIS FÁCIL QUE CONVENCER ALGUMAS PESSOAS...”
  • 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. Globalcode – Open4education Como sincronizar as bases? Feeds CDN CMS TTV API Buscador Encoding TTV Desktop TTV Mobile SmartTVs Parceiros
  • 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. 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. Globalcode – Open4education Manter ou não manter as mesmas entidades? Desnormalização dos dados Pensado na consulta canais videos videos_x_canais
  • 24. Globalcode – Open4education Manter ou não manter as mesmas entidades? MongoDB – Drivers para várias linguagens. Mongoengine – Object-Document Mapper (ODM) Schemaless
  • 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. Globalcode – Open4education Como garantir a saída dos dados sejam iguais? TerraTV API Pedir para os clientes mudar suas implementações?
  • 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. 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. 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. 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. 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. 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. Globalcode – Open4education Tratamento de imagens
  • 34. Globalcode – Open4education Tratamento de imagens
  • 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.
  • 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. 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. Globalcode – Open4education Obrigado! jonathan.simonprates@gmail.com @thumbox br.linkedin.com/in/jonathanprates/