Palestra mongoDB

Post on 24-May-2015

918 views 3 download

Transcript of Palestra mongoDB

{nome : “Jamerson Silva”, email : “jamersonweb@gmail.com”}

Mongo? Que danado é isso?

• banco de dados orientado a documentos– Usa o formato BSON: Binary JSON. Tudo é um documento (die ORMdie ORM);

– Documentos aninhados, reduz a necessidade de “JOINS”;

– Schema-less - não precisa parar o site para adicionar uma nova coluna na tabelanão precisa parar o site para adicionar uma nova coluna na tabela

• Escrito em C, alta performance– Suporta Índices;

– Auto-Sharding – preparado para escalar horizontalmente;

– Insert/UpdateInsert/Update - Dados armazenados em memória, em segundo plano, para serem gravados em disco.

• Suporta tipos ricos– datas, expressões regulares, códigos, dados binários

– GridFS para armazenamento eficiente de arquivos binários grandes (BLOB)

Quem Usa?

http://www.mongodb.org/display/DOCS/Production+Deployments

Modelo de Dados

• DatabasesDatabases

• ColeçõesColeções

• Documentos Documentos

• BSONBSON

Database

• Agrupamento físico de coleçõesAgrupamento físico de coleções

• Arquivos de dadosArquivos de dados– pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...

Coleções

• Agrupamento lógico de documentosAgrupamento lógico de documentos– Equivale às tabelas do RDBMsEquivale às tabelas do RDBMs

• Schema-freeSchema-free– pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...

• Número ilimitado de documentosNúmero ilimitado de documentos

Documentos

• Unidade de armazenamentoUnidade de armazenamento– equivale às linhas do RDBMsequivale às linhas do RDBMs

• Todos devem ter um _id únicoTodos devem ter um _id único

• Tamanho máximo de 4MBTamanho máximo de 4MB– para objetos maiores, use GridFSpara objetos maiores, use GridFS

BSON

• Objetos no MongoDBObjetos no MongoDB– Formato de armazenamento de dados de documentosFormato de armazenamento de dados de documentos

• "Binary JSON""Binary JSON"

• Permite representação de tipos ricosPermite representação de tipos ricos – algumas formas de dados que não fazem parte do padrão JSON (Date, BinData, outros)algumas formas de dados que não fazem parte do padrão JSON (Date, BinData, outros)

Legal! Como começar?

Baixando o MongoDBBinários disponíveis em 32/64 bit para Linux, Windows, OS X e Solaris.

• Versão 32 bit linux: Versão 32 bit linux: – http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgzhttp://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgz

• Versão 64 bit linux: Versão 64 bit linux:

– http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgzhttp://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz

E agora? Como Instalar?

• Extrair conteúdo do arquivo para uma pasta– Exemplo: /mongodb

• Crie uma pasta para armazenar os dados– Dê permissão de escrita;

– Exemplo: /data/db

• Execute o daemon– Suapastamongodb/bin/mongod –dbpath suapasta/de/dados

• Execute o daemon– Exemplo: suapastamongodb/bin/mongod run

• Via apt-get (linux – fedora, ubuntu)– http://www.mongodb.org/display/DOCS/Building+for+Linux

Pronto?É só isso?...

Instalando o Driver PHP

• Via peclVia pecl

– pecl install mongopecl install mongo

• Via GitHub: Via GitHub:

– baixar source de http://github.com/mongodb/mongo-php-driver/tarball/masterbaixar source de http://github.com/mongodb/mongo-php-driver/tarball/master

– Extrair conteúdo de tar.gzExtrair conteúdo de tar.gz

– Acessar pasta e digitar no console:Acessar pasta e digitar no console:

$ phpize$ phpize

$ ./configure$ ./configure

$ sudo make install$ sudo make install

• Altere o arquivo php.iniAltere o arquivo php.ini

– Adicione no fim do arquivo a linha extension=mongo.soextension=mongo.so

• Reiniciar apacheReiniciar apache

de quebra...

• Shell– suapastamongodb/bin/mongosuapastamongodb/bin/mongo

• Interface web– http://localhost:28017http://localhost:28017

• FerramentasFerramentas– importarimportar suapastamongodb/bin/mongoimportjson suapastamongodb/bin/mongoimportjson

– exportarexportar suapastamongodb/bin/mongoexport suapastamongodb/bin/mongoexport

– backupbackup suapastamongodb/bin/mongodump suapastamongodb/bin/mongodump

– RestoreRestore suapastamongodb/bin/mongorestore suapastamongodb/bin/mongorestore

Vamos ao que interessa?

• Abrir uma conexão$connection = new Mongo();

/* host padrão localhost, porta padrão 27017 */

$connection = new Mongo( "example.com" );

/* host remoto example.com, port padrão */

$connection = new Mongo( "example.com:65432" );

/* host example.com, porta 65432 */

• Autenticação– É possível adicionar autenticação individual para cada database, inserindo É possível adicionar autenticação individual para cada database, inserindo

usuário/senha na coleção "admin".usuário/senha na coleção "admin".

Metendo a mão na massa

• Selecionando um Banco de dados– $dbMongo = $conexaoMongo->selectDB(‘nomedobanco’);

– $dbMongo = $conexaoMongo->nomedobanco; (mágica? __set)

• Selecionando uma Coleção (tabela)– $dbMongo = $dbMongo->selectCollection(‘nomedacolecao’);

– $dbMongo = $dbMongo->nomedacolecao; (mágica? __set)

Inserindo um documento

• Criando um Documento (linha)– Em PHP, documentos são nativamente Arrays;

– $doc = array(“nome” => “Jamerson Silva”, “email” => “jamersonweb@gmail.com”);

• Salvando um Documento em uma Coleção– $colecaoMongo->save($doc);

– Se seu documento ($doc) não tiver um "_id", mongodb irá atribuir um MongoID Se seu documento ($doc) não tiver um "_id", mongodb irá atribuir um MongoID automaticamente (12 bytes)automaticamente (12 bytes)

• Recuperando um Documento– $documento = $colecaoMongo->findOne();

– Este método retorna um array (objeto Mongo/Documento)

E os “wheres”?

• Selects– $gt, $lt, $gte, $lte, $eq, $neq: >, <, >=, <=, ==, !=

– $in, $nin

– $size, $exists

– $where: apenas para expressões javascript

– group()

– limit()

– skip()

Tem mais?

• Updates– $set

– $unset

– $push

– $pull

– $inc

Ele faz o MySQL faz?

• MySQL– MySQL = SELECT count(*) FROM table

• MongoDB– MongoDB = $collection->count();

• MySQL– SELECT count(*) FROM table WHERE foo = 1

• MongoDB– $collection->find(array("foo" => 1))->count();

Mongo ordena?

• MySQL

SELECT * FROM table

WHERE field IN (5,6,7) and enable=1 and worth < 5

ORDER BY timestamp DESC

• MongoDB

$filter = array(

’field’ => array(’$in’ => array(5,6,7)),

’enable’ => 1,

’worth’ => array(’$lt’ => 5)

);

$results = $collection->find($filter)->sort(array(’timestamp’ => -1));

Suporta limites - paginação

• MySQLSELECT * FROM table

WHERE field IN (5,6,7) and enable=1 and worth < 5

ORDER BY timestamp DESC LIMIT 10, 20

• MongoDB$filter = array(

’field’ => array(’$in’ => array(5,6,7)),

’enable’ => 1,

’worth’ => array(’$lt’ => 5)

);

$cursor = $collection->find($filter);

$cursor->sort(array(’timestamp’ => -1))->skip(10)->limit(20);

Indexando campos

• Criando um Índice– $colecao->ensureIndex(array(“campo" => 1));– 1 ascendente, -1 descendente

• Removendo um Índice– $colecao->deleteIndex(“campo”);

• Índices Únicos – $colecao->ensureIndex(array(“campo" => 1), array("unique" => 1));

Ao infinito e Além

• No momento, mongodb só pode em hosts dedicados / VPSNo momento, mongodb só pode em hosts dedicados / VPS

• Desenvolvedores estão propondo suporte em hosts compartilhadosDesenvolvedores estão propondo suporte em hosts compartilhados

• Documentação da extensão mongophp:Documentação da extensão mongophp:

– www.php.net/mongodbwww.php.net/mongodb

• Documentação oficial é bem completa:Documentação oficial é bem completa:

– www.mongodb.comwww.mongodb.com

• Lista de discussão com participação ativa e prestativaLista de discussão com participação ativa e prestativa

– http://groups.google.com/group/mongodb-userhttp://groups.google.com/group/mongodb-user

Obrigado!