Explore	
  outras	
  alternativas	
  de	
  persistência	
  

Eder	
  Magalhães	
  
@edermag	
  
Agenda	
  
ü  Um	
  visão	
  sobre	
  banco	
  de	
  dados	
  relacional;	
  
ü  Demanda	
  por	
  um	
  novos	
  modelos	
  de	
  persistência;	
  
ü  Introdução	
  e	
  caracterís@cas	
  do	
  MongoDB;	
  
ü  JavaScript,	
  a	
  linguagem	
  essencial;	
  
ü  O	
  Documento;	
  
ü  CRUD	
  em	
  Mongo	
  vs	
  SQL;	
  
ü  Demos;	
  
Banco	
  de	
  dados	
  relacional	
  
ü  +30	
  anos;	
  
ü  Consolidada	
  no	
  mercado;	
  
ü  Um	
  modelo	
  que	
  atendeu	
  a	
  demanda	
  coorpora@va;	
  
ü  Empresas	
  e	
  muitas	
  tecnologias	
  de	
  sucesso,	
  baseado	
  nesse	
  

modelo	
  de	
  desenvolvimento;	
  
Alguns	
  pontos	
  
ü  Escalabilidade;	
  
ü  Alto	
  custo:	
  equipamento	
  e	
  licenças;	
  
ü  Flexibilidade	
  em	
  relação	
  a	
  mudanças;	
  
NoSQL,	
  outro	
  conceito	
  
ü  Sigla:	
  Not	
  Only	
  SQL	
  
ü  Proposta	
  que	
  difere	
  do	
  modelo	
  relacional;	
  
ü  Não	
  adota	
  a	
  linguagem	
  SQL;	
  
ü  Foco	
  em	
  escabilidade	
  –	
  demanda	
  da	
  web;	
  
ü  Aderente	
  a	
  cloud	
  compu@ng;	
  
O	
  MongoDB	
  
ü  Tecnologia	
  free,	
  open	
  source;	
  
ü  Orientado	
  a	
  Documentos;	
  
ü  Flexível	
  schemaless;	
  
ü  Implementado	
  em	
  C++;	
  
ü  API	
  alto	
  nível	
  em	
  diversas	
  linguagens;	
  
ü  Suporte	
  a	
  dados	
  binários:	
  fotos	
  e	
  vídeos;	
  
ü  Voltado	
  para	
  replicação	
  /	
  dados	
  distribuídos;	
  
Funcionalidade	
  vs	
  performance	
  
JavaScript,	
  papel	
  essencial	
  
ü  A	
  linguagem	
  usada	
  pelo	
  terminal	
  do	
  MongoDB	
  para	
  

manipular	
  os	
  dados;	
  

ü  Presente	
  no	
  desenvolvimento	
  web:	
  
ü  Front-­‐end;	
  
ü  Back-­‐end	
  (server);	
  

ü  É	
  a	
  linguagem	
  “na@va”	
  do	
  MongoDB;	
  
JSON	
  
ü  A	
  manipulação	
  dos	
  dados	
  ocorre	
  via	
  JSON;	
  
ü  Formato	
  simples	
  e	
  popular	
  de	
  manipulação	
  de	
  dados;	
  
ü  Estrutura:	
  
ü  Arrays:	
  [ "maça", "pera", "abacate" ]
ü  Dic@onary:	
  	
  

{ placa: "EEE-0001", renavam: "1231…"}
ü  Tipos	
  de	
  valores:	
  string,	
  number,	
  object,	
  array,	
  true,	
  false	
  e	
  null;	
  

ü  hcp://www.json.org	
  
Shell	
  
ü  Ambiente/interpretador	
  JavaScript;	
  
ü  Simples	
  e	
  alto	
  nível;	
  
ü  Vamos	
  experimentar!	
  
Similaridades	
  
MongoDB	
  

Banco	
  Relacional	
  

Database	
  

Database	
  

Coleção	
  

Tabela	
  

Documento	
  

Registro	
  

Chave	
  primária	
  

Chave	
  primária	
  
MongoDB	
  Schema	
  Design	
  
ü  Applica@on	
  Driven	
  schema;	
  
ü  Rich	
  documents:	
  arrays	
  e	
  objetos	
  aninhados;	
  
ü  Schemaless;	
  
ü  Não	
  se	
  preocupe	
  com	
  normalização;	
  
Modelo	
  versão	
  relacional	
  
Modelo	
  versão	
  MongoDB	
  
{
"placa": "EXZ-0112",
"marca": "Jetta",
"modelo": "2.0 TSI",
"fabricante": "Volkswagen",
"cor": "Branco",
"ano": { "fabricacao": 2011, "modelo": 2012 },
"opcionais": ["airbag", "teto solar", "ar", "abs" ... ],
"proprietarios": [
{ "nome": "Pedro Silva", "cpf": "222" }
],
"restricoes": {
"financeiras": ["Banco Stander"],
"multas": ["Velocidade", "Rodizio"]
}
}
+	
  Detalhes	
  sobre	
  o	
  MongoDB	
  
ü  O	
  MongoDB	
  não	
  trabalha	
  com	
  chaves	
  estrangeiras;	
  
ü  O	
  MongoDB	
  não	
  tem	
  suporte	
  a	
  controle	
  transacional;	
  
ü  Toda	
  operação	
  que	
  manipula	
  dados	
  é	
  atômica;	
  
CRUD	
  -­‐	
  Create	
  
ü  Demonstração	
  de	
  insert;	
  
//MongoDB
db.estudantes.insert(
{ nome: 'Jose da Silva', curso: 'Ciências da Computação',
universidade: 'USCS', matricula: '010' } );
//SQL
insert into estudantes(nome, curso, universidade, matricula)
values('Jose da Silva', 'Ciências da computação', 'USCS',
'010' );
CRUD	
  -­‐	
  Update	
  
ü  Demonstração	
  de	
  update;	
  
//MongoDB
db.estudantes.update( { nome: 'Jose da Silva' },
{ $set: { nome: 'Jose da Silva Souza' } } );

//SQL
update estudantes set nome = 'Jose da Silva Souza'
where nome = 'Jose da Silva';
CRUD	
  -­‐	
  Delete	
  
ü  Demonstração	
  de	
  delete;	
  
//MongoDB
db.estudantes.delete( { matricula: '200' } );

//SQL
delete from estudantes where matricula = '200';
CRUD	
  -­‐	
  Query	
  
ü  Demonstração	
  de	
  consultas;	
  
//MongoDB
db.estudantes.find({ curso: 'Arquitetura' }, { nome: 1 });

//SQL
select nome from estudantes where curso = 'Arquitetura';
CRUD	
  -­‐	
  Aggrega@on	
  
ü  Demonstração	
  de	
  consultas	
  agregadas;	
  
//MongoDB
db.estudantes.aggregate(
{ $group: { _id: '$curso', total: { $sum: 1 } } });

//SQL
select curso, count(id) from estudantes group by curso;
+	
  Consultas	
  
ü  Demonstração	
  de	
  consultas	
  avançadas	
  com	
  grande	
  volume	
  

de	
  dados	
  (base	
  de	
  email);	
  
Drivers	
  
ü  Linguagens	
  c/	
  driver	
  do	
  MongoDB:	
  
ü  Java	
  
ü  Python	
  
ü  C++	
  /	
  C#	
  
ü  Node.js	
  
ü  Erlang	
  
ü  Ruby	
  
ü  Scala	
  
ü  Perl	
  
ü  PHP	
  …	
  
Demo	
  em	
  Java	
  
ü  Projeto	
  exemplo	
  demonstrando	
  como	
  trabalhar	
  com	
  o	
  

MongoDB	
  em	
  Java;	
  

ü  Tecnologias	
  u@lizadas:	
  
ü  MongoDB	
  Driver	
  para	
  Java;	
  
ü  Spark	
  microcontainer;	
  
ü  Freemaker;	
  
ü  Maven;	
  
ü  Bootstrap;	
  
Outras	
  funcionalidades	
  
ü  ReplicaSet;	
  
ü  Sharding;	
  
ü  GridFS;	
  
ü  MapReduce;	
  
Mais	
  opções	
  NoSQL?	
  
ü  Cassandra;	
  
ü  CouchDB;	
  
ü  Redis;	
  
ü  Cloudera;	
  
ü  Veja	
  outros	
  no	
  sie:	
  hcp://nosql-­‐database.org/	
  

	
  
Links	
  
ü  hcp://www.mongodb.org/	
  
ü  hcp://docs.mongodb.org/manual/	
  
ü  hcps://educa@on.mongodb.com/	
  

ü  Os	
  comandos	
  u@lizados	
  nessa	
  palestra	
  foram	
  

disponibilizados	
  junto	
  com	
  o	
  projeto	
  demo,	
  na	
  url:	
  
ü  hcps://github.com/edermag/mongodb-­‐javaweb	
  
Vídeo	
  aulas	
  /	
  projetos	
  exemplo	
  
ü  hcp://www.yaw.com.br/screencast	
  
ü  hcp://www.yaw.com.br/open/projetos/	
  
Obrigado!	
  
ü  eder@yaw.com.br	
  
ü  hcps://twicer.com/edermag	
  
ü  hcp://github.com/edermag	
  
ü  hcp://edermag.blogspot.com.br/	
  
ü  hcps://bitbucket.org/edermag/	
  

MongoDB outras alternativas de persistência

  • 1.
    Explore  outras  alternativas  de  persistência   Eder  Magalhães   @edermag  
  • 2.
    Agenda   ü  Um  visão  sobre  banco  de  dados  relacional;   ü  Demanda  por  um  novos  modelos  de  persistência;   ü  Introdução  e  caracterís@cas  do  MongoDB;   ü  JavaScript,  a  linguagem  essencial;   ü  O  Documento;   ü  CRUD  em  Mongo  vs  SQL;   ü  Demos;  
  • 3.
    Banco  de  dados  relacional   ü  +30  anos;   ü  Consolidada  no  mercado;   ü  Um  modelo  que  atendeu  a  demanda  coorpora@va;   ü  Empresas  e  muitas  tecnologias  de  sucesso,  baseado  nesse   modelo  de  desenvolvimento;  
  • 4.
    Alguns  pontos   ü Escalabilidade;   ü  Alto  custo:  equipamento  e  licenças;   ü  Flexibilidade  em  relação  a  mudanças;  
  • 5.
    NoSQL,  outro  conceito   ü  Sigla:  Not  Only  SQL   ü  Proposta  que  difere  do  modelo  relacional;   ü  Não  adota  a  linguagem  SQL;   ü  Foco  em  escabilidade  –  demanda  da  web;   ü  Aderente  a  cloud  compu@ng;  
  • 6.
    O  MongoDB   ü Tecnologia  free,  open  source;   ü  Orientado  a  Documentos;   ü  Flexível  schemaless;   ü  Implementado  em  C++;   ü  API  alto  nível  em  diversas  linguagens;   ü  Suporte  a  dados  binários:  fotos  e  vídeos;   ü  Voltado  para  replicação  /  dados  distribuídos;  
  • 7.
  • 8.
    JavaScript,  papel  essencial   ü  A  linguagem  usada  pelo  terminal  do  MongoDB  para   manipular  os  dados;   ü  Presente  no  desenvolvimento  web:   ü  Front-­‐end;   ü  Back-­‐end  (server);   ü  É  a  linguagem  “na@va”  do  MongoDB;  
  • 9.
    JSON   ü  A  manipulação  dos  dados  ocorre  via  JSON;   ü  Formato  simples  e  popular  de  manipulação  de  dados;   ü  Estrutura:   ü  Arrays:  [ "maça", "pera", "abacate" ] ü  Dic@onary:     { placa: "EEE-0001", renavam: "1231…"} ü  Tipos  de  valores:  string,  number,  object,  array,  true,  false  e  null;   ü  hcp://www.json.org  
  • 10.
    Shell   ü  Ambiente/interpretador  JavaScript;   ü  Simples  e  alto  nível;   ü  Vamos  experimentar!  
  • 11.
    Similaridades   MongoDB   Banco  Relacional   Database   Database   Coleção   Tabela   Documento   Registro   Chave  primária   Chave  primária  
  • 12.
    MongoDB  Schema  Design   ü  Applica@on  Driven  schema;   ü  Rich  documents:  arrays  e  objetos  aninhados;   ü  Schemaless;   ü  Não  se  preocupe  com  normalização;  
  • 13.
  • 14.
    Modelo  versão  MongoDB   { "placa": "EXZ-0112", "marca": "Jetta", "modelo": "2.0 TSI", "fabricante": "Volkswagen", "cor": "Branco", "ano": { "fabricacao": 2011, "modelo": 2012 }, "opcionais": ["airbag", "teto solar", "ar", "abs" ... ], "proprietarios": [ { "nome": "Pedro Silva", "cpf": "222" } ], "restricoes": { "financeiras": ["Banco Stander"], "multas": ["Velocidade", "Rodizio"] } }
  • 15.
    +  Detalhes  sobre  o  MongoDB   ü  O  MongoDB  não  trabalha  com  chaves  estrangeiras;   ü  O  MongoDB  não  tem  suporte  a  controle  transacional;   ü  Toda  operação  que  manipula  dados  é  atômica;  
  • 16.
    CRUD  -­‐  Create   ü  Demonstração  de  insert;   //MongoDB db.estudantes.insert( { nome: 'Jose da Silva', curso: 'Ciências da Computação', universidade: 'USCS', matricula: '010' } ); //SQL insert into estudantes(nome, curso, universidade, matricula) values('Jose da Silva', 'Ciências da computação', 'USCS', '010' );
  • 17.
    CRUD  -­‐  Update   ü  Demonstração  de  update;   //MongoDB db.estudantes.update( { nome: 'Jose da Silva' }, { $set: { nome: 'Jose da Silva Souza' } } ); //SQL update estudantes set nome = 'Jose da Silva Souza' where nome = 'Jose da Silva';
  • 18.
    CRUD  -­‐  Delete   ü  Demonstração  de  delete;   //MongoDB db.estudantes.delete( { matricula: '200' } ); //SQL delete from estudantes where matricula = '200';
  • 19.
    CRUD  -­‐  Query   ü  Demonstração  de  consultas;   //MongoDB db.estudantes.find({ curso: 'Arquitetura' }, { nome: 1 }); //SQL select nome from estudantes where curso = 'Arquitetura';
  • 20.
    CRUD  -­‐  Aggrega@on   ü  Demonstração  de  consultas  agregadas;   //MongoDB db.estudantes.aggregate( { $group: { _id: '$curso', total: { $sum: 1 } } }); //SQL select curso, count(id) from estudantes group by curso;
  • 21.
    +  Consultas   ü Demonstração  de  consultas  avançadas  com  grande  volume   de  dados  (base  de  email);  
  • 22.
    Drivers   ü  Linguagens  c/  driver  do  MongoDB:   ü  Java   ü  Python   ü  C++  /  C#   ü  Node.js   ü  Erlang   ü  Ruby   ü  Scala   ü  Perl   ü  PHP  …  
  • 23.
    Demo  em  Java   ü  Projeto  exemplo  demonstrando  como  trabalhar  com  o   MongoDB  em  Java;   ü  Tecnologias  u@lizadas:   ü  MongoDB  Driver  para  Java;   ü  Spark  microcontainer;   ü  Freemaker;   ü  Maven;   ü  Bootstrap;  
  • 24.
    Outras  funcionalidades   ü ReplicaSet;   ü  Sharding;   ü  GridFS;   ü  MapReduce;  
  • 25.
    Mais  opções  NoSQL?   ü  Cassandra;   ü  CouchDB;   ü  Redis;   ü  Cloudera;   ü  Veja  outros  no  sie:  hcp://nosql-­‐database.org/    
  • 26.
    Links   ü  hcp://www.mongodb.org/   ü  hcp://docs.mongodb.org/manual/   ü  hcps://educa@on.mongodb.com/   ü  Os  comandos  u@lizados  nessa  palestra  foram   disponibilizados  junto  com  o  projeto  demo,  na  url:   ü  hcps://github.com/edermag/mongodb-­‐javaweb  
  • 27.
    Vídeo  aulas  /  projetos  exemplo   ü  hcp://www.yaw.com.br/screencast   ü  hcp://www.yaw.com.br/open/projetos/  
  • 28.
    Obrigado!   ü  eder@yaw.com.br   ü  hcps://twicer.com/edermag   ü  hcp://github.com/edermag   ü  hcp://edermag.blogspot.com.br/   ü  hcps://bitbucket.org/edermag/