| Orientado a Documentos (MongoDB, DynamoDB) |
| Orientado a Grafos (Neo4j) |
| Colunares (Cassandra, HBase) |
| Chave-Valor (Redis) |
| Time-Series (InfluxDB) |
| Multi-Modelo (ArangoDB, CosmosDB) |
| 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. |
| 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. |
Artigo => ID, Titulo, DataPublicacao, Conteudo, IDAutor, Status, URL
Autor => ID, Nome, Bio, Foto, Usuario, Senha
Categoria => ID, Nome, Descricao
ArtigoCategoria => ID, IDArtigo, IDCategoria
Tag => ID, IDArtigo, Nome
Comentario => ID, IDArtigo, Nome, Texto, Data
// 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"
}Helen Dias
FullStack Developer - Cotabox
Node | GraphQL | Vue | MongoDB