{nome : “ Jamerson Silva ”, email : “ [email_address] ”}
Mongo?  Que danado é isso? <ul><li>banco de dados orientado a documentos </li></ul><ul><ul><li>Usa o formato BSON: Binary ...
Quem Usa? http://www.mongodb.org/display/DOCS/Production+Deployments
Modelo de Dados <ul><li>Databases </li></ul><ul><li>Coleções </li></ul><ul><li>Documentos  </li></ul><ul><li>BSON </li></ul>
Database <ul><li>Agrupamento físico de coleções </li></ul><ul><li>Arquivos de dados </li></ul><ul><ul><li>pré-alocação: 64...
Coleções <ul><li>Agrupamento lógico de documentos </li></ul><ul><ul><li>Equivale às tabelas do RDBMs </li></ul></ul><ul><l...
Documentos <ul><li>Unidade de armazenamento </li></ul><ul><ul><li>equivale às linhas do RDBMs </li></ul></ul><ul><li>Todos...
BSON <ul><li>Objetos no MongoDB </li></ul><ul><ul><li>Formato de armazenamento de dados de documentos </li></ul></ul><ul><...
Legal! Como começar? <ul><li>Baixando o MongoDB </li></ul><ul><li>Binários disponíveis em 32/64 bit para Linux, Windows, O...
E agora? Como Instalar? <ul><li>Extrair conteúdo do arquivo para uma pasta </li></ul><ul><ul><li>Exemplo:  /mongodb </li><...
Pronto? É só isso?...
Instalando o Driver PHP <ul><li>Via pecl </li></ul><ul><ul><li>pecl install mongo </li></ul></ul><ul><li>Via GitHub:  </li...
de quebra... <ul><li>Shell </li></ul><ul><ul><li>suapastamongodb/bin/mongo </li></ul></ul><ul><li>Interface web </li></ul>...
Vamos ao que interessa? <ul><li>Abrir uma conexão </li></ul><ul><ul><li>$connection = new Mongo(); </li></ul></ul><ul><ul>...
Metendo a mão na massa <ul><li>Selecionando um Banco de dados </li></ul><ul><ul><li>$dbMongo = $conexaoMongo->selectDB(‘no...
Inserindo um documento <ul><li>Criando um Documento  (linha) </li></ul><ul><ul><li>Em PHP, documentos são nativamente Arra...
E os “wheres”? <ul><li>Selects </li></ul><ul><ul><li>$gt,  $lt, $gte, $lte, $eq, $neq: >, <, >=, <=, ==, != </li></ul></ul...
Tem mais? <ul><li>Updates </li></ul><ul><ul><li>$set </li></ul></ul><ul><ul><li>$unset </li></ul></ul><ul><ul><li>$push </...
Ele faz o MySQL faz? <ul><li>MySQL </li></ul><ul><ul><li>MySQL = SELECT count(*) FROM table </li></ul></ul><ul><li>MongoDB...
Mongo ordena? <ul><li>MySQL </li></ul><ul><ul><li>SELECT * FROM table </li></ul></ul><ul><ul><li>WHERE field IN (5,6,7) an...
Suporta limites  - paginação <ul><li>MySQL </li></ul><ul><ul><li>SELECT * FROM table  </li></ul></ul><ul><ul><li>WHERE fie...
Indexando campos <ul><li>Criando um Índice </li></ul><ul><ul><li>$colecao->ensureIndex(array(“campo&quot; => 1)); </li></u...
Ao infinito e Além <ul><li>No momento, mongodb só pode em hosts dedicados / VPS </li></ul><ul><li>Desenvolvedores estão pr...
Obrigado!
Upcoming SlideShare
Loading in …5
×

Palestra MongoDB

1,665 views

Published on

Palestra

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,665
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
29
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Palestra MongoDB

  1. 1. {nome : “ Jamerson Silva ”, email : “ [email_address] ”}
  2. 2. Mongo? Que danado é isso? <ul><li>banco de dados orientado a documentos </li></ul><ul><ul><li>Usa o formato BSON: Binary JSON. Tudo é um documento ( die ORM ); </li></ul></ul><ul><ul><li>Documentos aninhados, reduz a necessidade de “ JOINS ”; </li></ul></ul><ul><ul><li>Schema-less - não precisa parar o site para adicionar uma nova coluna na tabela </li></ul></ul><ul><li>Escrito em C, alta performance </li></ul><ul><ul><li>Suporta Índices ; </li></ul></ul><ul><ul><li>Auto-Sharding – preparado para escalar horizontalmente ; </li></ul></ul><ul><ul><li>Insert/Update - Dados armazenados em memória , em segundo plano, para serem gravados em disco. </li></ul></ul><ul><li>Suporta tipos ricos </li></ul><ul><ul><li>datas, expressões regulares, códigos, dados binários </li></ul></ul><ul><ul><li>GridFS para armazenamento eficiente de arquivos binários grandes (BLOB) </li></ul></ul>
  3. 3. Quem Usa? http://www.mongodb.org/display/DOCS/Production+Deployments
  4. 4. Modelo de Dados <ul><li>Databases </li></ul><ul><li>Coleções </li></ul><ul><li>Documentos </li></ul><ul><li>BSON </li></ul>
  5. 5. Database <ul><li>Agrupamento físico de coleções </li></ul><ul><li>Arquivos de dados </li></ul><ul><ul><li>pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ... </li></ul></ul>
  6. 6. Coleções <ul><li>Agrupamento lógico de documentos </li></ul><ul><ul><li>Equivale às tabelas do RDBMs </li></ul></ul><ul><li>Schema-free </li></ul><ul><ul><li>pré-alocação: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ... </li></ul></ul><ul><li>Número ilimitado de documentos </li></ul>
  7. 7. Documentos <ul><li>Unidade de armazenamento </li></ul><ul><ul><li>equivale às linhas do RDBMs </li></ul></ul><ul><li>Todos devem ter um _id único </li></ul><ul><li>Tamanho máximo de 4MB </li></ul><ul><ul><li>para objetos maiores, use GridFS </li></ul></ul>
  8. 8. BSON <ul><li>Objetos no MongoDB </li></ul><ul><ul><li>Formato de armazenamento de dados de documentos </li></ul></ul><ul><li>&quot;Binary JSON&quot; </li></ul><ul><li>Permite representação de tipos ricos </li></ul><ul><ul><li>algumas formas de dados que não fazem parte do padrão JSON (Date, BinData, outros) </li></ul></ul>
  9. 9. Legal! Como começar? <ul><li>Baixando o MongoDB </li></ul><ul><li>Binários disponíveis em 32/64 bit para Linux, Windows, OS X e Solaris. </li></ul><ul><li>Versão 32 bit linux: </li></ul><ul><ul><li>http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgz </li></ul></ul><ul><li>Versão 64 bit linux: </li></ul><ul><ul><li>http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz </li></ul></ul>
  10. 10. E agora? Como Instalar? <ul><li>Extrair conteúdo do arquivo para uma pasta </li></ul><ul><ul><li>Exemplo: /mongodb </li></ul></ul><ul><li>Crie uma pasta para armazenar os dados </li></ul><ul><ul><li>Dê permissão de escrita ; </li></ul></ul><ul><ul><li>Exemplo: /data/db </li></ul></ul><ul><li>Execute o daemon </li></ul><ul><ul><li>Suapastamongodb/bin/mongod –dbpath suapasta/de/dados </li></ul></ul><ul><li>Execute o daemon </li></ul><ul><ul><li>Exemplo: suapastamongodb/bin/mongod run </li></ul></ul><ul><li>Via apt-get (linux – fedora, ubuntu) </li></ul><ul><ul><li>http://www.mongodb.org/display/DOCS/Building+for+Linux </li></ul></ul>
  11. 11. Pronto? É só isso?...
  12. 12. Instalando o Driver PHP <ul><li>Via pecl </li></ul><ul><ul><li>pecl install mongo </li></ul></ul><ul><li>Via GitHub: </li></ul><ul><ul><li>baixar source de http://github.com/mongodb/mongo-php-driver/tarball/master </li></ul></ul><ul><ul><li>Extrair conteúdo de tar.gz </li></ul></ul><ul><ul><li>Acessar pasta e digitar no console: </li></ul></ul><ul><ul><ul><li>$ phpize </li></ul></ul></ul><ul><ul><ul><li>$ ./configure </li></ul></ul></ul><ul><ul><ul><li>$ sudo make install </li></ul></ul></ul><ul><li>Altere o arquivo php.ini </li></ul><ul><ul><li>Adicione no fim do arquivo a linha extension=mongo.so </li></ul></ul><ul><li>Reiniciar apache </li></ul>
  13. 13. de quebra... <ul><li>Shell </li></ul><ul><ul><li>suapastamongodb/bin/mongo </li></ul></ul><ul><li>Interface web </li></ul><ul><ul><li>http://localhost:28017 </li></ul></ul><ul><li>Ferramentas </li></ul><ul><ul><li>importar suapastamongodb/bin/mongoimportjson </li></ul></ul><ul><ul><li>exportar suapastamongodb/bin/mongoexport </li></ul></ul><ul><ul><li>backup suapastamongodb/bin/mongodump </li></ul></ul><ul><ul><li>Restore suapastamongodb/bin/mongorestore </li></ul></ul>
  14. 14. Vamos ao que interessa? <ul><li>Abrir uma conexão </li></ul><ul><ul><li>$connection = new Mongo(); </li></ul></ul><ul><ul><li>/* host padrão localhost, porta padrão 27017 */ </li></ul></ul><ul><ul><li>$connection = new Mongo( &quot;example.com&quot; ); </li></ul></ul><ul><ul><li>/* host remoto example.com, port padrão */ </li></ul></ul><ul><ul><li>$connection = new Mongo( &quot;example.com:65432&quot; ); </li></ul></ul><ul><ul><li>/* host example.com, porta 65432 */ </li></ul></ul><ul><li>Autenticação </li></ul><ul><ul><li>É possível adicionar autenticação individual para cada database, inserindo usuário/senha na coleção &quot;admin&quot;. </li></ul></ul>
  15. 15. Metendo a mão na massa <ul><li>Selecionando um Banco de dados </li></ul><ul><ul><li>$dbMongo = $conexaoMongo->selectDB(‘nomedobanco’); </li></ul></ul><ul><ul><li>$dbMongo = $conexaoMongo->nomedobanco; (mágica? __set) </li></ul></ul><ul><li>Selecionando uma Coleção (tabela) </li></ul><ul><ul><li>$dbMongo = $dbMongo->selectCollection(‘nomedacolecao’); </li></ul></ul><ul><ul><li>$dbMongo = $dbMongo->nomedacolecao; (mágica? __set) </li></ul></ul>
  16. 16. Inserindo um documento <ul><li>Criando um Documento (linha) </li></ul><ul><ul><li>Em PHP, documentos são nativamente Arrays; </li></ul></ul><ul><ul><li>$doc = array(“nome” => “Jamerson Silva”, “email” => “jamersonweb@gmail.com”); </li></ul></ul><ul><li>Salvando um Documento em uma Coleção </li></ul><ul><ul><li>$colecaoMongo->save($doc); </li></ul></ul><ul><ul><li>Se seu documento ($doc) não tiver um &quot;_id&quot;, mongodb irá atribuir um MongoID automaticamente (12 bytes) </li></ul></ul><ul><li>Recuperando um Documento </li></ul><ul><ul><li>$documento = $colecaoMongo->findOne(); </li></ul></ul><ul><ul><li>Este método retorna um array (objeto Mongo/Documento) </li></ul></ul>
  17. 17. E os “wheres”? <ul><li>Selects </li></ul><ul><ul><li>$gt, $lt, $gte, $lte, $eq, $neq: >, <, >=, <=, ==, != </li></ul></ul><ul><ul><li>$in, $nin </li></ul></ul><ul><ul><li>$size, $exists </li></ul></ul><ul><ul><li>$where: apenas para expressões javascript </li></ul></ul><ul><ul><li>group() </li></ul></ul><ul><ul><li>limit() </li></ul></ul><ul><ul><li>skip () </li></ul></ul>
  18. 18. Tem mais? <ul><li>Updates </li></ul><ul><ul><li>$set </li></ul></ul><ul><ul><li>$unset </li></ul></ul><ul><ul><li>$push </li></ul></ul><ul><ul><li>$pull </li></ul></ul><ul><ul><li>$inc </li></ul></ul>
  19. 19. Ele faz o MySQL faz? <ul><li>MySQL </li></ul><ul><ul><li>MySQL = SELECT count(*) FROM table </li></ul></ul><ul><li>MongoDB </li></ul><ul><ul><li>MongoDB = $collection->count(); </li></ul></ul><ul><li>MySQL </li></ul><ul><ul><li>SELECT count(*) FROM table WHERE foo = 1 </li></ul></ul><ul><li>MongoDB </li></ul><ul><ul><li>$collection->find(array(&quot;foo&quot; => 1))->count(); </li></ul></ul>
  20. 20. Mongo ordena? <ul><li>MySQL </li></ul><ul><ul><li>SELECT * FROM table </li></ul></ul><ul><ul><li>WHERE field IN (5,6,7) and enable=1 and worth < 5 </li></ul></ul><ul><ul><li>ORDER BY timestamp DESC </li></ul></ul><ul><li>MongoDB </li></ul><ul><ul><li>$filter = array( </li></ul></ul><ul><ul><ul><li>’ field’ => array(’$in’ => array(5,6,7)), </li></ul></ul></ul><ul><ul><ul><li>’ enable’ => 1, </li></ul></ul></ul><ul><ul><ul><li>’ worth’ => array(’$lt’ => 5) </li></ul></ul></ul><ul><ul><li>); </li></ul></ul><ul><ul><li>$results = $collection->find($filter)->sort(array(’timestamp’ => -1)); </li></ul></ul>
  21. 21. Suporta limites - paginação <ul><li>MySQL </li></ul><ul><ul><li>SELECT * FROM table </li></ul></ul><ul><ul><li>WHERE field IN (5,6,7) and enable=1 and worth < 5 </li></ul></ul><ul><ul><li>ORDER BY timestamp DESC LIMIT 10, 20 </li></ul></ul><ul><li>MongoDB </li></ul><ul><ul><li>$filter = array( </li></ul></ul><ul><ul><ul><li>’ field’ => array(’$in’ => array(5,6,7)), </li></ul></ul></ul><ul><ul><ul><li>’ enable’ => 1, </li></ul></ul></ul><ul><ul><ul><li>’ worth’ => array(’$lt’ => 5) </li></ul></ul></ul><ul><ul><li>); </li></ul></ul><ul><ul><li>$cursor = $collection->find($filter); </li></ul></ul><ul><ul><li>$cursor->sort(array(’timestamp’ => -1))->skip(10)->limit(20); </li></ul></ul>
  22. 22. Indexando campos <ul><li>Criando um Índice </li></ul><ul><ul><li>$colecao->ensureIndex(array(“campo&quot; => 1)); </li></ul></ul><ul><ul><li>1 ascendente, -1 descendente </li></ul></ul><ul><li>Removendo um Índice </li></ul><ul><ul><li>$colecao->deleteIndex(“campo”); </li></ul></ul><ul><li>Índices Únicos </li></ul><ul><ul><li>$colecao->ensureIndex(array(“campo&quot; => 1), array(&quot;unique&quot; => 1)); </li></ul></ul>
  23. 23. Ao infinito e Além <ul><li>No momento, mongodb só pode em hosts dedicados / VPS </li></ul><ul><li>Desenvolvedores estão propondo suporte em hosts compartilhados </li></ul><ul><li>Documentação da extensão mongophp: </li></ul><ul><ul><li>www.php.net/mongodb </li></ul></ul><ul><li>Documentação oficial é bem completa: </li></ul><ul><ul><li>www.mongodb.com </li></ul></ul><ul><li>Lista de discussão com participação ativa e prestativa </li></ul><ul><ul><li>http://groups.google.com/group/mongodb-user </li></ul></ul>
  24. 24. Obrigado!

×