Michel Felipe
michelphp@gmail.com

   @mfdeveloper
APRESENTAÇÃO

v  Analista de Sistemas na Prodeb	


v  Formado em Redes de Computadores	


v  Pós-Graduando em Eng. de Software
AGENDA
v  MongoDb: Características	

v  Download, instalação e Comandos Shell	

v  Inserindo, retornando e removendo dados via shell	

v  PHP e MongoDB: Por que utilizá-los juntos?	

v Conexão PHP com Mongo e CRUD	

v Conceito de “Chave Primária”	

v ORM’s para PHP + Mongo
MONGO E NOSQL

v  Not only SQL – Banco de dados não relacional	


v  Foco em “escalabilidade” e “desempenho”	


v  Tipos: Baseado em Grafos, Orientado a colunas
MONGODB -
             CARACTERISTICAS

v  Nosql open source baseado em documentos	


v  Fácil utilização	


v  Utiliza uma API OO Javascript
MONGODB -
DOCUMENTOS
MONGODB -
      CARACTERISTICAS

Database


           Collections

                         Documents
MONGODB -
           CARACTERISTICAS

v  BSON – Binary-encoded JSON	


v  Obs: Utilizar o tipo “MongoDate” para datas	


v  Limitações de tamanho: 	

   •  Arquitetura 32 bits e BSON
MONGODB - INSTALAÇÃO
1.    http://www.mongodb.org/	


2.    Download e descompactação	


3.    Criar arquivo de configuração e iniciar
  “serviço” do banco
MONGODB – ÁRVORE DE
    DIRETÓRIOS
MONGODB – ÁRQUIVO DE
   CONFIGURAÇÃO
MONGODB – CONEXÃO
MONGODB – CONEXÃO:
           PROBLEMAS

v  Problemas podem acontecer	

    •  Crash, conexão não finalizada corretamente 	

v  Necessário executar um “repair” nas bases	


v “old lock file”, pode indicar a remoção do arquivo
“mongod.lock”
MONGODB – CONEXÃO:
         AUTENTICAÇÃO

v  Provê segurança para as bases de dados	

v  Geralmente não é necessário para ambientes de “teste”	


v  Utiliza-se o argumento opcional “- - auth” na conexão
MONGODB – CRUD NO
              BASH

v  Método db.collection.insert( );

v  Método db.collection.find( ) e db.collection.findOne( );

v  Método db.collection.remove( );

v  Método db.collection.update( ) e db.collection.save( );
MONGODB – MAPREDUCE

v  Mapeia os dados, usando um valor do documento como
condição	


v  Muito parecido com o “GROUP BY”	


v  Reduz os valores mapeados, associando uma informação
MONGODB – MAPREDUCE


          Exemplo:

Agrupamento - Tags por usuários
PHP + MONGODB?

v  Gerenciar dados em larga escala	

v  ORM’s geralmente não são bons em desempenho	

v  As vezes é necessário alternativas:”MemCache,
Raid,Cluster…”
PHP + MONGODB –
        CLASSES BASE
   Database:
Mongo/MongoDB
                  Collections:
                MongoCollection
                                  Documents:
                                  MongoCursor
PHP + MONGODB – CLASSES
         DE TIPOS DE DADOS
         ID:                  ID:                     ID:
       MongoId             MongoCode               MongoDate

                       ID:                        ID:
                MongoRegex                MongoBinData

Obs: Existem mais classes em: http://br2.php.net/manual/en/mongo.types.php
PHP + MONGODB
            “SCRIPT INJECTION”
v  Semelhante ao SQL Injection	

v  Utiliza-se de código Javascript	

v  Técnicas de prevenção	

    v  Request Injection: Forçar cast para string	

    v  Utilizar classe MongoCode para código javascript	

    v  De preferência, utilizar o parâmetro $scope
PHP + MONGODB
         “SCRIPT INJECTION”

                  Exemplos:

Requisição: www.example.com?usr[$ne]=bar

Script: db.execute(‘codigoJavascript’)
PHP + MONGO–
INSTALAÇÃO DO DRIVER

   pecl install mongo	

   php.ini:	

   extension=mongo.so
PHP + MONGO–
      INSTALAÇÃO DO DRIVER
1.  https://github.com/mongodb/mongo-php-
 driver/downloads 	


2.  Copiar para a pasta de extensões do PHP(.dll
 ou .so)
PHP + MONGO – CONECTANDO
        AO MONGODB

<?php	
	
$connection = new Mongo(‘localhost:27017’); 	
	

?>
PHP + MONGO –
        INSERINDO DADOS
<?php	
	
$connection->dbName->collection->insert(	
    	array(‘field’=>’value’)	
);	
	

?>
PHP + MONGO –
      RETORNANDO DADOS
<?php	
	
$id = new MongoId(‘4f9af7fd08e9243347’);	
$connection->dbName->collection->findOne(	
    	array(‘_id’=>$id)	
);	
	

?>
PHP + MONGO –
      ATUALIZANDO DADOS
<?php	
	
$addresses->update(	
  array(‘_id’=>new MongoId(‘4f9af7fd08e9’))	
  array(‘$set’=>array(‘zip’=>’1001’)	
);	
                 Adicionar ao documento
	

?>
PHP – REMOVENDO
             DADOS
<?php	
	
$where =‘_id’=>new MongoId(‘4f9af7fd08e9’);	
$addresses->remove(	
  $where,	
  array(‘justOne’=>true)	
);	
	

?>
PHP + MONGO – GRIDFS

v  Utilizado para armazenar grandes arquivos	


v  Associa metadados aos arquivos 	


v  Separa arquivos em “chunks”	


v  Utiliza a classe MongoGridFS
PHP – REMOVENDO
             DADOS
<?php	
    	$db = new Mongo();	
    	$grid = $db->getGridFS();	
    	$grid->storeFile(‘file.txt’,    	
    	    array(‘metadata’=> (	
    	    	     	‘date’ =>new MongoDate()	
    	    	))	
    	));	

?>
PHP + MONGO – REST API

v  Acesso aos dados usando requisição HTTP	


v  Interfaces Especiais:	

    v  Sleepy Mongoose (Python)	

    v  MongoDB Rest(Node.js)	

    v  MongoDB Java Rest server
PHP + MONGO – REST API

v  Acesso nativo de “somente leitura” 	


v  Necessário o parâmetro “- - rest” no bash/prompt	


v  Acessível através porta padrão: 28017
PHP + MONGO – REST API

               Exemplo:

http://localhost:28017/mongophp/user/find
PHP + MONGO – ORM’S
      v  ZendFramework : Zend_Nosql_Mongo	

      	
      	
      $db = new Zend_Nosql_Mongo_Db(null,‘test’);	
      $col1 = $db->getCollection(‘testcollect’);	
      $id = $col1->save(new
      Zend_Nosql_Mongo_Object(array(‘field’=>1)->getId( );	
	

      	

v  Kohana: MangoDB
PHP + MONGO – ORM’S

v  Symfony 2: sfStoragePerformancePlugin	


v  CodeIgniter: MongoDB-CodeIgniter-Driver
PHP + MONGO – DESAFIO

CADASTRAR GRANDE QUANTIDADE
 DE IMAGENS NO BANCO NOSQL
PHP – REFERÊNCIAS
PHP – REFERÊNCIAS	


	

v  http://www.mongodb.org/	

	
http://devzone.zend.com/1730/getting-started-with-
mongodb-and-php/
PHP + MONGO

 OBRIGADO!

PHPMongoDB

  • 1.
  • 2.
    APRESENTAÇÃO v  Analista deSistemas na Prodeb v  Formado em Redes de Computadores v  Pós-Graduando em Eng. de Software
  • 3.
    AGENDA v  MongoDb: Características v Download, instalação e Comandos Shell v  Inserindo, retornando e removendo dados via shell v  PHP e MongoDB: Por que utilizá-los juntos? v Conexão PHP com Mongo e CRUD v Conceito de “Chave Primária” v ORM’s para PHP + Mongo
  • 4.
    MONGO E NOSQL v Not only SQL – Banco de dados não relacional v  Foco em “escalabilidade” e “desempenho” v  Tipos: Baseado em Grafos, Orientado a colunas
  • 5.
    MONGODB - CARACTERISTICAS v  Nosql open source baseado em documentos v  Fácil utilização v  Utiliza uma API OO Javascript
  • 6.
  • 7.
    MONGODB - CARACTERISTICAS Database Collections Documents
  • 8.
    MONGODB - CARACTERISTICAS v  BSON – Binary-encoded JSON v  Obs: Utilizar o tipo “MongoDate” para datas v  Limitações de tamanho: •  Arquitetura 32 bits e BSON
  • 9.
    MONGODB - INSTALAÇÃO 1.  http://www.mongodb.org/ 2.  Download e descompactação 3.  Criar arquivo de configuração e iniciar “serviço” do banco
  • 10.
    MONGODB – ÁRVOREDE DIRETÓRIOS
  • 11.
    MONGODB – ÁRQUIVODE CONFIGURAÇÃO
  • 12.
  • 13.
    MONGODB – CONEXÃO: PROBLEMAS v  Problemas podem acontecer •  Crash, conexão não finalizada corretamente v  Necessário executar um “repair” nas bases v “old lock file”, pode indicar a remoção do arquivo “mongod.lock”
  • 14.
    MONGODB – CONEXÃO: AUTENTICAÇÃO v  Provê segurança para as bases de dados v  Geralmente não é necessário para ambientes de “teste” v  Utiliza-se o argumento opcional “- - auth” na conexão
  • 15.
    MONGODB – CRUDNO BASH v  Método db.collection.insert( ); v  Método db.collection.find( ) e db.collection.findOne( ); v  Método db.collection.remove( ); v  Método db.collection.update( ) e db.collection.save( );
  • 16.
    MONGODB – MAPREDUCE v Mapeia os dados, usando um valor do documento como condição v  Muito parecido com o “GROUP BY” v  Reduz os valores mapeados, associando uma informação
  • 17.
    MONGODB – MAPREDUCE Exemplo: Agrupamento - Tags por usuários
  • 18.
    PHP + MONGODB? v Gerenciar dados em larga escala v  ORM’s geralmente não são bons em desempenho v  As vezes é necessário alternativas:”MemCache, Raid,Cluster…”
  • 19.
    PHP + MONGODB– CLASSES BASE Database: Mongo/MongoDB Collections: MongoCollection Documents: MongoCursor
  • 20.
    PHP + MONGODB– CLASSES DE TIPOS DE DADOS ID: ID: ID: MongoId MongoCode MongoDate ID: ID: MongoRegex MongoBinData Obs: Existem mais classes em: http://br2.php.net/manual/en/mongo.types.php
  • 21.
    PHP + MONGODB “SCRIPT INJECTION” v  Semelhante ao SQL Injection v  Utiliza-se de código Javascript v  Técnicas de prevenção v  Request Injection: Forçar cast para string v  Utilizar classe MongoCode para código javascript v  De preferência, utilizar o parâmetro $scope
  • 22.
    PHP + MONGODB “SCRIPT INJECTION” Exemplos: Requisição: www.example.com?usr[$ne]=bar Script: db.execute(‘codigoJavascript’)
  • 23.
    PHP + MONGO– INSTALAÇÃODO DRIVER pecl install mongo php.ini: extension=mongo.so
  • 24.
    PHP + MONGO– INSTALAÇÃO DO DRIVER 1.  https://github.com/mongodb/mongo-php- driver/downloads 2.  Copiar para a pasta de extensões do PHP(.dll ou .so)
  • 25.
    PHP + MONGO– CONECTANDO AO MONGODB <?php $connection = new Mongo(‘localhost:27017’); ?>
  • 26.
    PHP + MONGO– INSERINDO DADOS <?php $connection->dbName->collection->insert( array(‘field’=>’value’) ); ?>
  • 27.
    PHP + MONGO– RETORNANDO DADOS <?php $id = new MongoId(‘4f9af7fd08e9243347’); $connection->dbName->collection->findOne( array(‘_id’=>$id) ); ?>
  • 28.
    PHP + MONGO– ATUALIZANDO DADOS <?php $addresses->update( array(‘_id’=>new MongoId(‘4f9af7fd08e9’)) array(‘$set’=>array(‘zip’=>’1001’) ); Adicionar ao documento ?>
  • 29.
    PHP – REMOVENDO DADOS <?php $where =‘_id’=>new MongoId(‘4f9af7fd08e9’); $addresses->remove( $where, array(‘justOne’=>true) ); ?>
  • 30.
    PHP + MONGO– GRIDFS v  Utilizado para armazenar grandes arquivos v  Associa metadados aos arquivos v  Separa arquivos em “chunks” v  Utiliza a classe MongoGridFS
  • 31.
    PHP – REMOVENDO DADOS <?php $db = new Mongo(); $grid = $db->getGridFS(); $grid->storeFile(‘file.txt’, array(‘metadata’=> ( ‘date’ =>new MongoDate() )) )); ?>
  • 32.
    PHP + MONGO– REST API v  Acesso aos dados usando requisição HTTP v  Interfaces Especiais: v  Sleepy Mongoose (Python) v  MongoDB Rest(Node.js) v  MongoDB Java Rest server
  • 33.
    PHP + MONGO– REST API v  Acesso nativo de “somente leitura” v  Necessário o parâmetro “- - rest” no bash/prompt v  Acessível através porta padrão: 28017
  • 34.
    PHP + MONGO– REST API Exemplo: http://localhost:28017/mongophp/user/find
  • 35.
    PHP + MONGO– ORM’S v  ZendFramework : Zend_Nosql_Mongo $db = new Zend_Nosql_Mongo_Db(null,‘test’); $col1 = $db->getCollection(‘testcollect’); $id = $col1->save(new Zend_Nosql_Mongo_Object(array(‘field’=>1)->getId( ); v  Kohana: MangoDB
  • 36.
    PHP + MONGO– ORM’S v  Symfony 2: sfStoragePerformancePlugin v  CodeIgniter: MongoDB-CodeIgniter-Driver
  • 37.
    PHP + MONGO– DESAFIO CADASTRAR GRANDE QUANTIDADE DE IMAGENS NO BANCO NOSQL
  • 39.
  • 40.
    PHP – REFERÊNCIAS v http://www.mongodb.org/ http://devzone.zend.com/1730/getting-started-with- mongodb-and-php/
  • 41.
    PHP + MONGO OBRIGADO!