NoSQL mais simples o conceito dele é uma chave e um valor para essa chave, mas ele é o que aguenta mais carga de dados. Esses tipos de bancos de dados, são o que tem a maior escalabilidade. Berkeley DB Tokyo Cabinet Kyoto Cabinet Project Voldermort MemcacheDB SimpleBD Redis Riak
suportam várias linhas e colunas, alem disso ele permite subcolunas. Alem do BigTable do google outros que usam essa tecnologia são: HBase(Apache) HiperTable Cassandra(Apache)
guardam objetos e não registros como os outros tipos de NoSQL. A busca destes itens são feitas pela navegação destes objetos. Titan Neo4J InfoGrid HyperGraphDB
eles tem caracteristicas do NoSQL a principal diferença deles é que os dados são armazenados em colunas, ajudando na escalabilidade. Vertica MonetDB LucidDB Infobright Ingres/Vectorwise
"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
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 dos tipos e seus valores acesse: Lista dos tipos e seus valores
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
} ); 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
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()
Esse exemplo é apenas didático e será rodado em apenas um servidor. mkdir /data/db/a /data/db/b mongod --shardsvr --dbpath /data/db/a --port 10000 > /tmp/sharda.log & cat /tmp/sharda.log mongod --shardsvr --dbpath /data/db/b --port 10001 > /tmp/shardb.log & cat /tmp/shardb.log Obs.: O cat serve apenas para verificarmos se o serviço subiu realmente e o & serve para rodar em background.
MongoDb e deve ser usado quando precisamos armazenar arquivos maiores que 1Mb. mongofiles -d myfiles put my_music.mp3 connected to: 127.0.0.1 added file: { _id: ObjectId('4ce9ddcb45d74ecaa7f5a029'), filename: "my_music.mp3", chunkSize: 262144, uploadDate: new Date(1290395084166), md5: "7872291d4e67ae8b8bf7aea489ab52c1", length: 1419631 }
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") )
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 se encontra em http://www.mongodb.org/display/DOCS/Admin+UIs AdminUIs para PHP: PhpMoAdmin - http://www.phpmoadmin.com/ RockMongo - http://code.google.com/p/rock-php/wiki/rock_mongo
possuem um biblioteca para trabalhar com o MongoDB, dentre eles posso listar: CakePHP: https://github.com/ichikaway/cakephp-mongodb Codeigniter: https://github.com/kyledye/MongoDB-CodeIgniter-Driver FatFree http://fatfree.sourceforge.net/page/data-mappers Kohana https://github.com/Wouterrr/mangodb Lithium http://lithify.me/docs/lithium/data/source/MongoDb
iterar em grandes coleções de 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 em uma 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()
$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)));