Bancos de dados não relacionais com

O que é NoSQL

Not OnlySQL (não apenas SQL)

Não exigem esquemas de tabelas fixas

Não suportam operações de junções (JOIN)

Distintos do modelo relacional

Não têm a preocupação de fornecer garantias ACID

Classificação de bancos de dados não relacionais

Orientado a Documentos (MongoDB, DynamoDB)
Orientado a Grafos (Neo4j)
Colunares (Cassandra, HBase)
Chave-Valor (Redis)
Time-Series (InfluxDB)
Multi-Modelo (ArangoDB, CosmosDB)

Banco de dados orientado a objetos

Dados armazenados em coleções de documentos

Cada documento é autossuficiente

Hierarquias complexas, porém fáceis de buscar

MongoDB vs Banco Relacional

Bancos relacionais MongoDB
Armazenam dados em tabelas, com linhas divididas em colunas. Armazena dados em coleções de documentos, com campos e subdocumentos.
Foco em garantir o ACID. Foco em garantir escalabilidade, alta disponibilidade e performance.
Uso de transações para garantir commits e rollbacks. Transações devem ser garantidas a nível de aplicação.

MongoDB vs Banco Relacional

Bancos relacionais MongoDB
Cada coluna de uma linha armazena apenas um dado. Os campos do documento podem armazenar múltiplos valores. 
Schema pré-definido e rígido. Schema variável conforme uso da aplicação.
Foco em não repetição de dados (DRY). Foco em acesso rápido de dados.

Principais características do MongoDB

Armazena os dados em formato JSON

Foi criado com Big Data em mente

É multiplataforma e relativamente leve

Schemaless

Quando devo usar MongoDB?

Escalonamento vertical e horizontal

Dados não estruturados

JSON

Catálogos de produtos e-commerce

Prós

Open source e multi plataforma

Pesquisas muito mais rápidas

Schema variável

Funciona muito bem com dados desestruturados 

Contras

Máximo de 16MB por documento

Menos flexível em pesquisas

Maior consumo de RAM

Nível máximo de profundidade de um documento é 100

Curva de aprendizagem

Aceitação no mercado

Modelagem de Dados com MongoDB

Talvez porque durante anos fomos instruídos a modelar nossos bancos de dados usando as Formas Normais.

Talvez porque durante anos fomos instruídos a modelar nossos bancos de dados pensando em não repetição de dados.

Modelagem de dados com MongoDB

Tenha a mente aberta!

Tente evitar relacionamento entre documentos

Documentos não são equivalentes a linhas de banco de dados

Modelagem de Blog (Relacional)

Artigo => ID, Titulo, DataPublicacao, Conteudo, IDAutor, Status, URL

Autor => ID, Nome, Bio, Foto, Usuario, Senha

Categoria => ID, Nome, Descricao

Modelagem de Blog (Relacional)

ArtigoCategoria => ID, IDArtigo, IDCategoria

Tag => ID, IDArtigo, Nome

Comentario => ID, IDArtigo, Nome, Texto, Data

Modelagem de Blog (Relacional)

Modelagem de Blog (Não Relacional)

// Collection Artigo
{
    _id: ObjectID("123abc"),
    titulo: "Blog Não Relacional",
    dataPublicacao: newDate("2018-09-15T14:00:00Z"),
    conteudo: "Conteúdo do Blog Não Relacional",
    autor: {
        _id: ObjectID("456def"),
        nome: "Autor"
    },
    status: 1,
    url: "http://url-exemplo.com.br/blog/1",
    categorias: [{
        _id: ObjectID("789ghi"),
        nome: "Categoria 1"
    }],
    tags: ["Tag1", "Tag2"],
    comentarios: [{
        _id: ObjectID("456mno"),
        nome: "Autor do comentário",
        texto: "Comentário",
        data: new Date("2018-09-15T14:00:00Z")
    }]
}
// Collection Autor
{
    _id: ObjectID("123abc"),
    nome: "Autor",
    bio: "Escritor",
    foto: "http://minha-url.jpg",
    usuario: "autor",
    senha: "sdkhfjywgewhjbsjy"
}
// Collection Categoria
{
    _id: ObjectID("123jkl"),
    nome: "Tag1",
    descricao: "Descrição"
}

Boas Práticas com MongoDB

Evite negações em queries

Atualize apenas os campos necessários

Armazene os dados de uma entidade em um único documento

Evite documentos muito grandes

Obrigada!

Helen Dias

FullStack Developer - Cotabox

Node | GraphQL | Vue | MongoDB

Bancos de dados não relacionais com MongoDB

By helendias

Bancos de dados não relacionais com MongoDB

  • 244