Palestra MongoDB

  • View
    1.466

  • Download
    1

Embed Size (px)

DESCRIPTION

Palestra

Text of Palestra MongoDB

  • 1. {nome : Jamerson Silva , email : [email_address] }

2. Mongo?Que danado isso?

  • banco de dados orientado a documentos
    • Usa o formato BSON: Binary JSON. Tudo um documento ( die ORM );
    • Documentos aninhados, reduz a necessidade de JOINS ;
    • Schema-less-no precisa parar o site para adicionar uma nova coluna na tabela
  • Escrito em C, alta performance
    • Suportandices ;
    • Auto-Sharding preparado paraescalar horizontalmente ;
    • Insert/Update- Dadosarmazenados em memria , em segundo plano, para serem gravados em disco.
  • Suporta tipos ricos
    • datas, expresses regulares, cdigos, dados binrios
    • GridFSpara armazenamento eficiente de arquivos binrios grandes (BLOB)

3. Quem Usa? http://www.mongodb.org/display/DOCS/Production+Deployments 4. Modelo de Dados

  • Databases
  • Colees
  • Documentos
  • BSON

5. Database

  • Agrupamento fsico de colees
  • Arquivos de dados
    • pr-alocao: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...

6. Colees

  • Agrupamento lgico de documentos
    • Equivale s tabelas do RDBMs
  • Schema-free
    • pr-alocao: 64 MB -> 128MB -> 256MB -> 512 MB -> 1GB -> 2GB -> ...
  • Nmero ilimitado de documentos

7. Documentos

  • Unidade de armazenamento
    • equivale s linhas do RDBMs
  • Todos devem ter um _id nico
  • Tamanho mximo de 4MB
    • para objetos maiores, use GridFS

8. BSON

  • Objetos no MongoDB
    • Formato de armazenamento de dados de documentos
  • "Binary JSON"
  • Permite representao de tipos ricos
    • algumas formas de dados que no fazem parte do padro JSON (Date, BinData, outros)

9. Legal! Como comear?

  • Baixando o MongoDB
  • Binrios disponveis em 32/64 bit para Linux, Windows, OS X e Solaris.
  • Verso 32 bit linux:
    • http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgz
  • Verso 64 bit linux:
    • http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz

10. E agora? Como Instalar?

  • Extrair contedo do arquivo para uma pasta
    • Exemplo:/mongodb
  • Crie uma pasta para armazenar os dados
    • Dpermisso 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

11. Pronto? s isso?... 12. Instalando o Driver PHP

  • Via pecl
    • pecl install mongo
  • Via GitHub:
    • baixar source de http://github.com/mongodb/mongo-php-driver/tarball/master
    • Extrair contedo de tar.gz
    • Acessar pasta e digitar no console:
      • $ phpize
      • $ ./configure
      • $ sudo make install
  • Altere o arquivo php.ini
    • Adicione no fim do arquivo a linhaextension=mongo.so
  • Reiniciar apache

13. de quebra...

  • Shell
    • suapastamongodb/bin/mongo
  • Interface web
    • http://localhost:28017
  • Ferramentas
    • importarsuapastamongodb/bin/mongoimportjson
    • exportarsuapastamongodb/bin/mongoexport
    • backupsuapastamongodb/bin/mongodump
    • Restoresuapastamongodb/bin/mongorestore

14. Vamos ao que interessa?

  • Abrir uma conexo
    • $connection = new Mongo();
    • /* host padro localhost, porta padro 27017 */
    • $connection = new Mongo( "example.com" );
    • /* host remoto example.com, port padro */
    • $connection = new Mongo( "example.com:65432" );
    • /* host example.com, porta 65432 */
  • Autenticao
    • possvel adicionar autenticao individual para cada database, inserindo usurio/senha na coleo "admin".

15. Metendo a mo na massa

  • Selecionando um Banco de dados
    • $dbMongo = $conexaoMongo->selectDB(nomedobanco);
    • $dbMongo = $conexaoMongo->nomedobanco;(mgica? __set)
  • Selecionando uma Coleo(tabela)
    • $dbMongo = $dbMongo->selectCollection(nomedacolecao);
    • $dbMongo = $dbMongo->nomedacolecao;(mgica? __set)

16. Inserindo um documento

  • Criando um Documento(linha)
    • Em PHP, documentos so nativamente Arrays;
    • $doc = array(nome => Jamerson Silva, email => jamersonweb@gmail.com);
  • Salvando um Documento em uma Coleo
    • $colecaoMongo->save($doc);
    • Se seu documento ($doc) no tiver um "_id", mongodb ir atribuir um MongoID automaticamente (12 bytes)
  • Recuperando um Documento
    • $documento = $colecaoMongo->findOne();
    • Este mtodo retorna um array (objeto Mongo/Documento)

17. E os wheres?

  • Selects
    • $gt,$lt, $gte, $lte, $eq, $neq: >, =, count();
  • MySQL
    • SELECT count(*) FROM table WHERE foo = 1
  • MongoDB
    • $collection->find(array("foo" => 1))->count();

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

21. Suporta limites- paginao

  • MySQL
    • SELECT * 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);

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

23. Ao infinito e Alm

  • No momento, mongodb s pode em hosts dedicados / VPS
  • Desenvolvedores esto propondo suporte em hosts compartilhados
  • Documentao da extenso mongophp:
    • www.php.net/mongodb
  • Documentao oficial bem completa:
    • www.mongodb.com
  • Lista de discusso com participao ativa e prestativa
    • http://gro