João Pedro Codeco Proenca e Nuno Miguel Fonseca Peralta

Propaganda
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.
Download