Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Você já seguiu os passos descritos para instalar o MongoDB e os drivers do MongoDB no PHP e está se perguntando, "E agora ?"
Bom, toda novidade tende a trazer muitas dúvidas e questões e, se tratando de NoSQL, não é diferente; Se mesmo após pesquisar bastante, você ainda tenha alguma das seguintes dúvidas:
"Não consigo imaginar um banco de dados, sem ser relacional"
"O que significa Schemaless ?"
"Pode, NoSQL algum dia, substituir o modelo relacional ?"
Se você continua se perguntando ou fazendo alguma afirmação semelhante às acima, então talvez, como desenvolvedor, eu consiga lhe mostrar o que significa utilizar um banco de dados como MongoDB.
Então, indo por partes:
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif "Não consigo imaginar um banco de dados, sem ser relacional"
Essa talvez, seja a reação mais natural de quem passou um grande período lidando com bancos de dados relacionais e a DSL SQL, porém, vamos pensar a nível de código:
Código 1:
<?php
$usuarios = array(
array(
'_id' => 1,
'nome' => 'João Batista Neto'
)
);
$emails = array(
array(
'_id' => 1,
'id_usuarios' => 1,
'email' => 'email1@exemplo.com'
), '_id' => 2,
'id_usuarios' => 1,
'email' => 'email2@exemplo.com'
)
);
No código 1 temos 2 matrizes, a primeira contém uma lista de usuários e na segunda uma lista de emails para cada usuário; Para relacionar a matriz de usuários com a matriz de emails, utilizamos uma chave na matriz de emails chamada id_usuarios.
Código 2:
<?php
$usuarios = array(
array(
'_id' => 1,
'nome' => 'João Batista Neto',
'emails' => array( 'email1@exemplo.com' , 'emails2@exemplo.com' )
)
);
Se você fosse representar, a nível de código, essa estrutura de lista de vários emails para um único usuário, você utilizaria o código 1 ou o código 2 ?
O que faz mais sentido para você ?
Bom, se você acha que o código 1 faz mais sentido para você, talvez você deva continuar com bancos de dados relacionais e a DSL SQL, porém, se a nível de código, você achar que faz mais sentido utilizar o código 2, seja bem vindo ao banco de dados não relacional e ao MongoDB.
MongoDB é um sistema de armazenamento orientado a coleções e documentos:
{
"nome" : "João Neto",
"idade" : 28,
"email" : "email@exemplo.com"
};
Acima, temos um documento simples, com apenas 3 propriedades: nome, idade e email, uma coleção é uma lista desse documento.
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif "O que significa Schemaless ?"
O grande ponto do MongoDB (e outros bancos de dados não relacional) é que ele é Schemaless.
"Schemaless ???"
Sim, ele não possui a rigidez pré-imposta por um schema, ou seja, eu posso ter uma nova propriedade para um novo documento a qualquer momento, por exemplo:
{
"usuario" : "João Batista Neto",
"email" : "neto@exemplo.com",
"idade" : 28,
"contatos" : [
{
"nome" : "Fulano",
"email": "fulano@exemplo.com",
"gtalk": "fulano@gmail.com"
},
{
"nome" : "Beltrano",
"email": "beltrano@test.com",
"msn" : "msn@hotmail.com"
},
]
};
Perceba que Fulano possui um GTalk e que o Beltrano possui um MSN; Se estivéssemos trabalhando com um banco de dados com schema teríamos, necessariamente, que prever essa situação, seja criando uma tabela de atributos ou uma nova coluna na tabela de contatos.
De fato, não tem nenhum sentido, termos um schema para o banco de dados, afinal, modelamos nossa aplicação e as regras já existem a nível de aplicação; Se você não conseguiu engolir isso, pense na sua aplicação como sendo o schema do banco de dados, você define as regras à nível de aplicação e guarda o que quiser no banco de dados afinal, não tem qualquer sentido ter uma redundância de regras.
"E essa estrutura desse código acima, o que é isso ? Parece Javascript !!"
Pois, não apenas parece Javascript; O código acima, utilizado para ilustrar a situação é Javascript Object Notation ou JSON.
De fato, o próprio terminal do Mongo é um interpretador Javascript:
[neto@localhost ~]$ /opt/mongodb/bin/mongo
MongoDB shell version: 1.6.1
connecting to: test
test = {
E, para você que gosta de Javascript, procure brincar um pouco no terminal do Mongo, coisas interessantes como o código abaixo lhe farão se sentir mais a vontade:
> fatorial = function( X ){
... if ( X <= 2 ) return X;
... else return X * fatorial( X - 1 );
... }
function (X) {
if (X <= 2) {
return X;
} else {
return X * fatorial(X - 1);
}
}
> fatorial( 5 );
120
Ou:
> Binet = function( X ){
... var sqrt5 = Math.sqrt( 5 );
...
... return ( 1 / sqrt5 ) * ( Math.pow( ( 1 + sqrt5 ) / 2 , X ) - Math.pow( ( 1 - sqrt5 ) / 2 , X ) );
... }
function (X) {
var sqrt5 = Math.sqrt(5);
return 1 / sqrt5 * (Math.pow((1 + sqrt5) / 2, X) - Math.pow((1 - sqrt5) / 2, X));
}
> Fibonacci = function( total ){
... var ret = [];
...
... for ( var i = 0 ; i < 10 ; ++i ) ret.push( Math.round( Binet( i ) ) );
...
... return ret;
... }
function (total) {
var ret = [];
for (var i = 0; i < 10; ++i) {
ret.push(Math.round(Binet(i)));
}
return ret;
}
> Fibonacci( 10 );
[ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ]
>
Legal, né ?!!
Carregando comentários...