Top Banner
[email protected] @mfdeveloper Michel Felipe
41

phpmongodb

Oct 26, 2014

Download

Documents

Michel Felipe
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: phpmongodb

[email protected]

@mfdeveloper

Michel Felipe

Page 2: phpmongodb

APRESENTAÇÃO

Analista de Sistemas na Prodeb

Formado em Redes de Computadores

Pós-Graduando em Eng. de Software

Page 3: phpmongodb

AGENDA MongoDb: Características

Download, instalação e Comandos Shell

Inserindo, retornando e removendo dados via shell

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

Conexão PHP com Mongo e CRUD

Conceito de “Chave Primária”

ORM’s para PHP + Mongo

Page 4: phpmongodb

MONGO E NOSQL

Not only SQL – Banco de dados não relacional

Foco em “escalabilidade” e “desempenho”

Tipos: Baseado em Grafos, Orientado a colunas

Page 5: phpmongodb

MONGODB - CARACTERISTICAS

Nosql open source baseado em documentos

Fácil utilização

Utiliza uma API OO Javascript

Page 6: phpmongodb

MONGODB - DOCUMENTOS

Page 7: phpmongodb

MONGODB - CARACTERISTICAS

Database

Collections

Documents

Page 8: phpmongodb

MONGODB - CARACTERISTICAS

BSON – Binary-encoded JSON

Obs: Utilizar o tipo “MongoDate” para datas

Limitações de tamanho: • Arquitetura 32 bits e BSON

Page 9: phpmongodb

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

Page 10: phpmongodb

MONGODB – ÁRVORE DE DIRETÓRIOS

Page 11: phpmongodb

MONGODB – ÁRQUIVO DE CONFIGURAÇÃO

Page 12: phpmongodb

MONGODB – CONEXÃO

Page 13: phpmongodb

MONGODB – CONEXÃO: PROBLEMAS

Problemas podem acontecer• Crash, conexão não finalizada corretamente

Necessário executar um “repair” nas bases

“old lock file”, pode indicar a remoção do arquivo

“mongod.lock”

Page 14: phpmongodb

MONGODB – CONEXÃO: AUTENTICAÇÃO

Provê segurança para as bases de dados

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

Utiliza-se o argumento opcional “- - auth” na conexão

Page 15: phpmongodb

MONGODB – CRUD NO BASH

Método db.collection.insert( );

Método db.collection.find( ) e

db.collection.findOne( );

Método db.collection.remove( );

Método db.collection.update( ) e

db.collection.save( );

Page 16: phpmongodb

MONGODB – MAPREDUCE

Mapeia os dados, usando um valor do documento como

condição

Muito parecido com o “GROUP BY”

Reduz os valores mapeados, associando uma informação

Page 17: phpmongodb

MONGODB – MAPREDUCE

Exemplo:

Agrupamento - Tags por usuários

Page 18: phpmongodb

PHP + MONGODB?

Gerenciar dados em larga escala

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

As vezes é necessário alternativas:”MemCache,

Raid,Cluster…”

Page 19: phpmongodb

PHP + MONGODB – CLASSES BASE

Database: Mongo/

MongoDBCollections:

MongoCollection Document

s:MongoCur

sor

Page 20: phpmongodb

PHP + MONGODB – CLASSES DE TIPOS DE DADOS

ID:MongoI

d

ID:MongoCo

de

ID:MongoDat

eID:

MongoRegex

ID:MongoBinD

ata

Obs: Existem mais classes em: http://br2.php.net/manual/en/mongo.types.php

Page 21: phpmongodb

PHP + MONGODB “SCRIPT INJECTION”

Semelhante ao SQL Injection

Utiliza-se de código Javascript

Técnicas de prevenção Request Injection: Forçar cast para string Utilizar classe MongoCode para código javascript De preferência, utilizar o parâmetro $scope

Page 22: phpmongodb

PHP + MONGODB “SCRIPT INJECTION”

Exemplos:

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

Script: db.execute(‘codigoJavascript’)

Page 23: phpmongodb

PHP + MONGO– INSTALAÇÃO DO DRIVER

pecl install mongo

php.ini:extension=mongo.so

Page 24: phpmongodb

PHP + MONGO– INSTALAÇÃO DO DRIVER

1. https://github.com/mongodb/mongo-php-driver/d

ownloads

2. Copiar para a pasta de extensões do PHP(.dll

ou .so)

Page 25: phpmongodb

PHP + MONGO – CONECTANDO AO MONGODB

<?php

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

?>

Page 26: phpmongodb

PHP + MONGO – INSERINDO DADOS

<?php

$connection->dbName->collection->insert(array(‘field’=>’value’)

);

?>

Page 27: phpmongodb

PHP + MONGO – RETORNANDO DADOS

<?php

$id = new MongoId(‘4f9af7fd08e9243347’);$connection->dbName->collection->findOne(

array(‘_id’=>$id));

?>

Page 28: phpmongodb

PHP + MONGO – ATUALIZANDO DADOS

<?php

$addresses->update( array(‘_id’=>new MongoId(‘4f9af7fd08e9’)) array(‘$set’=>array(‘zip’=>’1001’));

?>

Adicionar ao documento

Page 29: phpmongodb

PHP – REMOVENDO DADOS

<?php

$where =‘_id’=>new MongoId(‘4f9af7fd08e9’);$addresses->remove( $where, array(‘justOne’=>true));

?>

Page 30: phpmongodb

PHP + MONGO – GRIDFS

Utilizado para armazenar grandes arquivos

Associa metadados aos arquivos

Separa arquivos em “chunks”

Utiliza a classe MongoGridFS

Page 31: phpmongodb

PHP – REMOVENDO DADOS<?php

$db = new Mongo();$grid = $db->getGridFS();$grid->storeFile(‘file.txt’,

array(‘metadata’=> (‘date’ =>new MongoDate()

))));

?>

Page 32: phpmongodb

PHP + MONGO – REST API

Acesso aos dados usando requisição HTTP

Interfaces Especiais: Sleepy Mongoose (Python) MongoDB Rest(Node.js) MongoDB Java Rest server

Page 33: phpmongodb

PHP + MONGO – REST API

Acesso nativo de “somente leitura”

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

Acessível através porta padrão: 28017

Page 34: phpmongodb

PHP + MONGO – REST API

Exemplo:

http://localhost:28017/mongophp/user/find

Page 35: phpmongodb

PHP + MONGO – ORM’S

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( );

Kohana: MangoDB

Page 36: phpmongodb

PHP + MONGO – ORM’S

Symfony 2: sfStoragePerformancePlugin

CodeIgniter: MongoDB-CodeIgniter-Driver

Page 37: phpmongodb

PHP + MONGO – DESAFIO

CADASTRAR GRANDE QUANTIDADE

DE IMAGENS NO BANCO NOSQL

Page 38: phpmongodb
Page 39: phpmongodb

PHP – REFERÊNCIAS

Page 41: phpmongodb

PHP + MONGO

OBRIGADO!