Curso mongo db com php
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Curso mongo db com php

on

  • 4,379 views

 

Statistics

Views

Total Views
4,379
Views on SlideShare
4,369
Embed Views
10

Actions

Likes
7
Downloads
97
Comments
2

4 Embeds 10

http://www.techgig.com 6
http://us-w1.rockmelt.com 2
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Muito bom, esta de parabéns :)
    Are you sure you want to
    Your message goes here
    Processing…
  • otimo, só queria saber se tem mais métodos de busca usando o mongodb, principalmente fulltext search :\
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Curso mongo db com php Presentation Transcript

  • 1. MongoDB com PHPJean Carlo Nascimento aka Suissa
  • 2. Links nosqlbr.com.br jquerybrasil.org frontendbrasil.com.br javascriptbrasil.com.brcomoprogramarphp.com.br github.com/suissa about.me/suissa @osuissa
  • 3. Introdução
  • 4. NoSQLPor que usar?
  • 5. NoSQLOnde usar?
  • 6. NoSQLTipos de armazenamento?
  • 7. Key/Value StoreEsse é o tipo de banco de dados NoSQL mais simples o conceito dele é umachave e um valor para essa chave, mas ele é o que aguenta mais carga dedados. Esses tipos de bancos de dados, são o que tem a maior escalabilidade.Berkeley DBTokyo CabinetKyoto CabinetProject VoldermortMemcacheDBSimpleBDRedisRiak
  • 8. Wide Column StoreFortemente inspirados pelo BigTable do Google eles suportam várias linhas ecolunas, alem disso ele permite subcolunas. Alem do BigTable do googleoutros que usam essa tecnologia são:HBase(Apache)HiperTableCassandra(Apache)
  • 9. Document StoreBaseado em documentos XML ou JSON, podem ser localizados pelo seu idunico ou por qualquer registro que tenha no documento.CouchDB(Apache)MongoDBRavenDB
  • 10. Graph StoreCom uma complexibilidade maior esses bancos de dados guardam objetos enão registros como os outros tipos de NoSQL. A busca destes itens são feitaspela navegação destes objetos.TitanNeo4JInfoGridHyperGraphDB
  • 11. Column Oriented StoreEsses são bancos de dados relacionais, porem eles tem caracteristicas doNoSQL a principal diferença deles é que os dados são armazenados emcolunas, ajudando na escalabilidade.VerticaMonetDBLucidDBInfobrightIngres/Vectorwise
  • 12. Cases ReaisUm case real interessante é da Netflix que utiliza 3 bancos NoSQL: SimpleDB,HBase e Cassandra.http://techblog.netflix.com/2011/01/nosql-at-netflix.html
  • 13. Cases ReaisPara o MongoDB que será nosso banco de estudo temos as seguintesempresas utilizando-o em produção:● SAP● Craigslist● Shutterfly● foursquare● bit.ly● SourceForge● Disney
  • 14. Cases Reais● MTV Networks● GitHub● Justin.tv● CollegeHumor● SugarCRM● GrooveShark● CartolaFChttp://www.mongodb.org/display/DOCS/Use+Cases
  • 15. MongoDB● C++● JSON/BSON● Replica● Sharding● GridFS● Map/Reduce
  • 16. MongoDB - Instalação● Mac● Linux● Windows
  • 17. MongoDB - Terminologia SQL RDBMS MongoDB DATABASE DATABASE TABLE COLLECTION ROWS JSON QUERY DOCUMENT INDEX QUERY PARTITION INDEXSHARD
  • 18. MongoDB - Coleçãouse minha_databaseshow dbsdb.nome_da_collection.comando()Ex.:db.nome_da_collection.drop() //apaga coleçãodb.nome_da_collection.remove() //limpa coleção
  • 19. MongoDB - Inserçãoprof1 = {"nome": "Jean Carlo Nascimento", "apelido": "suissa", "idade": 27, "disciplinas":["MongoDB", "PHP"]};db.professores.insert(prof1)prof2 = {"nome": "Wesley William", "apelido": "wesley", "idade": 25, "disciplinas": ["PHP"]};db.professores.insert(prof2)// lembrando que o JSON valido necessita de aspas no nome do campo
  • 20. MongoDB - Consultadb.colecao.find({clausulas, campos})Ex.:select * from professores where apelido = "suissa"db.professores.find( { apelido : "suissa" } );select * from professores where nome LIKE "Jean*"db.professores.find( { nome : /Jean*/i } );db.professores.find( { nome : { $regex : Jean*} } );select nome, idade from professoresdb.professores.find(null, {nome:1, idade:1} )select nome, idade from professores where apelido = "suissa"db.professores.find( { apelido : "suissa" }, { nome:1, idade:1 } );
  • 21. MongoDB - Operadores$lt - menor que <$lte - menor ou igual que <=$gt - maior que >$gte - maior ou igual que >=
  • 22. MongoDB - Operadores$all - retorna o objeto onde todos os valores foram encontrados$exists - retorna o objeto caso uma chave existe$or - retorna o objeto caso a cláusula OU for verdadeira$and - retorna o objeto caso a cláusula E for verdadeira$type - retorna o objeto caso a chave seja do tipo especificado para conferir a lista dostipos e seus valores acesse: Lista dos tipos e seus valores
  • 23. MongoDB - Operadores$ne- retorna o objeto onde o valor não foi encontrado$in- retorna o objeto se o valor foi encontrado$nin- retorna o objeto se nenhum dos valores foi encontrado$nor- retorna o objeto caso a cláusula negação do OU for verdadeira$mod - retorna o objeto quando o módulo de um valor foi encontrado
  • 24. MongoDB - Countselect count(*) from professoresdb.professores.count()select count(*) from professores where idade > 30db.professores.count({idade:{$lt: 30}})
  • 25. MongoDB - Ordenaçãoselect * from professores order by nome ASCdb.professores.find().sort({nome:1})select * from professores order by idade DESCdb.professores.find().sort({idade:-1})
  • 26. MongoDB - Limitselect * from professores order by nome ASC limit 0,2db.professores.find().sort({nome:1}).limit(2)select * from professores limit 2 offset 10db.professores.find().limit(2).skip(10)
  • 27. MongoDB - Alteraçãoprofessor = db.professores.findOne( { name : "Jean" } );professor.idade = 28;db.professores.save(professor);//lembrando que o findOne retorna apenas um registro//pois o find mesmo retornando um registro retornará dentro de um cursor
  • 28. MongoDB - Exclusãodb.professores.remove(); // exclui tudodb.things.remove({nome: "Jean"}); // exclui todos os registro com nome = Jean
  • 29. MongoDB - ÍndicesPara criarmos um índice usamos o ensureIndex().db.professores.ensureIndex({ email:1 });Para pegarmos todos os índices da nossa collection professores usamos getIndexes().db.professores.getIndexes()Para pegar todos os índices da database usamos o find() em uma collection do sistema.db.system.indexes.find()
  • 30. Sharding - O que éSharding é a divisão da informação em partes iguais e divididas entre os nós.
  • 31. Sharding - Como funcionaO MondoDB ira dividir nossas informações através dos servidores de sharding setados emsua configuração, levando em conta a shard key.
  • 32. Sharding - ConfigurandoPrimeiramente precisamos criar os serviços de sharding. Esse exemplo é apenas didático eserá rodado em apenas um servidor.mkdir /data/db/a /data/db/bmongod --shardsvr --dbpath /data/db/a --port 10000 > /tmp/sharda.log &cat /tmp/sharda.logmongod --shardsvr --dbpath /data/db/b --port 10001 > /tmp/shardb.log &cat /tmp/shardb.logObs.: O cat serve apenas para verificarmos se o serviço subiu realmente e o & serve pararodar em background.
  • 33. Sharding - ConfigurandoVamos configurar os servidores.mkdir /data/db/configmongod --configsvr --dbpath /data/db/config --port 20000 > /tmp/configdb.log &cat /tmp/configdb.logmongos --configdb localhost:20000 > /tmp/mongos.log &cat /tmp/mongos.log
  • 34. Sharding - ConfigurandoPrecisamos dizer qual database, collection e nossa shard key.db.runCommand( { enablesharding : "test" } ){"ok" : 1}db.runCommand( { shardcollection : "test.people", key : {name : 1} } ){ "collectionsharded" : "test.people", "ok" : 1 }
  • 35. Sharding - PHP$mongo->selectDB(admin)->command(array(addshard=>hostname:port));
  • 36. MongoDB - GridFSGridFS é o sistema de arquivos do MongoDb e deve ser usado quando precisamosarmazenar arquivos maiores que 1Mb.mongofiles -d myfiles put my_music.mp3connected to: 127.0.0.1added file: { _id: ObjectId(4ce9ddcb45d74ecaa7f5a029), filename: "my_music.mp3", chunkSize: 262144, uploadDate: new Date(1290395084166), md5: "7872291d4e67ae8b8bf7aea489ab52c1", length: 1419631 }
  • 37. MongoDB - GridFS - inserindo $conn = new Mongo("127.0.0.1:27017"); // Connect $db = $conn->uniform_server; // Select DB $db->authenticate("user","password"); // Authenticate to MongoDB $grid = $db->getGridFS(); // Initialize GridFS $name = $_FILES[Filedata][name]; // Get Uploaded file name $type = $_FILES[Filedata][type]; // Try to get file extension $id = $grid->storeUpload(Filedata,$name); // Store uploaded file to GridFS
  • 38. MongoDB - GridFS - inserindo Mais exemplos em: http://blog.hardkap.com/index.php/posts/00069/MongoDB---GridFS
  • 39. MongoDB - GridFS - listando $conn = new Mongo("127.0.0.1:27017"); // Connect $db = $conn->uniform_server; // Select DB $db->authenticate("user","password"); // Authenticate to MongoDB $grid = $db->getGridFS(); // Initialize GridFS $cursor = $grid->find(); foreach ($cursor as $obj) { // iterate through the results echo Filename: .$obj->getFilename(). Size: .$obj->getSize().<br/>; } $conn->close(); // Disconnect from Server exit(0);
  • 40. MongoDB - DBRefDBRef é o esquema nativo de referencia interna entre os documentos. O driver do PHPexecutará a query no objeto desejada, trazendo os objetos referenciados via DBRefdiretamente.
  • 41. MongoDB - DBRefDBRefs possui os seguintes campos:$ref: nome da collection referenciada.$id: valor do _id do documento referenciado.$db: opcional e contém o nome da database onde o documento esta referenciado.*Apenas alguns drivers possuem suporte.Um documento DBRef pode ser exemplificado assim: { $ref : <value>, $id : <value>, $db : <value> } new DBRef ( customers , ObjectId("4ef4a61a90eec3e3c748263c") )
  • 42. MongoDB - DBRefInserir esses registros:db.fruit.save ({"_id" : "1" , "name" : "apple"});db.fruit.save ({"_id" : "2" , "name" : "grape"});db.fruit.save ({"_id" : "3" , "name" : "orange"});db.fruit.save ({"_id" : "4" , "name" : "pineapple"});db.basket.save ({"_id" : "1", "items" : [ {"quantity" : 5 , item : {"$ref" : "fruit", "$id" : "1"}}, {"quantity" : 10, item : {"$ref" : "fruit", "$id" : "3"}}]})db.basket.find ()
  • 43. MongoDB - Admin UIsSistemas para administração visual são uma mão na roda para qualquer Banco de dados,como o largamente usado phpmyadmin, para o Mysql. Não seria diferente para o MongoDB,existem diversos sistemas desses nas mais variadas linguagens, uma boa listagem seencontra em http://www.mongodb.org/display/DOCS/Admin+UIsAdminUIs para PHP:PhpMoAdmin - http://www.phpmoadmin.com/RockMongo - http://code.google.com/p/rock-php/wiki/rock_mongo
  • 44. MongoDB - PHPMoAdminhttp://www.phpmoadmin.com/
  • 45. MongoDB - RockMongohttp://rockmongo.com/Para se logar use login e senha: admin.
  • 46. MongoDB - RockMongohttp://rockmongo.com/Para se logar use login e senha: admin.
  • 47. MongoDB - FrameworksVários frameworks e CMS de PHP já possuem um biblioteca para trabalhar com o MongoDB,dentre eles posso listar:CakePHP:https://github.com/ichikaway/cakephp-mongodbCodeigniter:https://github.com/kyledye/MongoDB-CodeIgniter-DriverFatFreehttp://fatfree.sourceforge.net/page/data-mappersKohanahttps://github.com/Wouterrr/mangodbLithiumhttp://lithify.me/docs/lithium/data/source/MongoDb
  • 48. MongoDB - FrameworksSymfony 2 :http://code.google.com/p/mongodbloganalyzer/http://www.symfony-project.org/plugins/sfStoragePerformancePluginhttps://github.com/brtriver/sfMongoSessionStorageYiihttp://canni.github.com/YiiMongoDbSuite/Zend Frameworkhttps://github.com/coen-hyde/Shanty-Mongohttps://github.com/stunti/Stunti_Cache_Backend_Mongohttp://framework.zend.com/wiki/display/ZFPROP/Zend_Nosql_Mongo+-+Valentin+GolevDrupal:http://drupal.org/project/mongodb
  • 49. MongoDB - HostsExistem alguns serviços onde você pode hospedar bancos MongoDB:MongoHQ - https://mongohq.com/HostedMongo - http://hostedmongo.com/MongoLab - https://mongolab.com/home/MongoGrid - http://nodegrid.com/resources/mongogrid/
  • 50. Map/ReduceO map/reduce foi um framework desenvolvido pelo Google para iterar em grandes coleçõesde dados paralelamente. Baseado nas funções de map e reduce da programação funcional.A ideia é mapear seus dados através de suas coleções e depois reduzir esses dados emuma informação.db.collection.mapReduce(mapfunction,reducefunction[,options]);m = function() { emit(this.user_id, 1);r = function(k,vals) { return 1; }res = db.posts.mapReduce(m, r, { query : {tag:php} });db[res.result].find()
  • 51. Map/Reduce//map function() { emit( this.username, {count: 1, likes: this.likes} ); }//reduce function(key, values) { var result = {count: 0, likes: 0}; values.forEach(function(value) { result.count += value.count; result.likes += value.likes; }); return result; }
  • 52. Map/ReduceFazer o exemplo 2: http://www.mongodb.org/display/DOCS/MapReduce
  • 53. MongoDB - Códigos
  • 54. MongoDB - Conexão$conexao = new Mongo();$db = $conexao->$nome_banco;$collection = $db->$nome_collection;
  • 55. MongoDB - Exemplos PHPINSERT INTO USERS VALUES(1,1)$db->users->insert(array("a" => 1, "b" => 1));SELECT a,b FROM users$db->users->find(array(), array("a" => 1, "b" => 1));SELECT * FROM users WHERE age=33$db->users->find(array("age" => 33));SELECT a,b FROM users WHERE age=33$db->users->find(array("age" => 33), array("a" => 1, "b" => 1));SELECT a,b FROM users WHERE age=33$db->users->find(array("age" => 33), array("a" => 1, "b" => 1));SELECT a,b FROM users WHERE age=33 ORDER BY name$db->users->find(array("age" => 33), array("a" => 1, "b" => 1))->sort(array("name" => 1));
  • 56. MongoDB - Exemplos PHPSELECT * FROM users WHERE age>33$db->users->find(array("age" => array($gt => 33)));SELECT * FROM users WHERE age<33 <br />$db->users->find(array("age" => array($lt => 33)));SELECT * FROM users WHERE name LIKE "%Joe%"$db->users->find(array("name" => new MongoRegex("/Joe/")));SELECT * FROM users WHERE name LIKE "Joe%"$db->users->find(array("name" => new MongoRegex("/^Joe/")));SELECT * FROM users WHERE age>33 AND age<=40$db->users->find(array("age" => array($gt => 33, $lte => 40)));
  • 57. MongoDB - Exemplos PHPSELECT * FROM users ORDER BY name DESC$db->users->find()->sort(array("name" => -1));CREATE INDEX myindexname ON users(name)$db->users->ensureIndex(array("name" => 1));CREATE INDEX myindexname ON users(name,ts DESC)$db->users->ensureIndex(array("name" => 1, "ts" => -1));SELECT * FROM users WHERE a=1 and b=q$db->users->find(array("a" => 1, "b" => "q"));SELECT * FROM users LIMIT 10 SKIP 20$db->users->find()->limit(10)->skip(20);SELECT * FROM users WHERE a=1 or b=2$db->users->find(array($or => array(array("a" => 1), array("b" => 2))));
  • 58. MongoDB - Exemplos PHPSELECT * FROM users LIMIT 1$db->users->find()->limit(1);EXPLAIN SELECT * FROM users WHERE z=3$db->users->find(array("z" => 3))->explain()SELECT DISTINCT last_name FROM users$db->command(array("distinct" => "users", "key" => "last_name"));SELECT COUNT(*) FROM users$db->users->count();SELECT COUNT(*) FROM users where AGE > 30$db->users->find(array("age" => array($gt => 30)))->count();
  • 59. MongoDB - Exemplos PHPSELECT COUNT(AGE) from users$db->users->find(array("age" => array($exists => true)))->count();UPDATE users SET a=1 WHERE b=q$db->users->update(array("b" => "q"), array($set => array("a" => 1)));UPDATE users SET a=a+2 WHERE b=q$db->users->update(array("b" => "q"), array($inc => array("a" => 2)));DELETE FROM users WHERE z="abc"$db->users->remove(array("z" => "abc"));
  • 60. MongoDB - Tarefa