Banco de dados orientado a documentos
# Banco de dados orientado a documentos

Um banco de dados orientado a documentos, ou armazenamento por documentos (document store), é um modelo de banco de dados projetado para armazenar, recuperar e gerenciar informações orientadas a documentos, também conhecidas como dados semi-estruturados. Bancos de dados orientados a documentos são uma das principais categorias de bancos de dados NoSQL e a popularidade do termo "banco de dados orientado a documentos" tem crescido com o uso do termo NoSQL propriamente dito. Bancos de dados XML são uma subclasse de bancos de dados orientados a documentos que são otimizados para trabalhar com documentos XML. Bancos de dados de grafos são similares, mas adicionam outra camada, o relacionamento, que permite que eles liguem documentos para percorrimento rápido.
Bancos de dados orientados a documentos são inerentemente uma subclasse do armazenamento chave-valor, outro conceito de banco de dados NoSQL. A diferença está na maneira que os dados são processados, pois em um armazenamento chave-valor, os dados são considerados como sendo inerentemente opacos ao banco de dados, enquanto que um sistema orientado a documentos depende da estrutura interna no documento afim de extrair metadados que o mecanismo do banco de dados utiliza para otimização adicional. Apesar da diferença ser geralmente discutível, devido às ferramentas nos sistemas, conceitualmente o armazenamento por documentos é projetado para oferecer uma experiência mais rica com técnicas de programação modernas.
Bancos de dados de documentos contrastam fortemente com o banco de dados relacional (RDB). Bancos de dados relacionais geralmente armazenam dados em tabelas separadas que são definidas pelo programador, e um único objeto pode estar espalhado através de várias tabelas. Bancos de dados de documento armazenam todas as informações para um determinado objeto em uma única instância no banco de dados e cada objeto armazenado pode ser diferente de todos os outros. Isto torna o mapeamento de objetos no banco de dados uma tarefa simples, normalmente eliminando qualquer coisa similar a um mapeamento objeto-relacional. Isto faz com que os armazenamentos por documentos sejam atrativos para programação de aplicações web, que estão sujeitas a mudanças contínuas no local, e onde velocidade de desenvolvimento é uma questão importante.

## Documentos

O conceito central de um banco de dados orientado a documentos é a noção de um documento. Apesar de cada implementação de banco de dados orientado a documentos diferir-se nos detalhes desta definição, em geral, todas elas admitem que os documentos encapsulam e codificam dados (ou informação) em alguns formatos ou codificações padrões. Codificações em uso incluem XML, YAML, JSON e BSON, bem como formas binárias como PDF e documentos do Microsof Office (MS Word, Excel e assim por diante).
Documentos em um armazenamento de documentos são fortemente equivalentes ao conceito de objeto em programação. Eles não são obrigados a aderir a um esquema padrão, nem precisarão ter todas as mesmas seções, aberturas, partes ou chaves. Geralmente, programas que usam objetos possuem muitos tipos de objetos diferentes e estes objetos frequentemente possuem muitos campos opcionais. Cada objeto, mesmo aqueles da mesma classe, podem parecer muito diferentes. Armazenamentos de documentos são similares no sentido de que eles permitem tipos de documentos diferentes em um único armazenamento, permitem que os campos dentro deles sejam opcionais e geralmente permitem que eles sejam codificados usando sistemas diferentes de codificação. Por exemplo, a seguir é definido um documento, codificado em JSON:
Um segundo documento pode ser codificado em XML como:
Estes dois documentos compartilham os mesmos elementos estruturais com o outro, mas cada um também possui elementos únicos. A estrutura e texto, e outros dados dentro do documento, são normalmente denominadas como o conteúdo do documento e podem ser referenciados por meio de métodos de recuperação ou edição. Diferente de um banco de dados relacional onde cada registro contem os mesmos campos, deixando campos não usados em branco, não há 'campos' em branco em qualquer documento (registro) no exemplo acima. Esta abordagem permite que novas informações sejam adicionadas a alguns registros sem necessitar que todos os outros registros no banco de dados compartilhem a mesma estrutura.
Bancos de dados de documentos normalmente fornecem metadados adicionais para serem associados e armazenados junto com o conteúdo do documento. Estes metadados podem estar relacionados a recursos que o armazenamento de dados fornece para a organização de documentos, fornecimento de segurança ou outros recursos específicos de implementação.