Base de dados NoSQL - Nuno Peralta - João Proença.
Transcript of Base de dados NoSQL - Nuno Peralta - João Proença.
MONGO DBBase de dados NoSQL
- 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 exigidapela 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:
Selecção:
MongoDB
MySQL
0.03112387657165
5 segundos
29.805167913437
segundos
MongoDB
MySQL
0.003483057022094
7 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.