Palestra mongoDB

24
{nome : “Jamerson Silva”, email : “[email protected]”}

Transcript of Palestra mongoDB

Page 1: Palestra mongoDB

{nome : “Jamerson Silva”, email : “[email protected]”}

Page 2: Palestra mongoDB

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)

Page 3: Palestra mongoDB

Quem Usa?

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

Page 4: Palestra mongoDB

Modelo de Dados

• DatabasesDatabases

• ColeçõesColeções

• Documentos Documentos

• BSONBSON

Page 5: Palestra mongoDB

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 -> ...

Page 6: Palestra mongoDB

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

Page 7: Palestra mongoDB

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

Page 8: Palestra mongoDB

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)

Page 9: Palestra mongoDB

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

Page 10: Palestra mongoDB

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

Page 11: Palestra mongoDB

Pronto?É só isso?...

Page 12: Palestra mongoDB

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

Page 13: Palestra mongoDB

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

Page 14: Palestra mongoDB

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".

Page 15: Palestra mongoDB

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)

Page 16: Palestra mongoDB

Inserindo um documento

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

– $doc = array(“nome” => “Jamerson Silva”, “email” => “[email protected]”);

• 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)

Page 17: Palestra mongoDB

E os “wheres”?

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

– $in, $nin

– $size, $exists

– $where: apenas para expressões javascript

– group()

– limit()

– skip()

Page 18: Palestra mongoDB

Tem mais?

• Updates– $set

– $unset

– $push

– $pull

– $inc

Page 19: Palestra mongoDB

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

Page 20: Palestra mongoDB

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

Page 21: Palestra mongoDB

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

Page 22: Palestra mongoDB

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

Page 23: Palestra mongoDB

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

Page 24: Palestra mongoDB

Obrigado!