SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
MUDE SEU JEITO
DE PENSAR
COM
MONGODB
Autor: Douglas Lira – douglas.lira.web@gmail.com
Antes de falar um pouco da minha experiência com o MongoDB, gostaria de
agradecer a oportunidade disponibilizada pelo Suissa para compartilhar essa informação
no NoSQLBr. Muito obrigado!!
Há meses estou submerso em um projeto que utiliza o MongoDB, foi escolhido
depois de uma longa discussão com a equipe, sua eficiência e agilidade de
processamento, quando bem configurado a coisa fica monstra. Porem me deparei com
um problema que deve afetar todos ao trabalhar com um banco de dados NoSQL a
FORMA DE SE PENSAR E PROJETAR o banco. Como sempre trabalhei com banco de
dados relacionais, projetei o MongoDB de forma idêntica a um banco de dados relacional
e ai começou a minha dor de cabeça. Estava tendo que tirar leite de pedra para alimentar
um monstrinho com muita fome, ou seja, tinha que ter um esforço fora do comum para
alimentar um aplicativo que exigia informações relacionadas e simples ao usuário final.
Por exemplo:
[Usuários] -> Onde são cadastrados todos os usuários.
[Amigos] -> Onde são cadastradas os relacionamentos dos amigos de cada
usuário.
Sendo assim em um banco relacional teríamos isso:
[Usuário] 1 -> N [Amigo]
Foi ai que deu inicio ao caos (rssss). Na hora de resgatar algumas informações
tinha um trabalho imenso e neste caso estava tendo que executar dois processos.
1 – Listar os ID’s que estavam na tabela de Amigos
2 – Verificar os ID’s encontrados no passo 1 e verificar suas informações
Em PHP seria algo assim:
<?php …
$collection = new MongoCollection($db, 'amigo');
$query = array('idUsuario' => new MongoId(123));
$list = $collection->find($query);
foreach ($list as $value) {
$temp[] = new MongoId($value->idAmigo);
}
…
$collection = new MongoCollection($db, 'usuario');
$queryAmigo = array('_id' => array('$in' => $temp));
$listAmigo = $collection->find($queryAmigo);
…
// Executaria dois processos… para algo relativamente simples, agora
// imagine um relacionamento envolvendo mais tabelas…
?>
Solução do problema:
<?php
$conexao = new Mongo(); // Iniciando uma conexão com o MongoDB
$db = $conexao->testandoomongo; // Criando uma base de dados
// Usuários inseridos.
$db->usuarios->insert(array("_id"=>1,"name"=>"User01"));
$db->usuarios->insert(array("_id"=>2,"name"=>"User02"));
$db->usuarios->insert(array("_id"=>3,"name"=>"User03"));
// Criando referencia de um usuario.
$infoUser = $db->usuarios->findOne(array('_id' => 2));
$refUser = $db->usuarios->createDBRef($infoUser);
// Adiciona a referencia
$db->usuarios->update(array('_id'=>1),array('$push'=>array('amigos'=> $refUser)));
// Consulta o usuario 1
$consulta = $db->usuarios->findOne(array("_id"=>1));
foreach ($consulta["amigos"] as $con) {
// pega a referencia do usuario
$ref = $db->usuarios->getDBRef($con);
print_r($ref);
}
?>
Então comecei a perceber que estava na hora de mudar a forma de pensar e de
utilizar o MongoDB. Quando pensar em MongoDB pense como se fosse um grande
objeto. Abaixo listei 3 dicas que não esquecerei jamais:
1 – Não utilize técnicas de banco relacional no MongoDB;
2 – Pense que as tabelas do MongoDB são grandes objetos que a qualquer
momento podem mudar sua forma “física”;
3 – Quando for programar tente ao máximo utilizar o raciocínio lógico, explorando
ao máximo seu objeto evitando o excesso de processamento do MongoDB.
Grande abraço a todos e fica a dica, qualquer coisa manda a dúvida que agente
discute e tentar encontrar a melhor solução. Valeuuu!!
Links: http://nosql.techinsider.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIBruna Pereira
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosRegis Magalhães
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 

Was ist angesagt? (20)

MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTI
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Aula 5 php
Aula 5 phpAula 5 php
Aula 5 php
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 

Ähnlich wie Mude seu jeito de pensar com MongoDB

MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSRomulo Fagundes
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Rafael Ponte
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosDaniel Brandão
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBCZabbix BR
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 

Ähnlich wie Mude seu jeito de pensar com MongoDB (20)

MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
Code authority url amigável usando mod rewrite e php (friendly url and php)
Code authority  url amigável usando mod rewrite e php (friendly url and php)Code authority  url amigável usando mod rewrite e php (friendly url and php)
Code authority url amigável usando mod rewrite e php (friendly url and php)
 
Palestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDOPalestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDO
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Crud
CrudCrud
Crud
 

Mehr von Douglas Lira

AngularJS sem medo
AngularJS sem medoAngularJS sem medo
AngularJS sem medoDouglas Lira
 
Criando um componente de busca com AngularJS
Criando um componente de busca com AngularJSCriando um componente de busca com AngularJS
Criando um componente de busca com AngularJSDouglas Lira
 
Directive com AngularJS - Datepicker
Directive com AngularJS - DatepickerDirective com AngularJS - Datepicker
Directive com AngularJS - DatepickerDouglas Lira
 
Autenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemandAutenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemandDouglas Lira
 
AngularJS com loadOnDemand
AngularJS com loadOnDemandAngularJS com loadOnDemand
AngularJS com loadOnDemandDouglas Lira
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IODouglas Lira
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 

Mehr von Douglas Lira (9)

AngularJS sem medo
AngularJS sem medoAngularJS sem medo
AngularJS sem medo
 
Criando um componente de busca com AngularJS
Criando um componente de busca com AngularJSCriando um componente de busca com AngularJS
Criando um componente de busca com AngularJS
 
Directive com AngularJS - Datepicker
Directive com AngularJS - DatepickerDirective com AngularJS - Datepicker
Directive com AngularJS - Datepicker
 
Autenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemandAutenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemand
 
AngularJS com loadOnDemand
AngularJS com loadOnDemandAngularJS com loadOnDemand
AngularJS com loadOnDemand
 
AngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IOAngularJS com NODE.JS e Socket.IO
AngularJS com NODE.JS e Socket.IO
 
Time sheet
Time sheetTime sheet
Time sheet
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
Plugin zend acl
Plugin zend aclPlugin zend acl
Plugin zend acl
 

Mude seu jeito de pensar com MongoDB

  • 1. MUDE SEU JEITO DE PENSAR COM MONGODB Autor: Douglas Lira – douglas.lira.web@gmail.com
  • 2. Antes de falar um pouco da minha experiência com o MongoDB, gostaria de agradecer a oportunidade disponibilizada pelo Suissa para compartilhar essa informação no NoSQLBr. Muito obrigado!! Há meses estou submerso em um projeto que utiliza o MongoDB, foi escolhido depois de uma longa discussão com a equipe, sua eficiência e agilidade de processamento, quando bem configurado a coisa fica monstra. Porem me deparei com um problema que deve afetar todos ao trabalhar com um banco de dados NoSQL a FORMA DE SE PENSAR E PROJETAR o banco. Como sempre trabalhei com banco de dados relacionais, projetei o MongoDB de forma idêntica a um banco de dados relacional e ai começou a minha dor de cabeça. Estava tendo que tirar leite de pedra para alimentar um monstrinho com muita fome, ou seja, tinha que ter um esforço fora do comum para alimentar um aplicativo que exigia informações relacionadas e simples ao usuário final. Por exemplo: [Usuários] -> Onde são cadastrados todos os usuários. [Amigos] -> Onde são cadastradas os relacionamentos dos amigos de cada usuário. Sendo assim em um banco relacional teríamos isso: [Usuário] 1 -> N [Amigo] Foi ai que deu inicio ao caos (rssss). Na hora de resgatar algumas informações tinha um trabalho imenso e neste caso estava tendo que executar dois processos. 1 – Listar os ID’s que estavam na tabela de Amigos 2 – Verificar os ID’s encontrados no passo 1 e verificar suas informações
  • 3. Em PHP seria algo assim: <?php … $collection = new MongoCollection($db, 'amigo'); $query = array('idUsuario' => new MongoId(123)); $list = $collection->find($query); foreach ($list as $value) { $temp[] = new MongoId($value->idAmigo); } … $collection = new MongoCollection($db, 'usuario'); $queryAmigo = array('_id' => array('$in' => $temp)); $listAmigo = $collection->find($queryAmigo); … // Executaria dois processos… para algo relativamente simples, agora // imagine um relacionamento envolvendo mais tabelas… ?> Solução do problema: <?php $conexao = new Mongo(); // Iniciando uma conexão com o MongoDB $db = $conexao->testandoomongo; // Criando uma base de dados // Usuários inseridos. $db->usuarios->insert(array("_id"=>1,"name"=>"User01")); $db->usuarios->insert(array("_id"=>2,"name"=>"User02")); $db->usuarios->insert(array("_id"=>3,"name"=>"User03")); // Criando referencia de um usuario. $infoUser = $db->usuarios->findOne(array('_id' => 2)); $refUser = $db->usuarios->createDBRef($infoUser); // Adiciona a referencia $db->usuarios->update(array('_id'=>1),array('$push'=>array('amigos'=> $refUser))); // Consulta o usuario 1 $consulta = $db->usuarios->findOne(array("_id"=>1)); foreach ($consulta["amigos"] as $con) { // pega a referencia do usuario $ref = $db->usuarios->getDBRef($con); print_r($ref); } ?> Então comecei a perceber que estava na hora de mudar a forma de pensar e de utilizar o MongoDB. Quando pensar em MongoDB pense como se fosse um grande objeto. Abaixo listei 3 dicas que não esquecerei jamais: 1 – Não utilize técnicas de banco relacional no MongoDB; 2 – Pense que as tabelas do MongoDB são grandes objetos que a qualquer momento podem mudar sua forma “física”; 3 – Quando for programar tente ao máximo utilizar o raciocínio lógico, explorando ao máximo seu objeto evitando o excesso de processamento do MongoDB.
  • 4. Grande abraço a todos e fica a dica, qualquer coisa manda a dúvida que agente discute e tentar encontrar a melhor solução. Valeuuu!! Links: http://nosql.techinsider.com.br