NoSQL


Origem: Wikipédia, a enciclopédia livre.

NoSQL (originalmente se referindo a “no SQL” – “não SQL” – ou “non relational” – não relacional, posteriormente estendido para Not Only SQL – Não Somente SQL) é um termo genérico para uma classe definida de banco de dados que fornecem um mecanismo para armazenamento e recuperação de dados que são modelados de formas diferentes das relações tabulares usadas nos bancos de dados relacionais. Tais bancos de dados existem desde o final da década de 1960, mas não obtiveram o apelido de “NoSQL” até atingirem sua onda de popularidade no início do século vinte e um, desencadeada pelas necessidades das empresas de Web 2.0 como FacebookGoogle e Amazon.com. Bancos de dados NoSQL são cada vez mais usados em big data e aplicações web de tempo real. Sistemas NoSQL, às vezes, também são chamados de “Not only SQL” (“Não apenas SQL”) para enfatizar que eles podem suportar linguagens de consulta semelhantes à SQL.

Motivações para esta abordagem incluem: simplicidade de projeto, escalonamento “horizonal” mais simples para clusters de máquinas (o que é um problema para bancos de dados relacionais) e controle mais refinado sobre a disponibilidade. As estruturas de dados usadas pelos bancos de dados NoSQL (e.g., chave-valor, coluna larga, grafo ou documento) são diferentes daquelas usadas 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. Algumas vezes as estruturas de dados usadas por bancos de dados NoSQL também são vistas como “mais flexíveis” que tabelas de bancos de dados relacionais.

Muitos armazenamentos NoSQL comprometem a consistência (no sentido do teorema CAP) em favor da disponibilidade, tolerância a partição e velocidade. Barreiras para a grande adoção de armazenamentos NoSQL incluem o uso de linguagens de consulta de baixo nível (em vez de SQL, por exemplo, a 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.[1] A maioria dos armazenamentos NoSQL carece de transações ACID verdadeiras, embora alguns bancos de dados, como MarkLogicAerospike, FairCom c-treeACE, Google Spanner(embora tecnicamente um banco de dados NewSQL), Symas LMDB e OrientDB tornaram-as centrais em seus projetos.

Em vez disso, a maioria dos bancos de dados NoSQL oferece um conceito de “consistência eventual” em que as alterações do banco de dados são propagadas para todos os nós “eventualmente” (geralmente em milissegundos), de forma que as consultas de dados podem não retornar dados atualizados imediatamente ou podem resultar na leitura de dados não precisa, um problema conhecido como leitura obsoleta.[2] Além disso, alguns sistemas NoSQL podem exibir gravações perdidas e outras formas de perda de dados. Alguns sistemas NoSQL fornecem conceitos como o write-ahead logging para evitar a perda de dados.[3] Para o processamento de transações distribuídas em vários bancos de dados, a consistência de dados é um desafio ainda maior que é difícil tanto para bancos de dados relacionais quanto NoSQL. Até mesmo os bancos de dados relacionais atuais “não permitem restrições de integridade referencial para abranger os bancos de dados.”[4] Há poucos sistemas que mantêm transações ACID e padrões X/Open XA para processamento de transações distribuídas.

História do termo[editar | editar código-fonte]

O termo NoSQL foi primeiramente utilizado em 1998 como o nome de um banco de dados relacional de código aberto que não possuía uma interface SQL. Seu autor, Carlo Strozzi, alega que o movimento NoSQL “é completamente distinto do modelo relacional e portanto deveria ser mais apropriadamente chamado “NoREL” ou algo que produzisse o mesmo efeito”.[5]

O termo NoSQL foi re-introduzido no início de 2009 por um funcionário do Rackspace, Eric Evans, quando Johan Oskarsson da Last.fm queria organizar um evento para discutir bancos de dados open source distribuídos.[6] O nome — uma tentativa de descrever o surgimento de um número crescente de banco de dados não relacionais, que não tinham a preocupação de fornecer garantias ACID — faz referência ao esquema de atribuição de nomes dos bancos de dados relacionais mais populares do mercado: MySQLMS SQLPostgreSQL etc.

Outros termos equivalentes para esta categoria de bancos é NF²N1NF (non first normal form), nested relationaldimensionalmultivaluefree-formschemalessdocument database e MRNN (Modelo Relacional Não Normalizado).

Os bancos de dados que estão sob estes rótulos não podem exigir esquemas de tabela fixa e, geralmente, não suportam instruções e operações de junção SQL.

Tendências em arquiteturas de computadores, como a computação na nuvem e a necessidade crescente de prover serviços escaláveis, estão pressionando bancos de dados numa direção onde eles necessitam oferecer escalabilidade horizontal. Bancos de dados NoSQL armazenam os dados com técnicas que visam atender a esse requisito. Há alguns exemplos proeminentes de softwares de código fechado que atendem estes requisitos, sendo alguns deles o BigTable, do Google, IBM Cloudant e o DynamoDB, da Amazon. E alguns exemplos de software open-source como Apache Cassandra (originalmente desenvolvido para o Facebook), Apache HBaseLinkedIn‘s e vários outros.

É importante entender que o intuito não é eliminar bancos de dados relacionais, mas oferecer uma alternativa. Pois, durante muito tempo o modelo relacional foi usado como “bala de prata” para todos os problemas de persistência[parcial].

Arquitetura[editar | editar código-fonte]

Modernas bases de dados relacionais parecem ter uma limitação a transações com grandes volumes de dados e cargas de trabalhos típicas de operações modernas de grande carga, incluindo o dimensionamento de conjuntos de dados. Sistemas NoSQL frequentemente fornecem garantias de consistência fraca, como consistência eventual e operações restritas a itens individuais de dados, apesar de que uma faixa possa impor garantias ACID, adicionando uma camada de middleware complementares.[7]

Alguns defensores do NoSQL promovem interfaces muito simples, como arrays associativos ou pares chave-valor (Key-Value pairs). Outros sistemas como bancos de dados XML nativos provem o apoio ao padrão XQuery.[8]

Tipos e exemplos de bancos de dados NoSQL[editar | editar código-fonte]

Atualmente há várias abordagens para se classificar bancos de dados NoSQL, cada uma com categorias e subcategorias diferentes, sendo que algumas delas se sobrepõem. A seguir há uma classificação básica por modelo de dados, com exemplos:

Uma classificação mais detalhada é a seguinte, baseada em uma de Stephen Yen:[9][10]

Tipo Exemplos notáveis deste tipo
Cache de Chave-Valor Apache IgniteCoherenceeXtreme ScaleHazelcastInfinispanMemcachedVelocity
Armazenamento Chave-Valor ArangoDBAerospike
Armazenamento Chave-Valor (Eventualmente-Consistente) Oracle NoSQL DatabaseDynamoRiakVoldemort
Armazenamento Chave-Valor (Ordenado) FoundationDBInfinityDBLMDBMemcacheDB
Servidor de Estruturas de Dados Redis
Armazenamento de Tuplas Apache RiverGigaSpaces
Banco de dados de Objeto Objectivity/DBPerstZopeDB
Armazenamento de Documentos ArangoDBBaseXClusterpointCouchbaseCouchDBDocumentDBIBM DominoMarkLogicMongoDBQizxRethinkDB
Armazenamento de coluna ampla Amazon DynamoDBBigtableCassandraDruidHBaseHypertable

Bancos de dados correlacionais são independentes de modelo e, em vez de armazenamento baseado em linha ou coluna, usam armazenamento baseado em valor.

Armazenamento de Documento[editar | editar código-fonte]

O conceito central de um armazenamento de documento está na 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 XMLYAML e JSON bem como formas binárias como BSON. Documentos são endereçados no banco de dados por meio de uma chave única que representa aquele documento. Uma das outras características de definição de um banco de dados orientado a documentos é que além da consulta de chave realizada por uma armazenamento chave-valor, o banco de dados também oferece uma API ou linguagem de consulta que recupera os documentos baseado em seus conteúdos.

Implementações diferentes oferecem modos diferentes de organizar e/ou agrupar documentos:

  • Coleções
  • Etiquetas (tags)
  • Metadados não-visíveis
  • Hierarquias de diretório

Comparados com bancos de dados relacionais, por exemplo, coleções podem ser consideradas análogas a tabelas e documentos análogos a registros. Porem eles são diferentes: cada registro em uma tabela possui a mesma sequência de campos, enquanto que documentos em uma coleção podem ter campos que são completamente diferentes.

Referências

  1. Ir para cima Grolinger, K.; Higashino, W. A.; Tiwari, A.; Capretz, M. A. M. (2013). «Data management in cloud environments: NoSQL and NewSQL data stores» (PDF). Aira, Springer. Consultado em 8 de janeiro de 2014
  2. Ir para cima «Jepsen: MongoDB stale reads»Aphyr.com. 20 de abril de 2015. Consultado em 6 de março de 2017
  3. Ir para cima Fowler, Adam. «10 NoSQL Misconceptions»Dummies.com. Consultado em 6 de março de 2017
  4. Ir para cima «No! to SQL and No! to NoSQL | So Many Oracle Manuals, So Little Time»Iggyfernandez.wordpress.com. Consultado em 6 de março de 2017
  5. Ir para cima «NoSQL Relational Database Management System: Home Page». Strozzi.it. 2 de outubro de 2007. Consultado em 29 de março de 2010
  6. Ir para cima «NOSQL 2009». Blog.sym-link.com. 12 de maio de 2009. Consultado em 29 de março de 2010
  7. Ir para cima Zhou Wei, Guillaume Pierre and Chi-Hung Chi. Scalable Transactions for Web Applications in the Cloud. In proc. of the Euro-Par Conference, January 2009.
  8. Ir para cima «Open Source NoSQL Databases – DZone Java». dzone.com. Consultado em 8 de junho de 2016
  9. Ir para cima Yen, Stephen. «NoSQL is a Horseless Carriage» (PDF). NorthScale. Consultado em 26 de junho de 2014[ligação inativa]
  10. Ir para cima Strauch, Christof. «NoSQL Databases» (PDF). pp. 23–24. Consultado em 27 de agosto de 2017
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s