Os bancos de dados de documentos oferecem uma variedade de vantagens, incluindo:
Devido a essas vantagens, os bancos de dados de documentos são bancos de dados de uso geral que podem ser utilizados em uma variedade de casos de uso e indústrias.
Bancos de dados de documentos são considerados não relacionais (ou NoSQL) databases. Instead of storing data in fixed rows and columns, document databases use flexible documents. Document databases are the most popular alternative to tabular, relational databases. Saiba mais sobre bancos de dados NoSQL.
Um documento é um registro em um banco de dados de documentos. Um documento normalmente armazena informações sobre um objeto e seus metadados relacionados.
Os documentos armazenam dados em pares de campo e valor. Os valores podem ser de vários tipos e estruturas, incluindo strings, números, datas, arrays ou objetos. Os documentos podem ser armazenados em formatos como JSON, BSON e XML.
Abaixo está um documento JSON que armazena informações sobre um usuário chamado Tom.
{
"_id": 1,
"first_name": "Tom",
"email": "tom@example.com",
}
"celular": "765-555-5555",
"gostos": [
"moda",
"spas",
"compras"
],
"empresas": [
{
"nome": "Entretenimento 1080",
"parceiro": "Jean",
"situação": "Falido",
"data_fundação": {
"$data": "2012-05-19T04:00:00Z"
}
},
{
"nome": "Swag para Adolescentes",
"data_fundação": {
"$data": "2012-11-01T04:00:00Z"
}
}
]
}
Uma coleção é um grupo de documentos. As coleções geralmente armazenam documentos com conteúdos semelhantes.
Nem todos os documentos em uma coleção precisam ter os mesmos campos, pois os bancos de dados de documentos possuem esquemas flexíveis. Observe que alguns bancos de dados de documentos oferecem validação de esquema, permitindo que o esquema seja opcionalmente bloqueado quando necessário.
Continuando com o exemplo acima, o documento com informações sobre Tom pode ser armazenado em uma coleção chamada users
. Mais documentos podem ser adicionados à coleção users
para armazenar informações sobre outros usuários. Por exemplo, o documento abaixo que armazena informações sobre Donna pode ser adicionado à coleção users
.
{
"_id": 2,
"first_name": "Donna",
"email": "donna@example.com",
"cônjuge": "Joe",
"gostos": [ "spas",
"compras",
"live tweeting"
],
"empresas": [
{
"name": "Castle Realty",
"status": "Próspera",
"date_founded": {
"$date": "2013-11-21T04:00:00Z"
}
}
]
}
Observe que o documento de Donna não contém os mesmos campos que o documento de Tom. A coleção users
está utilizando um esquema flexível para armazenar as informações que existem para cada usuário.
Os bancos de dados de documentos geralmente possuem uma API ou linguagem de query que permite aos desenvolvedores realizar operações CRUD (criar, ler, atualizar e excluir).
Os bancos de dados de documentos têm os seguintes recursos principais:
Três fatores principais diferenciam bancos de dados de documentos de bancos de dados relacionais:
A intuitividade do modelo de dados: Os documentos são mapeados para os objetos no código, tornando-os muito mais naturais para trabalhar. Não há necessidade de decompor dados em tabelas, executar junções caras ou integrar uma camada separada de Mapeamento Objeto-Relacional (ORM). Dados que são acessados juntos são armazenados juntos, então os desenvolvedores têm menos código para escrever e os usuários finais obtêm maior desempenho.
A ubiquidade dos documentos JSON: JSON tornou-se um padrão estabelecido para a troca e armazenamento de dados. Os documentos JSON são leves, independentes de linguagem e fáceis de ler por humanos. Documentos são um superconjunto de todos os outros modelos de dados, permitindo que os desenvolvedores estruturem os dados conforme as necessidades de suas aplicações — objetos ricos, pares chave-valor, tabelas, dados geoespaciais e de série temporal, ou os nós e arestas de um grafo.
A flexibilidade do esquema: O esquema de um documento é dinâmico e autodescritivo, de modo que os desenvolvedores não precisam predefini-lo no banco de dados. Os campos podem variar de um documento para outro. Os desenvolvedores podem modificar a estrutura a qualquer momento, evitando migrações de esquema que causem interrupções. Alguns bancos de dados de documentos oferecem validação de esquema para que você possa opcionalmente forçar regras que governam as estruturas dos documentos.
Saiba mais sobre bancos de dados NoSQL versus bancos de dados relacionais.
Os desenvolvedores geralmente consideram que trabalhar com dados em documentos é mais fácil e intuitivo do que trabalhar com dados em tabelas. Os documentos são mapeados para estruturas de dados na maioria das linguagens de programação populares. Os desenvolvedores não precisam se preocupar em dividir manualmente dados relacionados em várias tabelas ao armazená-los ou em uni-los novamente ao recuperá-los. Eles também não precisam usar um ORM para manipular os dados por eles. Em vez disso, eles podem facilmente trabalhar com os dados diretamente em seus aplicativos.
Vamos dar outra olhada em um documento para um usuário chamado Tom.
Usuários
{
"_id": 1,
"first_name": "Tom",
"email": "tom@example.com",
}
"celular": "765-555-5555",
"gostos": [
"moda",
"spas",
"compras"
],
"empresas": [
{
"nome": "Entretenimento 1080",
"parceiro": "Jean",
"situação": "Falido",
"data_fundação": {
"$data": "2012-05-19T04:00:00Z"
}
},
{
"nome": "Swag para Adolescentes",
"data_fundação": {
"$data": "2012-11-01T04:00:00Z"
}
}
]
}
Todas as informações sobre Tom estão armazenadas em um único documento.
Agora vamos considerar como podemos armazenar essas mesmas informações em um relational database. Iniciaremos criando uma tabela que armazena as informações básicas do usuário.
Usuários
ID | first_name | célula | |
---|---|---|---|
1 | Tom | tom@example.com | 765-555-5555 |
Um usuário pode gostar de muitas coisas (o que significa que há um relacionamento um-para-muitos entre um usuário e as curtidas), então criaremos uma nova tabela chamada "Likes" para armazenar as curtidas de um usuário. A tabela Likes terá uma chave estrangeira que referencia a coluna ID na tabela Usuários.
Curtidas
ID | user_id | semelhante a |
---|---|---|
10 | 1 | maneira |
11 | 1 | spas |
12 | 1 | compras |
Da mesma forma, um usuário pode executar muitos negócios, então criaremos uma nova tabela chamada "Negócios" para armazenar informações de negócios. A tabela Empresas
terá uma chave estrangeira que referencia a coluna ID
na tabela Usuários.
Empresas
ID | user_id | Nome | parceiro | Status | data_de_fundação |
---|---|---|---|---|---|
20 | 1 | Porta 1080 de Entretenimento | Jean | Falência | 2011-05-19 |
21 | 1 | Swag para pré-adolescentes | Zero | Zero | 2012-11-01 |
Neste exemplo simples, observamos que os dados de um usuário podem ser armazenados em um único documento em um banco de dados de documentos ou em três tabelas em um banco de dados relacional. Quando um developer deseja recuperar ou atualizar informações sobre um usuário no banco de dados de documentos, ele pode gravar uma query sem joins. A interação com o banco de dados é direta, e modelar os dados no banco de dados é intuitivo.
Visite Mapeamento de Termos e Conceitos do SQL para o MongoDB para aprender mais.
O modelo de documento é um superconjunto de outros modelos de dados, incluindo pares chave-valor, relacionais, objetos, grafos e geoespaciais.
O modelo de documento é um superconjunto de outros modelos de dados
Devido às suas ricas capacidades de modelagem de dados, os bancos de dados de documentos são bancos de dados de propósito geral que podem armazenar dados para uma variedade de casos de uso.
Com os bancos de dados de documentos capacitando os desenvolvedores a construir mais rapidamente, a maioria dos bancos de dados relacionais adicionou suporte para JSON. No entanto, a simples adição de um tipo de dados JSON não oferece os benefícios de um banco de dados com suporte nativo para JSON. Por quê? Porque a abordagem relacional reduz a produtividade do desenvolvedor, em vez de aumentá-la. Essas são algumas das questões que os desenvolvedores precisam enfrentar.
Trabalhar com documentos implica o uso de funções SQL personalizadas e específicas de fornecedores, que não são familiares para a maioria dos desenvolvedores e não funcionam com suas ferramentas SQL preferidas. Adicione drivers JDBC/ODBC de baixo nível e ORMs e você enfrentará processos de desenvolvimento complexos, resultando em baixa produtividade.
Apresentar dados JSON como strings e números simples, em vez dos tipos de dados ricos suportados por bancos de dados de documentos nativos, como o MongoDB, torna a computação, comparação e ordenação de dados complexas e propensas a erros.
Os bancos de dados relacionais oferecem pouco para validar o esquema dos documentos, então você não tem como aplicar controles de qualidade aos seus dados JSON. E você ainda precisa definir um esquema para seus dados tabulares regulares, com toda a sobrecarga adicional envolvida quando precisar alterar suas tabelas à medida que os recursos do seu aplicativo evoluem.
A maioria dos bancos de dados relacionais não mantém estatísticas sobre dados JSON, o que impede o planejador de consultas de otimizar consultas em documentos e você de ajustar suas consultas.
Os bancos de dados relacionais tradicionais não oferecem uma maneira de particionar (fragmentar) o banco de dados em várias instâncias para escalar à medida que as cargas de trabalho aumentam. Em vez disso, você precisa implementar a fragmentação na camada de aplicação ou contar com sistemas de escalonamento caros.
Os bancos de dados de documentos possuem muitas vantagens:
Esses pontos fortes fazem dos bancos de dados de documentos uma excelente escolha para um banco de dados de propósito geral.
Uma fraqueza comum que as pessoas mencionam sobre bancos de dados de documentos é que muitos não suportam transações ACID multidocumentos. Estimamos que 80% a 90% dos aplicativos que utilizam o modelo de documento não precisarão usar transações multidocumento.
Observe que alguns bancos de dados de documentos, como o MongoDB, suportam transações ACID multidocumento.
Visite O que são transações ACID? para aprender mais sobre como o document model geralmente elimina a necessidade de transações multidocumento e como o MongoDB suporta transações nos raros casos em que são necessárias.
Bancos de dados de documentos são bancos de dados de uso geral que servem a uma variedade de casos de uso para aplicativos transacionais e analíticos:
Visite Orientação de Caso de Uso: Onde Usar o MongoDB para aprender mais sobre cada um dos aplicativos listados acima.
Os bancos de dados de documentos utilizam o modelo de dados de documento intuitivo e flexível para armazenar dados. Os bancos de dados de documentos são bancos de dados de propósito geral que podem ser usados para uma variedade de casos de uso em diversos setores.
Inicie com bancos de dados de documentos criando um banco de dados no MongoDB Atlas, a plataforma de dados para desenvolvedores do MongoDB. O Atlas possui uma camada grátis permanente que você pode usar para experimentar e explorar o modelo de documento.
No MongoDB, o primeiro campo em cada documento é nomeado _id
. O campo _id
serve como um identificador exclusivo para o documento. Consulte a documentação oficial do MongoDB para obter mais informações.
Observe que cada sistema de gerenciamento de banco de dados de documentos possui seus próprios requisitos de campo.
Sim, o MongoDB possui duas opções gratuitas: