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.