NoSQL

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Um banco de dados NoSQL (originalmente referindo-se a "não - SQL " ou "não-relacional") [1] fornece um mecanismo para armazenamento e recuperação de dados que é modelado em outros meios que não as relações tabulares usadas em bancos de dados relacionais . Esses bancos de dados existem desde o final da década de 1960, mas o nome "NoSQL" só foi cunhado no início do século 21, [2] desencadeado pelas necessidades das empresas Web 2.0 . [3] [4] Bancos de dados NoSQL são cada vez mais usados ​​em big data e aplicações web em tempo real . [5]Os sistemas NoSQL também são às vezes chamados de Não apenas SQL para enfatizar que eles podem suportar linguagens de consulta semelhantes a SQL ou sentar-se ao lado de bancos de dados SQL em arquiteturas persistentes poliglotas . [6] [7]

Motivações para esta abordagem incluem simplicidade de design , escala "horizontal" mais simples para clusters de máquinas (o que é um problema para bancos de dados relacionais), [2] controle mais fino sobre a disponibilidade e limitação da incompatibilidade de impedância objeto-relacional . [8] As estruturas de dados usadas pelos bancos de dados NoSQL (por exemplo , par chave-valor , coluna larga , gráfico ou documento) são diferentes daqueles usados ​​por padrão em bancos de dados relacionais, tornando algumas operações mais rápidas em NoSQL. A adequação particular de um determinado banco de dados NoSQL depende do problema que ele deve resolver. Às vezes, as estruturas de dados usadas pelos bancos de dados NoSQL também são vistas como "mais flexíveis" do que as tabelas de bancos de dados relacionais. [9]

Muitos armazenamentos NoSQL comprometem a consistência (no sentido do teorema CAP ) em favor da disponibilidade, tolerância de partição e velocidade. As barreiras para a maior adoção de armazenamentos NoSQL incluem o uso de linguagens de consulta de baixo nível (em vez de SQL, por exemplo), falta de capacidade de realizar junções ad hoc entre tabelas, falta de interfaces padronizadas e grandes investimentos anteriores em bancos de dados relacionais existentes . [10] A maioria das lojas NoSQL não possui transações ACID verdadeiras , embora alguns bancos de dados as tenham tornado centrais para seus projetos.

Em vez disso, a maioria dos bancos de dados NoSQL oferece um conceito de " consistência eventual ", no qual as alterações do banco de dados são propagadas para todos os nós "eventualmente" (normalmente em milissegundos), de modo que as consultas de dados podem não retornar dados atualizados imediatamente ou podem resultar na leitura de dados que são não precisa, um problema conhecido como leituras obsoletas. [11] Além disso, alguns sistemas NoSQL podem exibir gravações perdidas e outras formas de perda de dados . [12] Alguns sistemas NoSQL fornecem conceitos como registro de gravação antecipada para evitar perda de dados. [13] Para processamento de transações distribuídasem vários bancos de dados, a consistência de dados é um desafio ainda maior, difícil tanto para bancos de dados NoSQL quanto para bancos de dados relacionais. Bancos de dados relacionais "não permitem restrições de integridade referencial para abranger bancos de dados". [14] Poucos sistemas mantêm transações ACID e padrões X/Open XA para processamento distribuído de transações. [15] Bancos de dados relacionais interativos compartilham técnicas de análise de relés conformacionais como uma característica comum. [16] As limitações dentro do ambiente de interface são superadas usando protocolos de virtualização semântica, de modo que os serviços NoSQL são acessíveis à maioria dos sistemas operacionais. [17]

História

O termo NoSQL foi usado por Carlo Strozzi em 1998 para nomear seu banco de dados relacional de código aberto Strozzi NoSQL leve que não expunha a interface padrão Structured Query Language (SQL), mas ainda era relacional. [18] Seu RDBMS NoSQL é distinto do conceito geral de bancos de dados NoSQL por volta de 2009. Strozzi sugere que, porque o movimento NoSQL atual "se afasta completamente do modelo relacional, ele deveria, portanto, ter sido chamado mais apropriadamente de 'NoREL'", [19] referindo-se a "não relacional".

Johan Oskarsson, então desenvolvedor da Last.fm , reintroduziu o termo NoSQL no início de 2009, quando organizou um evento para discutir " bancos de dados distribuídos não relacionais de código aberto ". [20] O nome tentou rotular o surgimento de um número crescente de armazenamentos de dados não relacionais e distribuídos, incluindo clones de código aberto do Bigtable / MapReduce do Google e do DynamoDB da Amazon .

Tipos e exemplos

Existem várias maneiras de classificar bancos de dados NoSQL, com diferentes categorias e subcategorias, algumas das quais se sobrepõem. O que se segue é uma classificação não exaustiva por modelo de dados, com exemplos: [21]

Modelo Exemplos notáveis ​​deste tipo
Cache de valor-chave Apache Ignite , Couchbase , Coherence , eXtreme Scale , Hazelcast , Infinispan , Memcached , Redis , Velocity
Armazenamento de valor-chave Azure Cosmos DB , ArangoDB , Amazon DynamoDB , Aerospike , Couchbase
Armazenamento de valor-chave (eventualmente consistente) Azure Cosmos DB , banco de dados Oracle NoSQL , Riak , Voldemort
Armazenamento de valor-chave (ordenado) FoundationDB , InfinityDB , LMDB , MemcacheDB
Loja de tuplas Apache River , GigaSpaces , Taranol , TIBCO ActiveSpaces, OpenLink Virtuoso
Loja tripla AllegroGraph , MarkLogic , Ontotext-OWLIM , banco de dados Oracle NoSQL , Profium Sense , Virtuoso Universal Server
Banco de dados de objetos Objectivity/DB , Prest , ZopeDB , db4o , GemStone/S , InterSystems Caché , JADE , ObjectDatabase++ , ObjectDB , ObjectStore , ODABA , Realm , OpenLink Virtuoso , Versant Object Database , ZODB
Armazenamento de documentos Azure Cosmos DB , ArangoDB , BaseX , Clusterpoint , Couchbase , CouchDB , DocumentDB , eXist-db , IBM Domino , MarkLogic , MongoDB , RavenDB , Qizx , RethinkDB , Elasticsearch , OrientDB
Loja de colunas largas Azure Cosmos DB , Amazon DynamoDB , Bigtable , Cassandra , Google Cloud Datastore , HBase , Hypertable , ScyllaDB
Banco de dados multimodelo nativo ArangoDB , Azure Cosmos DB , OrientDB , MarkLogic , Apache Ignite , [22] [23] Couchbase , FoundationDB , MarkLogic , Oracle Database
Banco de dados gráfico Azure Cosmos DB , AllegroGraph , ArangoDB , InfiniteGraph , Apache Giraph , MarkLogic , Neo4J , OrientDB , Virtuoso
Banco de dados multivalor Banco de dados D3 Pick , Extensible Storage Engine (ESE/NT), InfinityDB , InterSystems Caché , banco de dados jBASE Pick , mvBase Rocket Software , mvEnterprise Rocket Software , Northgate Information Solutions Reality (o banco de dados original Pick/MV), OpenQM , OpenInsight da Revelation Software (Windows ) e Revelação Avançada (DOS), UniData Rocket U2 , UniVerse Rocket U2

Armazenamento de valor-chave

Os armazenamentos de chave-valor (KV) usam a matriz associativa (também chamada de mapa ou dicionário) como seu modelo de dados fundamental. Nesse modelo, os dados são representados como uma coleção de pares chave-valor, de modo que cada chave possível apareça no máximo uma vez na coleção. [24] [25]

O modelo de valor-chave é um dos modelos de dados não triviais mais simples, e modelos de dados mais ricos são frequentemente implementados como uma extensão dele. O modelo chave-valor pode ser estendido para um modelo discretamente ordenado que mantém as chaves em ordem lexicográfica . Essa extensão é computacionalmente poderosa, pois pode recuperar com eficiência intervalos de chaves seletivos . [26]

Os armazenamentos de valor-chave podem usar modelos de consistência que variam de consistência eventual a serialização . Alguns bancos de dados suportam a ordenação de chaves. Existem várias implementações de hardware, e alguns usuários armazenam dados na memória (RAM), enquanto outros em unidades de estado sólido (SSD) ou discos rotativos (também conhecidos como disco rígido (HDD)).

Armazenamento de documentos

O conceito central de um armazenamento de documentos é o de um "documento". Embora os detalhes dessa definição sejam diferentes entre os bancos de dados orientados a documentos, todos eles assumem que os documentos encapsulam e codificam dados (ou informações) em alguns formatos ou codificações padrão. As codificações em uso incluem XML , YAML e JSON e formas binárias como BSON . Os documentos são endereçados no banco de dados por meio de uma chave exclusiva que representa esse documento. Outra característica definidora de um banco de dados orientado a documentos é uma API ou linguagem de consulta para recuperar documentos com base em seu conteúdo.

Diferentes implementações oferecem diferentes maneiras de organizar e/ou agrupar documentos:

  • Coleções
  • Tag
  • Metadados não visíveis
  • Hierarquias de diretório

Comparadas às bases de dados relacionais, as coleções podem ser consideradas análogas a tabelas e documentos análogos a registros. Mas eles são diferentes: cada registro em uma tabela tem a mesma sequência de campos, enquanto os documentos de uma coleção podem ter campos completamente diferentes.

Gráfico

Bancos de dados gráficos são projetados para dados cujas relações são bem representadas como um gráfico consistindo de elementos conectados por um número finito de relações. Exemplos de dados incluem relações sociais, ligações de transportes públicos, mapas de estradas, topologias de rede, etc.

Bancos de dados gráficos e sua linguagem de consulta
Nome Línguas) Notas
AllegroGraph SPARQL loja tripla RDF
Amazon Netuno Gremlin , SPARQL Banco de dados gráfico
ArangoDB AQL, JavaScript , GraphQL Documento DBMS multimodelo , banco de dados Graph e armazenamento de valor-chave
Azure Cosmos DB Gremlin Banco de dados gráfico
DEX/Sparksee C++ , Java , C# , Python Banco de dados gráfico
FlockDB Escala Banco de dados gráfico
IBM DB2 SPARQL Armazenamento triplo RDF adicionado no DB2 10
Gráfico infinito Java Banco de dados gráfico
JanusGraph Java Banco de dados gráfico
MarkLogic Java , JavaScript , SPARQL , XQuery Banco de dados de documentos multimodelo e armazenamento triplo RDF
Neo4j Cifra Banco de dados gráfico
OpenLink Virtuoso C++ , C# , Java , SPARQL Middleware e mecanismo de banco de dados híbrido
Oráculo SPARQL 1.1 Armazém triplo RDF adicionado em 11g
OrienteDB Java , SQL Documento multimodelo e banco de dados gráfico
CORUJA Java , SPARQL 1.1 loja tripla RDF
Sentido Profium Java , SPARQL loja tripla RDF
RedisGraph Cifra Banco de dados gráfico
Sqrrl Enterprise Java Banco de dados gráfico
TerminusDB JavaScript, Python , registro de dados Armazenamento triplo RDF de código aberto e armazenamento de documentos [27]

Performance

O desempenho de bancos de dados NoSQL geralmente é avaliado usando a métrica de throughput , que é medida como operações/segundo. A avaliação de desempenho deve prestar atenção aos benchmarks corretos, como configurações de produção, parâmetros dos bancos de dados, volume de dados previsto e cargas de trabalho de usuários simultâneos.

Ben Scofield classificou diferentes categorias de bancos de dados NoSQL da seguinte forma: [28]

Modelo de dados atuação Escalabilidade Flexibilidade Complexidade Funcionalidade
Armazenamento de valor-chave Alto Alto Alto Nenhum variável (nenhuma)
Loja orientada a colunas Alto Alto moderado baixo mínimo
Loja orientada a documentos Alto variável (alta) Alto baixo variável (baixo)
Banco de dados gráfico variável variável Alto Alto teoria dos grafos
Banco de dados relacional variável variável baixo moderado álgebra relacional

As comparações de desempenho e escalabilidade são feitas com mais frequência usando o benchmark YCSB .

Manipulando dados relacionais

Como a maioria dos bancos de dados NoSQL não tem capacidade para junções em consultas, o esquema do banco de dados geralmente precisa ser projetado de forma diferente. Existem três técnicas principais para lidar com dados relacionais em um banco de dados NoSQL. (Consulte a tabela Suporte a associações e ACID para bancos de dados NoSQL que oferecem suporte a associações.)

Várias consultas

Em vez de recuperar todos os dados com uma consulta, é comum fazer várias consultas para obter os dados desejados. As consultas NoSQL geralmente são mais rápidas do que as consultas SQL tradicionais, portanto, o custo de consultas adicionais pode ser aceitável. Se for necessário um número excessivo de consultas, uma das outras duas abordagens é mais apropriada.

Cache, replicação e dados não normalizados

Em vez de armazenar apenas chaves estrangeiras, é comum armazenar valores estrangeiros reais junto com os dados do modelo. Por exemplo, cada comentário de blog pode incluir o nome de usuário além de um ID de usuário, fornecendo assim acesso fácil ao nome de usuário sem exigir outra pesquisa. No entanto, quando um nome de usuário for alterado, isso precisará ser alterado em muitos lugares no banco de dados. Assim, essa abordagem funciona melhor quando as leituras são muito mais comuns do que as gravações. [29]

Dados de aninhamento

Com bancos de dados de documentos como o MongoDB é comum colocar mais dados em um número menor de coleções. Por exemplo, em um aplicativo de blog, pode-se optar por armazenar comentários no documento de postagem do blog para que, com uma única recuperação, obtenha todos os comentários. Assim, nesta abordagem, um único documento contém todos os dados necessários para uma tarefa específica.

ACID e junte-se ao suporte

Um banco de dados é marcado como suportando propriedades ACID (Atomicidade, Consistência, Isolamento, Durabilidade) ou operações de junção se a documentação do banco de dados fizer essa afirmação. No entanto, isso não significa necessariamente que o recurso seja totalmente suportado de maneira semelhante à maioria dos bancos de dados SQL.

Base de dados ÁCIDO Associações
Aerospike Sim Não
Apache Ignite Sim Sim
ArangoDB Sim Sim
Amazon DynamoDB Sim Não
Base de sofá Sim Sim
CouchDB Sim Sim
IBM DB2 Sim Sim
InfinityDB Sim Não
LMDB Sim Não
MarkLogic Sim Sim [nº 1]
MongoDB Sim Sim [nº 2]
OrienteDB Sim Sim [nº 3]
  1. ^ As junções não se aplicam necessariamente a bancos de dados de documentos, mas o MarkLogic pode fazer junções usando semântica. [30]
  2. O MongoDB não suportava a junção de uma coleção fragmentada até a versão 5.1. [31]
  3. ^ O OrientDB pode resolver junções 1:1 usando links armazenando links diretos para registros estrangeiros. [32]

Veja também

Referências

  1. ^ http://nosql-database.org/ "DEFINIÇÃO NoSQL: Bancos de dados de próxima geração abordando principalmente alguns dos pontos: ser não relacional, distribuído, de código aberto e escalável horizontalmente".
  2. ^ a b Leavitt, Neal (2010). "Os bancos de dados NoSQL cumprirão sua promessa?" (PDF) . Computador IEEE . 43 (2): 12–14. doi : 10.1109/MC.2010.58 . S2CID  26876882 .
  3. ^ Mohan, C. (2013). A história se repete: aspectos sensíveis e não-senSQL do NoSQL Hoopla (PDF) . Proc. 16ª Conferência Internacional em estender a tecnologia de banco de dados.
  4. ^ "Amazon volta para o futuro com banco de dados 'NoSQL'" . COM CABO. 19 de janeiro de 2012 . Recuperado em 6 de março de 2017 .
  5. ^ "RDBMS dominam o mercado de banco de dados, mas os sistemas NoSQL estão alcançando" . DB-Engines. com. 21 de novembro de 2013 . Recuperado em 24 de novembro de 2013 .
  6. ^ "NoSQL (não apenas SQL)" . Banco de dados NoSQL, também chamado de Not Only SQL
  7. ^ Fowler, Martin . "NosqlDefinition" . muitos defensores do NoSQL dizem que isso não significa um "não" ao SQL, mas significa não apenas SQL
  8. ^ NoSQL Distilled: Um breve guia para o mundo emergente da persistência poliglota. Addison-Wesley Educational Publishers Inc, 2009, ISBN 978-0321826626 . 
  9. Vogels, Werner (18 de janeiro de 2012). "Amazon DynamoDB – um serviço de banco de dados NoSQL rápido e escalável projetado para aplicativos de escala na Internet" . Todas as coisas distribuídas . Recuperado em 6 de março de 2017 .
  10. ^ Grolinger, K.; Higashino, WA; Tiwari, A.; Capretz, MAM (2013). "Gerenciamento de dados em ambientes de nuvem: armazenamentos de dados NoSQL e NewSQL" (PDF) . Aira, Springer . Recuperado em 8 de janeiro de 2014 .
  11. ^ "Jepsen: leituras obsoletas do MongoDB" . Aphyr . com . 20 de abril de 2015 . Recuperado em 6 de março de 2017 .
  12. ^ "Análise de dados de grande volume na plataforma reativa Typesafe" . Slideshare.net . Recuperado em 6 de março de 2017 .
  13. ^ Fowler, Adam. "10 Equívocos NoSQL" . Dummies . com . Recuperado em 6 de março de 2017 .
  14. ^ "Não! ao SQL e não! ao NoSQL | Tantos manuais Oracle, tão pouco tempo" . Iggyfernandez.wordpress.com . Recuperado em 6 de março de 2017 .
  15. ^ Chapple, Mike. "O Modelo ACID" . about.com .
  16. ^ Fiore, S. (2011). Gerenciamento de banco de dados em grade e nuvem . Springer Science & Business Media. pág. 210.
  17. ^ Lawrence, Integração e virtualização de sistemas relacionais SQL e NoSQL, incluindo MySQL e MongoDB (2014). "Integração e virtualização de sistemas relacionais SQL e NoSQL, incluindo MySQL e MongoDB". Conferência Internacional sobre Ciência Computacional e Inteligência Computacional 1 .
  18. ^ Lith, Adão; Mattson, Jacob (2010). "Investigando soluções de armazenamento para grandes volumes de dados: uma comparação de soluções de armazenamento de dados escaláveis ​​e com bom desempenho para extração em tempo real e inserção de dados em lote" (PDF) . Gotemburgo: Departamento de Ciência da Computação e Engenharia, Chalmers University of Technology. pág. 70 . Recuperado em 12 de maio de 2011 . Carlo Strozzi usou pela primeira vez o termo NoSQL em 1998 como um nome para seu banco de dados relacional de código aberto que não oferecia uma interface SQL [...]
  19. ^ "Sistema de gerenciamento de banco de dados relacional NoSQL: Home Page" . Strozzi.it. 2 de outubro de 2007 . Recuperado em 29 de março de 2010 .
  20. ^ "NoSQL 2009" . Blog.sym-link.com. 12 de maio de 2009. Arquivado a partir do original em 16 de julho de 2011 . Recuperado em 29 de março de 2010 .
  21. ^ Strauch, Christof. "Bancos de dados NoSQL" (PDF) . págs. 23–24 . Recuperado em 27 de agosto de 2017 .
  22. ^ https://apacheignite.readme.io/docs Documentação do Ignite
  23. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-apache- acender
  24. ^ Sandy (14 de janeiro de 2011). "Armazenamentos de valores-chave e o movimento NoSQL" . Troca de pilha . Recuperado em 1 de janeiro de 2012 . Os armazenamentos de valor-chave permitem que o desenvolvedor de aplicativos armazene dados sem esquema. Esses dados geralmente consistem em uma string que representa a chave e os dados reais que são considerados o valor no relacionamento "chave-valor". Os dados em si geralmente são algum tipo de primitivo da linguagem de programação (uma string, um inteiro ou uma matriz) ou um objeto que está sendo empacotado pelas ligações da linguagem de programação ao armazenamento de valor-chave. Essa estrutura substitui a necessidade de um modelo de dados fixo e permite a formatação adequada.
  25. ^ Seeger, Marc (21 de setembro de 2009). "Key-Value Stores: uma visão prática" (PDF) . Marc Seeger . Recuperado em 1 de janeiro de 2012 . Os armazenamentos de valor-chave fornecem uma alternativa de alto desempenho para sistemas de banco de dados relacionais com relação ao armazenamento e acesso a dados. Este artigo fornece uma breve visão geral de alguns dos armazenamentos de valores-chave atualmente disponíveis e sua interface com a linguagem de programação Ruby.
  26. Katsov, Ilya (1 de março de 2012). "Técnicas de modelagem de dados NoSQL" . Ilia Katsov . Recuperado em 8 de maio de 2014 .
  27. ^ "TerminusX - Por que TerminusX" . terminusdb . com . Recuperado em 16 de dezembro de 2021 .
  28. Scofield, Ben (14 de janeiro de 2010). "NoSQL - Morte aos Bancos de Dados Relacionais(?)" . Recuperado em 26 de junho de 2014 .
  29. ^ "Mudando de relacional para NoSQL: como começar" . Couchbase . com . Recuperado em 11 de novembro de 2019 .
  30. ^ "Não consegue fazer joins com MarkLogic? É só uma questão de Semântica! - Redes Gerais" . Gennet . com . Arquivado a partir do original em 3 de março de 2017 . Recuperado em 6 de março de 2017 .
  31. ^ "Restrições de coleção fragmentada" . docs.mongodb . com . Recuperado em 24 de janeiro de 2020 .
  32. ^ "Referência SQL · Manual do OrientDB" . OrientDB . com . Recuperado em 24 de janeiro de 2020 .

Leitura adicional

Links externos