palestra mongodb
TRANSCRIPT
![Page 1: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/1.jpg)
{nome : “Jamerson Silva”, email : “[email protected]”}
![Page 2: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/3.jpg)
Quem Usa?
http://www.mongodb.org/display/DOCS/Production+Deployments
![Page 4: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/4.jpg)
Modelo de Dados
• DatabasesDatabases
• ColeçõesColeções
• Documentos Documentos
• BSONBSON
![Page 5: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/11.jpg)
Pronto?É só isso?...
![Page 12: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/18.jpg)
Tem mais?
• Updates– $set
– $unset
– $push
– $pull
– $inc
![Page 19: Palestra mongoDB](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022061616/5560c067d8b42af93b8b54d5/html5/thumbnails/24.jpg)
Obrigado!