Transcript Mongo db
Base de dados NoSQL
MONGO DB
- Nuno Peralta
- João Proença
O QUE É?
Sistema de Base de Dados;
Não usa SQL, orientada a documentos;
Usa o formato Binary JSON;
Schema-Less;
Escrito em C;
Suporta índices;
Auto-Sharding;
Insert / Update -> Dados armazenados em memória em
segundo plano, depois gravados em disco.
QUAL A NECESSIDADE DE NOSQL?
Cloud Computing;
Estrutura de DBs actual não
suporta a escalabilidade exigida
pela nuvem;
Muitos dados na WEB para serem armazenados,
necessidades de grandes armazenamentos;
Respostas mais rápidas pelas aplicações;
Diminuição do custo em DBA (DataBase Administrators)
e DBM (DataBase Managements).
OBJECTIVO
Ser diferente do modelo relacional, por isso NoREL?
NoSQL é mais comercial =P
Base de dados horizontais:
Baixo custo;
Poder de processamento;
Facilidade de manutenção.
MODELO DE DADOS
Bases de Dados
Colecções
Documentos
BSON
BASES DE DADOS
Ficheiro (.ns) com todos os namespaces
(nome das colecções);
Faz a junção física das colecções.
COLECÇÕES
Equivalente a tabelas numa base de dados
relacional;
Faz a junção lógica dos documentos.
DOCUMENTOS
Equivalente a linhas numa base de dados
relacional;
Onde os dados em si são armazenados;
Todos eles têm um ID único.
BSON
JSON em binário;
Formato de armazenamento de dados no MongoDB;
Guarda todos outros tipos de dados (string, int, etc).
BASE DE DADOS DE GRANDES DIMENSÕES
Tem limites nas colecções.
Aumentar limite -> Correr mais processos “mongod” e
particionar a DB entre processos.
Muitas empresas a usar MongoDB, mas grande parte não
o usa como DB principal.
Erros de memória e espaço, como aconteceu no nosso
trabalho.
TRABALHO - EXEMPLO
INTERFACE APLICAÇÕES EXTERNAS
Queries MongoDB bastante verbosas;
Chave-valor;
Aplicação deve verificar consistência/integridade.
VS MYSQL
Tabela de suporte:
VS MYSQL
VS MYSQL
VS MYSQL
VS MYSQL
{
}
VS MYSQL
VS MYSQL (TEMPOS)
Inserção:
MongoDB
MySQL
0.031123876571655
segundos
29.805167913437
segundos
Selecção:
MongoDB
MySQL
0.0034830570220947
segundos
6.8415830135345
segundos
ALGUNS EXEMPLOS PRÁTICOS
Fazer a ligação:
$connection = new Mongo();
Seleccionar uma base de dados:
$database = $connection->selectDB(‘nomedabase’);
Seleccionar uma colecção:
$collection = $database->selectCollection(‘nomedacoleccao’);
ALGUNS EXEMPLOS PRÁTICOS
Criar documento:
$doc = array(“nome” => “Nuno”, “email” => “[email protected]”);
Guardar documento na coleção:
$collection->save($doc);
SELECTS:
$gt, $lt, $gte, $lte, $eq, $neq, $size, $exists, $in, $nin, group(),
limit(), skip(), sort().
UPDATES:
$set, $unset, $push, $pull, $inc
$collection->update(<select>, <novo_obj>, <upsert>, <multi>);
ÍNDICES
Criar/garantir índice:
$collection->ensureIndex(array(“campo" => 1));
Indice único:
$collection->ensureIndex(array(“campo" => 1),
array("unique" => 1));
Remover um índice:
$collection->deleteIndex(“campo”);
CONCLUSÃO
MongoDB é mais rápido;
Nem sempre é a melhor escolha;
Usar quando queremos boa performance, os dados não
necessitem de consistência, e não seja preciso relacionar
tabelas;
Para aplicações que necessitam de realtime e históricos;
Caso contrário, MySQL.