Sei sulla pagina 1di 27

MongoDB

Lucas Amorim e Nelson Gomes


Agenda

• História
• Introdução
• Estrutura
• Consultas
• Características principais
• Demo
História
História

• 10gen, empresa fundada em 2007, tinha o objetivo de construir uma


arquitetura PaaS baseada em componentes de código-aberto;
• A 10Gen não encontrou uma plataforma de banco de dados
existente que atendesse as necessidades de sua arquitetura em
nuvem;
• Passou a desenvolver um banco de dados orientado a documento,
que chamado de MongoDB;
• A empresa notou o grande potencial do MongoDB, abandonando o
projeto de uma plataforma em nuvem;
História

• Em 2009, o MongoDB foi publicado como software de código-


aberto pela 10gen;
• Passou a oferecer suporte comercial e outros serviços;
• Em 2013, a 10gen mudou seu nome para MongoDB Inc., para
acompanhar seu produto;
• O nome MongoDB vem da palavra humongous (imenso em
Português), trazendo a ideia do processamento de grandes
quantidades de dados.
Introdução
Introdução

• O MongoDB é um banco de dados NoSQL que armazena dados na


forma de documentos BSON;
• BSON é uma representação binárias de documentos JSON, além de
conter mais tipos de dados que o JSON;
• Disponibiliza alta performance e escalabilidade, junto com
modelagem e gerenciamento de grandes quantidades de dados em
aplicações empresariais;
• Programado em C++, multiplataforma.
Estrutura
Estrutura geral

• O MongoDB consiste em conjunto de bancos de dados, cada banco


de dados é composto de coleções. Os documentos são armazenados
nas coleções.

MongoDB

Coleções

Documentos
Bancos de dados

• Bancos de dados no MongoBD são contêineres para coleções;


• Para alterar o banco de dados em uso, basta utilizar o comando
semelhante ao SQL:
use myDB

• Se um banco de dados não existe, o MongoDB o cria assim que a


primeira operação de escrita for realizada:

use myNewDB
db.myCollection1.insertOne( { x: 1 } )
Coleções

• O MongoDB armazena documentos em coleções. Coleções são


análogas às tabelas nos SGBDs relacionais;
• Assim como nos bancos de dados, caso uma coleção não exista, ela
será criada na primeira operação de escrita realizada;
• Podem ser definidos índices para as coleções, para aumentar a
eficiência;
• Diferentemente dos SGBDs relacionais, o MongoDB não exige que
documentos em uma coleção tenham todos o mesmo esquema;
• A partir do MongoDB 3.2, foi adicionado o suporte para regras de
validação de documentos, a validação de esquema.
Coleções – Índices

• Índices são usados para disponibilizar execução eficiente de


consultas no MongoDB;
• Sem índices, é necessário varrer cada documento em uma seleção,
para selecionar os documentos que atendem a consulta
especificada;
• Índices são estruturas de dados especiais que armazenam pequenas
porções dos dados da coleção de uma forma fácil de navegar;
• São fundamentalmente semelhantes aos índices em outros sistemas
de bancos de dados.
Coleções - Índices
Documentos - Estrutura

• Dados no MongoDB são armazenados como documentos BSON;


• A estrutura dos documentos é composta de pares campo-valor:
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

• O valor de um campo pode ser qualquer um dos tipos de dados


BSON, incluindo outros documentos, arrays e arrays de
documentos;
Documentos - Exemplo

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
Documentos - Campos

• Nomes para campos são sempre strings, e contém as seguintes


restrições:
• O nome de campo _id é reservado para uso como uma chave primária, o valor
deve ser único na coleção, imutável e pode ser de qualquer tipo, exceto array;
• Não podem conter o caractere null;
• Não podem iniciar com o cifrão ($).

• O MongoDB usa a notação por pontos para acessar elementos de


um array ou acessar campos de um documento incorporado;
• O acesso a documentos incorporados é idêntico ao usado no JSON.
Documentos – Acesso a um array
• Para especificar ou acessar um elemento de um array,
concatenamos o nome do array com o ponto e a posição desejada,
envolvendo com aspas:
"<array>.<index>"

• Por exemplo, para o seguinte documento:


{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}

• O terceiro elemento do array contribs pode ser acessado da


seguinte forma: "contribs.2"
Documentos - Limites

• O tamanho máximo de um documento BSON é de 16MB, e o limite


existe para garantir que um único documento não cause um uso
excessivo de memória RAM ou da rede;
• O MongoDB mantém a ordem dos campos nos documentos após
operações de escrita, exceto nos seguintes casos:
• O campo _id sempre é o primeiro campo em um documento;
• Atualizações que incluem alterações no nome de campos podem resultar em
uma reordenação dos campos do documento
Consultas
Consultas - Documentos

• Operações de consulta são realizadas usando o método


db.collection.find() no Mongo Shell;
• A seguir algumas consultas a documentos e equivalentes em SQL:

db.inventory.find( {} ) SELECT * FROM inventory


db.inventory.find( { status: "D" } ) SELECT * FROM inventory WHERE status = "D"

db.inventory.find( { status: { $in: [ "A", "D" ] } } ) SELECT * FROM inventory WHERE status in ("A", "D")

db.inventory.find( { status: "A", qty: { $lt: 30 } } ) SELECT * FROM inventory WHERE status = "A" AND qty < 30

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) SELECT * FROM inventory WHERE status = "A" OR qty < 30
Consultas - Arrays

• Correspondências exatas
• db.inventory.find( { tags: ["red", "blank"] } )
• db.inventory.find( { tags: { $all: ["red", "blank"] } } ) (em qualquer ordem)

• Consultar elemento de um array


• db.inventory.find( { tags: "red" } )
• db.inventory.find( { dim_cm: { $gt: 25 } } )
• db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } ) (múltiplas condições)

• Consultar elemento usando a posição


• db.inventory.find( { "dim_cm.1": { $gt: 25 } } )

• Consultar utilizando o tamanho do array


• db.inventory.find( { "tags": { $size: 3 } } )
Características principais
Replicação

• O MongoDB fornece alta disponibilidade através dos chamados


Replica Sets;
• Um Replica Set consiste em duas ou mais cópias dos dados. Cada
membro de um replica set pode ser a réplica primária ou secundária
a qualquer momento;
• Todas as escritas e leituras são feitas na réplica primária por
padrão;
• As réplicas secundárias mantém uma cópia dos dados da primária
usando a replicação integrada;
• Se uma réplica falha, o replica set automaticamente determina qual
secundária deve se tornar primária.
Armazenamento de arquivos

• O MongoDB pode ser usado como um sistema de arquivos,


chamado de GridFS, com balanceamento de carga e replicação em
múltiplas máquinas;
• Essa função, chamada de sistema de arquivos Grid, é incluída junto
dos drivers do MongoDB;
• O GridFS divide arquivos em partes (chunks) e guarda cada uma
dessas partes como um documento separado.
Transações

• O suporte para transações ACID multi-documento foi adicionado


ao MongoDB a partir da versão 4.0 em 2018.
Demo da Aplicação
MongoDB e Sedna
Obrigado

Potrebbero piacerti anche