Banco de dados orientado a documentos - Document-oriented database

Um banco de dados orientado a documentos , ou armazenamento de documentos , é um programa de computador e sistema de armazenamento de dados projetado para armazenar, recuperar e gerenciar informações orientadas a documentos, também conhecidos como dados semiestruturados .

Os bancos de dados orientados a documentos são uma das principais categorias dos bancos de dados NoSQL , e a popularidade do termo "banco de dados orientado a documentos" cresceu com o uso do próprio termo NoSQL. Os bancos de dados XML são uma subclasse de bancos de dados orientados a documentos otimizados para trabalhar com documentos XML . Os bancos de dados de gráficos são semelhantes, mas adicionam outra camada, o relacionamento , que permite vincular documentos para uma passagem rápida.

Os bancos de dados orientados a documentos são inerentemente uma subclasse do armazenamento de valores-chave , outro conceito de banco de dados NoSQL. A diferença está na forma como os dados são processados; em um armazenamento de valor-chave, os dados são considerados inerentemente opacos para o banco de dados, enquanto um sistema orientado a documentos depende da estrutura interna do documento para extrair metadados que o mecanismo de banco de dados usa para otimização posterior. Embora a diferença seja freqüentemente insignificante devido às ferramentas nos sistemas, conceitualmente o armazenamento de documentos é projetado para oferecer uma experiência mais rica com técnicas de programação modernas.

Os bancos de dados de documentos contrastam fortemente com o banco de dados relacional tradicional (RDB). Os bancos de dados relacionais geralmente armazenam dados em tabelas separadas que são definidas pelo programador, e um único objeto pode ser espalhado por várias tabelas. Os bancos de dados de documentos armazenam todas as informações de um determinado objeto em uma única instância no banco de dados, e cada objeto armazenado pode ser diferente um do outro. Isso elimina a necessidade de mapeamento relacional de objeto ao carregar dados no banco de dados.

Documentos

O conceito central de um banco de dados orientado a documentos é a noção de documento . Embora cada implementação de banco de dados orientada a documentos difira nos detalhes dessa definição, em geral, todas elas assumem que os documentos encapsulam e codificam dados (ou informações) em algum formato ou codificação padrão. As codificações em uso incluem XML , YAML , JSON , bem como formas binárias como BSON .

Os documentos em um armazenamento de documentos são aproximadamente equivalentes ao conceito de programação de um objeto. Eles não são obrigados a aderir a um esquema padrão, nem terão todas as mesmas seções, slots, peças ou chaves. Geralmente, os programas que usam objetos têm muitos tipos diferentes de objetos, e esses objetos geralmente têm muitos campos opcionais. Cada objeto, mesmo aqueles da mesma classe, pode ter uma aparência muito diferente. Os armazenamentos de documentos são semelhantes no sentido de que permitem diferentes tipos de documentos em um único armazenamento, permitem que os campos dentro deles sejam opcionais e geralmente permitem que sejam codificados usando diferentes sistemas de codificação. Por exemplo, o seguinte é um documento codificado em JSON:

{
    "FirstName": "Bob", 
    "Address": "5 Oak St.", 
    "Hobby": "sailing"
}

Um segundo documento pode ser codificado em XML como:

  <contact>
    <firstname>Bob</firstname>
    <lastname>Smith</lastname>
    <phone type="Cell">(123) 555-0178</phone>
    <phone type="Work">(890) 555-0133</phone>
    <address>
      <type>Home</type>
      <street1>123 Back St.</street1>
      <city>Boys</city>
      <state>AR</state>
      <zip>32225</zip>
      <country>US</country>
    </address>
  </contact>

Esses dois documentos compartilham alguns elementos estruturais um com o outro, mas cada um também possui elementos exclusivos. A estrutura, o texto e outros dados dentro do documento são geralmente referidos como o conteúdo do documento e podem ser referenciados por meio de métodos de recuperação ou edição (veja abaixo). Ao contrário de um banco de dados relacional onde cada registro contém os mesmos campos, deixando os campos não utilizados vazios; não há 'campos' vazios em nenhum dos documentos (registro) do exemplo acima. Essa abordagem permite que novas informações sejam adicionadas a alguns registros sem exigir que todos os outros registros no banco de dados compartilhem a mesma estrutura.

Os bancos de dados de documentos geralmente fornecem metadados adicionais a serem associados e armazenados junto com o conteúdo do documento. Esses metadados podem estar relacionados a recursos que o armazenamento de dados fornece para organizar documentos, fornecer segurança ou outros recursos específicos de implementação.

Operações CRUD

As operações principais que um banco de dados orientado a documentos suporta para documentos são semelhantes a outros bancos de dados e, embora a terminologia não seja perfeitamente padronizada, a maioria dos profissionais os reconhecerá como CRUD :

  • Criação (ou inserção)
  • Recuperação (ou consulta, pesquisa, leitura ou localização)
  • Atualizar (ou editar)
  • Exclusão (ou remoção)

Chaves

Os documentos são endereçados no banco de dados por meio de uma chave única que representa aquele documento. Essa chave é um identificador (ou ID) simples , normalmente uma string , um URI ou um caminho . A chave pode ser usada para recuperar o documento do banco de dados. Normalmente, o banco de dados retém um índice na chave para acelerar a recuperação do documento e, em alguns casos, a chave é necessária para criar ou inserir o documento no banco de dados.

Recuperação

Outra característica definidora de um banco de dados orientado a documentos é que, além da consulta simples chave-para-documento que pode ser usada para recuperar um documento, o banco de dados oferece uma API ou linguagem de consulta que permite ao usuário recuperar documentos com base no conteúdo (ou metadados). Por exemplo, você pode desejar uma consulta que recupere todos os documentos com um determinado campo definido para um determinado valor. O conjunto de APIs de consulta ou recursos de linguagem de consulta disponíveis, bem como o desempenho esperado das consultas, varia significativamente de uma implementação para outra. Da mesma forma, o conjunto específico de opções de indexação e configuração disponíveis variam muito de acordo com a implementação.

É aqui que o armazenamento de documentos varia mais do armazenamento de valores-chave. Em teoria, os valores em um armazenamento de valor-chave são opacos para o armazenamento, eles são essencialmente caixas pretas. Eles podem oferecer sistemas de pesquisa semelhantes aos de um armazenamento de documentos, mas podem ter menos conhecimento sobre a organização do conteúdo. Os armazenamentos de documentos usam os metadados do documento para classificar o conteúdo, permitindo-lhes, por exemplo, entender que uma série de dígitos é um número de telefone e outra é um código postal. Isso permite que eles pesquisem esses tipos de dados, por exemplo, todos os números de telefone contendo 555, o que ignoraria o código postal 55555.

Editando

Os bancos de dados de documentos geralmente fornecem algum mecanismo para atualizar ou editar o conteúdo (ou metadados) de um documento, permitindo a substituição de todo o documento ou de partes estruturais individuais do documento.

Organização

Implementações de banco de dados de documentos oferecem uma variedade de maneiras de organizar documentos, incluindo noções de

  • Coleções: grupos de documentos, onde dependendo da implementação, um documento pode ser forçado a viver dentro de uma coleção ou pode ter permissão para viver em várias coleções
  • Tags e metadados não visíveis: dados adicionais fora do conteúdo do documento
  • Hierarquias de diretório: grupos de documentos organizados em uma estrutura semelhante a uma árvore, normalmente com base no caminho ou URI

Às vezes, essas noções organizacionais variam em quanto são lógicas versus físicas (por exemplo, no disco ou na memória), representações.

Relacionamento com outros bancos de dados

Relacionamento com lojas de valores-chave

Um banco de dados orientado a documentos é um armazenamento de valor-chave especializado , que por si só é outra categoria de banco de dados NoSQL. Em um armazenamento de valor-chave simples, o conteúdo do documento é opaco. Um banco de dados orientado a documentos fornece APIs ou uma linguagem de consulta / atualização que expõe a capacidade de consultar ou atualizar com base na estrutura interna do documento . Essa diferença pode ser pequena para usuários que não precisam de consultas, recuperação ou edição de APIs mais ricas que normalmente são fornecidas por bancos de dados de documentos. Os armazenamentos de valores-chave modernos geralmente incluem recursos para trabalhar com metadados, borrando as linhas entre os armazenamentos de documentos.

Relacionamento com os motores de busca

Alguns sistemas de mecanismo de pesquisa (também conhecidos como recuperação de informações ), como o Elasticsearch, fornecem operações centrais em documentos suficientes para se ajustar à definição de um banco de dados orientado a documentos.

Relacionamento com bancos de dados relacionais

Em um banco de dados relacional, os dados são primeiro categorizados em vários tipos predefinidos e as tabelas são criadas para conter entradas individuais, ou registros , de cada tipo. As tabelas definem os dados dentro dos campos de cada registro , o que significa que cada registro na tabela tem a mesma forma geral. O administrador também define os relacionamentos entre as tabelas e seleciona certos campos que eles acreditam que serão mais comumente usados ​​para pesquisar e definir índices neles. Um conceito-chave no design relacional é que quaisquer dados que possam ser repetidos são normalmente colocados em sua própria tabela e, se essas instâncias estiverem relacionadas entre si, uma coluna é selecionada para agrupá-los, a chave estrangeira . Esse design é conhecido como normalização do banco de dados .

Por exemplo, um aplicativo de catálogo de endereços geralmente precisará armazenar o nome do contato, uma imagem opcional, um ou mais números de telefone, um ou mais endereços de correspondência e um ou mais endereços de e-mail. Em um banco de dados relacional canônico, as tabelas seriam criadas para cada uma dessas linhas com campos predefinidos para cada bit de dados: a tabela CONTACT pode incluir colunas FIRST_NAME, LAST_NAME e IMAGE, enquanto a tabela PHONE_NUMBER pode incluir COUNTRY_CODE, AREA_CODE, PHONE_NUMBER e TYPE ( casa, trabalho, etc.). A tabela PHONE_NUMBER também contém uma coluna de chave estrangeira, "CONTACT_ID", que contém o número de ID exclusivo atribuído ao contato quando ele foi criado. Para recriar o contato original, o mecanismo de banco de dados usa as chaves estrangeiras para procurar os itens relacionados no grupo de tabelas e reconstruir os dados originais.

Em contraste, em um banco de dados orientado a documentos, pode não haver uma estrutura interna que mapeie diretamente no conceito de uma tabela, e os campos e relacionamentos geralmente não existem como conceitos predefinidos. Em vez disso, todos os dados de um objeto são colocados em um único documento e armazenados no banco de dados como uma única entrada. No exemplo do catálogo de endereços, o documento conteria o nome do contato, a imagem e quaisquer informações de contato, tudo em um único registro. Essa entrada é acessada por meio de sua chave, que permite que o banco de dados recupere e devolva o documento ao aplicativo. Nenhum trabalho adicional é necessário para recuperar os dados relacionados; tudo isso é retornado em um único objeto.

Uma diferença fundamental entre os modelos orientado a documento e relacionais é que os formatos de dados não são predefinidos no caso do documento. Na maioria dos casos, qualquer tipo de documento pode ser armazenado em qualquer banco de dados e esses documentos podem mudar de tipo e forma a qualquer momento. Se se deseja adicionar um COUNTRY_FLAG a um CONTACT, este campo pode ser adicionado a novos documentos à medida que são inseridos, isso não terá efeito na base de dados ou nos documentos existentes já armazenados. Para ajudar na recuperação de informações do banco de dados, os sistemas orientados a documentos geralmente permitem que o administrador forneça dicas para que o banco de dados procure determinados tipos de informações. Eles funcionam de maneira semelhante aos índices no caso relacional. A maioria também oferece a capacidade de adicionar metadados adicionais fora do conteúdo do próprio documento, por exemplo, marcando entradas como parte de um catálogo de endereços, o que permite ao programador recuperar tipos relacionados de informações, como "todas as entradas do catálogo de endereços" . Isso fornece funcionalidade semelhante a uma tabela, mas separa o conceito (categorias de dados) de sua implementação física (tabelas).

No modelo relacional normalizado clássico, os objetos no banco de dados são representados como linhas separadas de dados sem nenhuma estrutura inerente além daquela fornecida a eles conforme são recuperados. Isso leva a problemas ao tentar traduzir objetos de programação de e para suas linhas de banco de dados associadas, um problema conhecido como incompatibilidade de impedância relacional de objeto . Os armazenamentos de documentos mais próximos ou, em alguns casos, diretamente, mapeiam os objetos de programação para o armazenamento. Muitas vezes, eles são comercializados usando o termo NoSQL .

Implementações

Nome Editor Licença Idiomas suportados Notas API RESTful
Aerospike Aerospike AGPL e proprietário C , .NET , Java , Scala , Python , Node.js , PHP , Go , Rust , Spring Framework Aerospike é um banco de dados NoSQL de valor de chave distribuído na memória e otimizado para flash, que também oferece suporte a um modelo de armazenamento de documentos. sim
AllegroGraph Franz, Inc. Proprietário Java , Python , Common Lisp , Ruby , Scala , .NET , Perl A plataforma de banco de dados suporta armazenamento de documentos e modelos de dados gráficos em um único banco de dados. Suporta JSON , JSON-LD , RDF , pesquisa de texto completo, ACID , commit de duas fases , Replicação Multi-Master , Prolog e SPARQL . sim
ArangoDB ArangoDB Licença Apache C , .NET , Java , Python , Node.js , PHP , Scala , Go , Ruby , Elixir O sistema de banco de dados suporta armazenamento de documentos, bem como modelos de dados de gráfico e chave / valor com um núcleo de banco de dados e uma linguagem de consulta unificada AQL (ArangoDB Query Language). sim
BaseX Equipe BaseX Licença BSD Java , XQuery Suporte para formatos XML, JSON e binários; arquitetura baseada em cliente / servidor; pesquisas e atualizações simultâneas estruturais e de texto completo. sim
Caché InterSystems Corporation Proprietário Java , C # , Node.js Normalmente usado em aplicativos de saúde, negócios e governo. sim
Cloudant Cloudant, Inc. Proprietário Erlang , Java , Scala e C Serviço de banco de dados distribuído com base em BigCouch , a bifurcação de software livre da empresa do projeto CouchDB apoiado pelo Apache . Usa o modelo JSON. sim
Banco de dados Clusterpoint Clusterpoint Ltd. Proprietário com download grátis JavaScript , SQL , PHP , .NET , Java , Python , Node.js , C , C ++ , XML orientado a documentos distribuídos / plataforma de banco de dados JSON com ACID que cumprem as transações ; replicação e fragmentação de dados de alta disponibilidade ; mecanismo de pesquisa de texto completo integrado com classificação de relevância ; Linguagem de consulta JS / SQL ; GIS ; Disponível como banco de dados pay-per-use como um serviço ou como um download de software gratuito no local. sim
Servidor Couchbase Couchbase, Inc. Licença Apache C , .NET , Java , Python , Node.js , PHP , SQL , Go , Spring Framework , LINQ Banco de dados de documentos NoSQL distribuído, modelo JSON e linguagem de consulta baseada em SQL. sim
CouchDB Apache Software Foundation Licença Apache Qualquer linguagem que pode fazer solicitações HTTP JSON sobre REST / HTTP com controle de simultaneidade de várias versões e propriedades ACID limitadas . Usa mapear e reduzir para visualizações e consultas. sim
CrateIO CRATE Technology GmbH Licença Apache Java Use a sintaxe SQL familiar para consultas distribuídas em tempo real em um cluster. Baseado no ecossistema Lucene / Elasticsearch com suporte integrado para objetos binários (BLOBs). sim
Cosmos DB Microsoft Proprietário .NET , Java , Python , Node.js , JavaScript , SQL Oferta de plataforma como serviço, parte da plataforma Microsoft Azure . Baseia-se e estende o Azure DocumentDB anterior. sim
DocumentDB Amazon Web Services Serviço online proprietário vários, REST serviço de banco de dados compatível com MongoDB v3.6 totalmente gerenciado sim
Elasticsearch Shay Banon Licença dupla sob a Licença Pública do Lado do Servidor e a Licença Elástica. Java JSON , mecanismo de pesquisa. sim
existir existir LGPL XQuery , Java XML sobre REST / HTTP, WebDAV, Lucene Fulltext search, suporte a dados binários, validação, versionamento, clustering, triggers, reescrita de URL, coleções, ACLS, XQuery Update sim
Informix IBM Proprietário, com edições gratuitas Vários (compatível com MongoDB API) RDBMS com JSON, replicação, sharding e conformidade com ACID. sim
Jackrabbit Fundação Apache Licença Apache Java Implementação do Java Content Repository ?
Notas HCL ( HCL Domino ) HCL Proprietário LotusScript , Java , Notes Formula Language MultiValue sim
MarkLogic MarkLogic Corporation Licença de desenvolvedor grátis ou comercial Java , JavaScript , Node.js , XQuery , SPARQL , XSLT , C ++ Banco de dados orientado a documento distribuído para triplos JSON, XML e RDF . Built-in pesquisa de texto completo , ACID transações, alta disponibilidade e recuperação de desastres , segurança certificada. sim
MongoDB MongoDB, Inc Licença pública do lado do servidor para o DBMS, licença Apache 2 para os drivers do cliente C , C ++ , C # , Java , Perl , PHP , Python , Go , Node.js , Ruby , Rust , Scala Banco de dados de documentos com replicação e fragmentação, armazenamento BSON (formato binário JSON ). sim
Banco de dados MUMPS ? Proprietário e Affero GPL CAXUMBA Normalmente usado em aplicativos de saúde. ?
ObjectDatabase ++ Ekky Software Proprietário C ++ , C # , TScript Estruturas de classes binárias nativas C ++ ?
OpenLink Virtuoso Software OpenLink GPLv2 [1] e proprietário C ++ , C # , Java , SPARQL Híbrido de middleware e mecanismo de banco de dados sim
OrientDB Orient Technologies Licença Apache Java JSON sobre HTTP, suporte a SQL, transações ACID sim
Banco de dados Oracle NoSQL Oracle Corp Apache e proprietário C, C #, Java, Python, node.js, Go Nada compartilhado, banco de dados horizontalmente escalável com suporte para JSON sem esquema, tabelas de esquema fixo e pares de chave / valor. Também oferece suporte a transações ACID. sim
Qizx Qualcomm Proprietário REST , Java , XQuery , XSLT , C , C ++ , Python Banco de dados XML orientado a documentos distribuído com pesquisa de texto completo integrada ; suporte para JSON , texto e binários. sim
RethinkDB ? Licença Apache C ++ , Python , JavaScript , Ruby , Java Banco de dados JSON orientado a documentos distribuído com replicação e fragmentação. Não
SAP HANA SEIVA Proprietário Linguagem semelhante a SQL Transação ACID compatível, apenas JSON sim
Sedna sedna.org Licença Apache C ++ , XQuery Banco de dados XML Não
SimpleDB Amazon Web Services Serviço online proprietário Erlang ?
Solr Apache Licença Apache Java Motor de pesquisa sim
TokuMX Tokutek GNU Affero General Public License C ++ , C # , Go MongoDB com indexação de árvore fractal ?

Implementações de banco de dados XML

A maioria dos bancos de dados XML são bancos de dados orientados a documentos.

Veja também

Notas

Referências

Leitura adicional


links externos