Banco de dados orientado a documentos

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 . [1]

Os 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" cresceu [2] 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 funcionar com documentos XML . Os bancos de dados gráficos são semelhantes, mas adicionam outra camada, o relacionamento , que permite vincular documentos para uma rápida passagem.

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 [ contraditória ] 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 adicional. Embora a diferença seja muitas vezes insignificante devido às ferramentas dos sistemas, [a] conceitualmente o armazenamento de documentos é projetado para oferecer uma experiência mais rica com técnicas modernas de programação.

Os bancos de dados de documentos [b] contrastam fortemente com o banco de dados relacional tradicional (RDB). Os bancos de dados relacionais geralmente armazenam dados em tabelas separadas definidas pelo programador, e um único objeto pode estar 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 do banco de dados, e cada objeto armazenado pode ser diferente dos outros. Isso elimina a necessidade de mapeamento objeto-relacional 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 orientado a documentos seja diferente nos detalhes desta 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 utilizam objetos possuem muitos tipos diferentes de objetos, e esses objetos geralmente possuem muitos campos opcionais. Cada objeto, mesmo aqueles da mesma classe, pode parecer muito diferente. Os armazenamentos de documentos são semelhantes porque 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:

{ 
"Nome" : "Bob" , "Endereço" : "5 Oak St." , "Hobby" : "navegar" }      
      
     

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> Casa </type> <street1> 123 Back St. </street1> <city> Meninos </city> <state> AR </state> <zip> 32225 </zip > <país > EUA </país> </address> </contact>  
  
    
    
  
    
      
    
    
    
    
  

Esses dois documentos compartilham alguns elementos estruturais entre si, mas cada um também possui elementos únicos. A estrutura, o texto e outros dados dentro do documento são geralmente chamados de 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 documento (registro) no exemplo acima. Esta abordagem permite que novas informações sejam adicionadas a alguns registros sem exigir que todos os outros registros do banco de dados compartilhem a mesma estrutura.

Os bancos de dados de documentos normalmente fornecem metadados adicionais para 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 são semelhantes a outros bancos de dados e, embora a terminologia não seja perfeitamente padronizada, a maioria dos profissionais irá reconhecê-las 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 exclusiva que representa esse documento. Essa chave é um identificador simples (ou ID), normalmente uma string , um URI ou um path . 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 simples consulta de 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 querer 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 varia muito de acordo com a implementação.

É aqui que o armazenamento de documentos difere mais do armazenamento de valores-chave. Em teoria, os valores em um armazenamento de valores-chave são opacos para o armazenamento, são essencialmente caixas pretas. Eles podem oferecer sistemas de busca semelhantes aos de um armazenamento de documentos, mas podem ter menos compreensão sobre a organização do conteúdo. Os armazenamentos de documentos utilizam os metadados do documento para classificar o conteúdo, permitindo-lhes, por exemplo, compreender 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 CEP 55555.

Edição

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

Organização

As implementações de bancos 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 obrigado a residir dentro de uma coleção ou pode ser autorizado a residir em múltiplas coleções
  • Tags e metadados não visíveis: dados adicionais fora do conteúdo do documento
  • Hierarquias de diretórios: grupos de documentos organizados em uma estrutura semelhante a uma árvore, normalmente baseada em caminho ou URI

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

Relacionamento com outros bancos de dados

Relacionamento com armazenamentos de valores-chave

Um banco de dados orientado a documentos é um armazenamento de chave-valor especializado , que por si só é outra categoria de banco de dados NoSQL. Em um armazenamento de valores-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 APIs mais avançadas de consulta, recuperação ou edição que normalmente são fornecidas por bancos de dados de documentos. Os armazenamentos modernos de valores-chave geralmente incluem recursos para trabalhar com metadados, confundindo os limites entre os armazenamentos de documentos.

Relacionamento com motores de busca

Alguns sistemas de mecanismo de pesquisa (também conhecidos como recuperação de informações ), como Apache Solr e Elasticsearch, fornecem operações básicas suficientes em documentos para se adequar à 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 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 da tabela tem o mesmo formato geral. O administrador também define os relacionamentos entre as tabelas e seleciona determinados campos que eles acreditam que serão mais comumente usados ​​para pesquisa e define índices neles. Um conceito chave no design relacional é que qualquer dado que possa ser repetido é normalmente colocado em sua própria tabela, e se essas instâncias estiverem relacionadas entre si, uma coluna é selecionada para agrupá-las, a chave estrangeira . Esse design é conhecido como normalização de banco de dados . [3]

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, tabelas seriam criadas para cada uma dessas linhas com campos predefinidos para cada bit de dados: a tabela CONTACT pode incluir as 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 identificação exclusivo atribuído ao contato quando ele foi criado. Para recriar o contato original, o mecanismo de banco de dados utiliza as chaves estrangeiras para procurar os itens relacionados no grupo de tabelas e reconstruir os dados originais.

Por outro lado, em um banco de dados orientado a documentos pode não haver uma estrutura interna que mapeie diretamente o 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 do contato, tudo em um único registro. Essa entrada é acessada por meio de sua chave, que permite ao banco de dados recuperar e devolver o documento à aplicação. Nenhum trabalho adicional é necessário para recuperar os dados relacionados; tudo isso é retornado em um único objeto.

Uma diferença fundamental entre os modelos relacionais e orientados a documentos é 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. Caso se deseje adicionar um COUNTRY_FLAG a um CONTACT, este campo poderá ser adicionado a novos documentos à medida que forem inseridos, isso não terá efeito no banco 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 ao banco de dados para procurar certos 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 de informações relacionadas, como "todas as entradas do catálogo de endereços" . Isto 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 à medida que 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 objeto-relacional . [4] Os armazenamentos de documentos mais próximos ou, em alguns casos, diretamente, mapeiam 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 , C# , Java , Scala , Python , Node.js , PHP , Go , Rust , Spring Framework Aerospike é um banco de dados NoSQL de valor-chave distribuído na memória e otimizado para flash que também oferece suporte a um modelo de armazenamento de documentos. [5] Sim [6]
AllegroGraph Francisco, Inc. Proprietário Java , Python , Common Lisp , Ruby , Scala , C# , 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 , confirmação de duas fases , replicação multimestre , Prolog e SPARQL . Sim [7]
ArangoDB ArangoDB Licença Apache C , C# , 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 chave/valor e gráficos com um núcleo de banco de dados e uma linguagem de consulta unificada AQL (ArangoDB Query Language). Sim [8]
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
cache Corporação InterSystems Proprietário Java , C# , Node.js Comumente usado em aplicações de saúde, negócios e governo. Sim
Nublante Nuvem, Inc. Proprietário Erlang , Java , Scala e C Serviço de banco de dados distribuído baseado no BigCouch , o fork de código aberto da empresa do projeto CouchDB apoiado pelo Apache . Usa modelo JSON. Sim
Banco de dados clusterpoint Clusterpoint Ltda. Proprietário com download gratuito JavaScript , SQL , PHP , C# , Java , Python , Node.js , C , C++ , Plataforma de banco de dados XML/JSON distribuída orientada a documentos com transações compatíveis com ACID ; 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 ; SIG ; Disponível como banco de dados pago conforme o uso como serviço ou como download de software gratuito no local. Sim
Servidor Couchbase Couchbase, Inc. Licença Apache C , C# , 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 [9]
CouchDB Fundação de Software Apache Licença Apache Qualquer linguagem que possa fazer solicitações HTTP JSON sobre REST/HTTP com controle de simultaneidade multiversão e propriedades ACID limitadas . Usa mapear e reduzir para visualizações e consultas. [10] Sim [11]
CrateIO CRATE Tecnologia 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 [12]
Cosmos DB Microsoft Proprietário C# , Java , Python , Node.js , JavaScript , SQL Oferta de plataforma como serviço, parte da plataforma Microsoft Azure . Baseia-se e amplia o Azure DocumentDB anterior. Sim
DocumentDB Amazon Web Services Serviço online proprietário vários, REST serviço de banco de dados totalmente gerenciado compatível com MongoDB v3.6 Sim
DynamoDB Amazon Web Services Proprietário Java , JavaScript , Node.js , Go , C# .NET , Perl , PHP , Python , Ruby , Rust , Haskell , Erlang , Django e Grails Serviço de banco de dados NoSQL proprietário totalmente gerenciado que oferece suporte a estruturas de dados de documentos e valores-chave Sim
Elasticsearch Shay Banon Licença dupla sob licença pública do lado do servidor e licença Elastic. Java JSON , mecanismo de pesquisa. Sim
existir existir LGPL XQuery , Java XML sobre REST/HTTP, WebDAV, pesquisa Lucene Fulltext, suporte a dados binários, validação, controle de versão, clustering, gatilhos, reescrita de URL, coleções, ACLS, atualização XQuery Sim [13]
Informix IBM Proprietário, com edições gratuitas [14] Vários (compatível com API MongoDB) RDBMS com JSON, replicação, fragmentação e conformidade com ACID. Sim
Coelho Fundação Apache Licença Apache Java Implementação do repositório de conteúdo Java ?
Notas HCL ( HCL Domino ) HCl Proprietário LotusScript , Java , linguagem de fórmula do Notes Multivalor Sim
MarkLogic MarkLogic Corporation Licença de desenvolvedor gratuita ou comercial [15] Java , JavaScript , Node.js , XQuery , SPARQL , XSLT , C++ Banco de dados distribuído orientado a documentos para triplos JSON, XML e RDF . Pesquisa de texto completo integrada , transações ACID , 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 clientes [16] C , C++ , C# , Java , Perl , PHP , Python , Go , Node.js , Ruby , Rust , [17] Scala [18] Banco de dados de documentos com replicação e sharding, armazenamento BSON (formato binário JSON ). Sim [19] [20]
Banco de dados MUMPS ? Proprietária e Affero GPL [21] CAXUMBA Comumente usado em aplicações 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ária C++ , C# , Java , SPARQL Híbrido de middleware e mecanismo de banco de dados Sim
OrientDB Oriente Tecnologias Licença Apache Java JSON sobre HTTP, suporte SQL, transações ACID Sim
Banco de dados Oracle NoSQL Oracle Corporation Apache e proprietário C, C#, Java, Python, node.js, Go Nada compartilhado, banco de dados escalonável horizontalmente com suporte para JSON sem esquema, tabelas de esquema fixas e pares 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 distribuído orientado a documentos com pesquisa de texto completo integrada ; suporte para JSON , texto e binários. Sim
Redis JSON Redis Licença de fonte disponível do Redis (RSAL) Pitão JSON com pesquisa de texto completo integrada . [22] Sim
RepensarDB ? Licença Apache [23] C++ , Python , JavaScript , Ruby , Java Banco de dados JSON distribuído orientado a documentos com replicação e fragmentação. Não
SAP HANA SEIVA Proprietário Linguagem semelhante a SQL Transação ACID suportada, somente 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 ?
SurrealDB SurrealDB Licença Business Source e Licença Apache após 4 anos Ferrugem gráfico multimodal , banco de dados relacional , documental e vetorial [24] Sim
Apache Solr Fundação de Software Apache Licença Apache [25] Java JSON , CSV , XML e alguns outros formatos. [26] Motor de busca. Sim [27]
TerminusDB TerminusDB Licença Apache Python , Node.js , JavaScript O sistema de banco de dados suporta armazenamento de documentos, bem como modelos de dados gráficos com um núcleo de banco de dados e uma linguagem de consulta unificada baseada em registro de dados WOQL (Web Object Query Language). [28] Sim

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

  1. ^ A ponto de os sistemas orientados a documentos e de valores-chave muitas vezes poderem ser trocados na operação.
  2. ^ E armazenamentos de valores-chave em geral.

Referências

  1. ^ Drake, Mark (9 de agosto de 2019). "Uma comparação de sistemas e modelos de gerenciamento de banco de dados NoSQL". Oceano Digital . Arquivado do original em 13 de agosto de 2019 . Recuperado em 23 de agosto de 2019 . Bancos de dados orientados a documentos, ou armazenamentos de documentos, são bancos de dados NoSQL que armazenam dados na forma de documentos. Os armazenamentos de documentos são um tipo de armazenamento de valores-chave: cada documento possui um identificador exclusivo — sua chave — e o próprio documento serve como valor.
  2. ^ "Classificação de DB-Engines por categoria de modelo de banco de dados" .
  3. ^ "Descrição dos fundamentos da normalização do banco de dados" . Microsoft . 14 de julho de 2023.
  4. ^ Wambler, Scott (22 de março de 2023). "A incompatibilidade de impedância objeto-relacional". Dados Ágeis .
  5. ^ "Documentação | Aerospike - Armazenamento de valores-chave" . docs.aerospike.com . Recuperado em 3 de maio de 2021 .
  6. ^ "Documentação | Aerospike" . docs.aerospike.com . Recuperado em 3 de maio de 2021 .
  7. ^ "Protocolo HTTP para AllegroGraph" .
  8. ^ "Banco de dados NoSQL multimodelo altamente disponível" . ArangoDB .
  9. ^ Documentação arquivada em 20/08/2012 na Wayback Machine . Sofá. Obtido em 18/09/2013.
  10. ^ "Apache CouchDB" . Apache Couchdb . Arquivado do original em 20 de outubro de 2011.
  11. ^ "HTTP_Document_API - Wiki do Couchdb" . Arquivado do original em 01/03/2013 . Recuperado em 14/10/2011 .
  12. ^ "Crate SQL HTTP Endpoint (cópia arquivada)" . Arquivado do original em 22/06/2015 . Recuperado em 22/06/2015 .
  13. ^ Banco de dados XML nativo de código aberto eXist-db. Existe-db.org. Obtido em 18/09/2013.
  14. ^ "Compare as edições do Informix Versão 12" . IBM . 22 de julho de 2016.
  15. ^ "Licenciamento MarkLogic" . Arquivado do original em 12/01/2012 . Recuperado em 28/12/2011 .
  16. ^ "Licenciamento MongoDB" .
  17. ^ "O novo driver de ferrugem do MongoDB" . MongoDB . Recuperado em 01/02/2018 .
  18. ^ "Referência de drivers suportados pela comunidade" .
  19. ^ "Interface HTTP - Ecossistema MongoDB" . Documentos do MongoDB .
  20. ^ "Documentação do ecossistema MongoDB" . Github . 27 de junho de 2019.
  21. ^ "Mecanismo de banco de dados TP de última geração GT.M" . 26 de setembro de 2023.
  22. ^ "RedisJSON - um tipo de dados JSON para Redis" .
  23. ^ "Transferindo direitos autorais para The Linux Foundation, relicenciando RethinkDB sob ASLv2" . github. com . Recuperado em 27 de janeiro de 2020 .
  24. ^ Perucas, Kyle (04/01/2023). "SurrealDB levanta US$ 6 milhões para sua oferta de banco de dados como serviço" . TechCrunch . Recuperado em 19/01/2024 .
  25. ^ "solr/LICENSE.txt em principal · apache/solr · GitHub" . github. com . Recuperado em 24 de dezembro de 2022 .
  26. ^ "Escritores de resposta :: Guia de referência do Apache Solr" . solr.apache.org . Recuperado em 24 de dezembro de 2022 .
  27. ^ "Recursos gerenciados :: Guia de referência do Apache Solr" . solr.apache.org . Recuperado em 24 de dezembro de 2022 .
  28. ^ "TerminusDB e banco de dados gráfico orientado a documentos na memória de código aberto" . terminusdb.com . Recuperado em 09/08/2023 .

Leitura adicional

  • Assaf Arkin. (2007, 20 de setembro). Consistência de leitura: bancos de dados idiotas, serviços inteligentes.


links externos

  • Classificação DB-Engines de armazenamentos de documentos por popularidade, atualizada mensalmente
Retrieved from "https://en.wikipedia.org/w/index.php?title=Document-oriented_database&oldid=1200439735"