NoSQL — O que são? Onde habitam? Do que se alimentam?

Marcio Luis Rodrigues de Paula Lima
PermaLink Univesp
Published in
11 min readFeb 10, 2020

Fala galera tudo bem com vocês? Espero que sim.

Continuando com nossas conversas sobre banco de dados, vamos falar hoje um pouco sobre bancos de dados chamados de NoSQL, você já ouviu falar disto? Pois é, vamos conhecer um pouco mais sobre eles.

O que é NoSQL?

Vamos começar sobre o NoSQL, o que vem a ser esse conceito ?

Pesquisando pela net, encontramos muitas definições, algumas bem confusas que passam a ideia de um conceito que tenta acabar com o padrão SQL, bem como encontramos também definições mais realistas, que passam a ideia de um padrão de armazenamento de dados alternativo ao SQL, oferecendo uma robustez e escalabilidade melhores.

Para sabermos mais claramente o que é o NoSQL, e qual seu uso, é interessante saber algumas coisas antes.

O termo NoSQL foi primeiramente utilizado em 1998 como o nome de um banco de dados não relacional de código aberto.

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”.

Com a crescente popularização da internet, diversos novos dados foram surgindo e tratá-los foi se tornando gradualmente mais complexo e sua manutenção cada vez mais cara.

Em 2006, o artigo: BigTable: A Distributed Storage System for Structured Data, publicado pelo Google em 2006, traz novamente à tona o conceito NoSQL.

No inicio de 2009, o termo NoSQL é reintroduzido por um funcionário do Rackspace, Eric Evans, quando Johan Oskarson da Last.fm queria organizar um evento para discutir bancos de dados open source distribuídos.

O nome era uma tentativa de descrever o surgimento de um número crescente de bancos de dados não relacionais e fazia uma referência ao esquema de atribuição de nomes dos bancos de dados relacionais mais populares do mercado como MySQL, MS SQL, PostgreSQL, etc.

A partir de então, os bancos de dados não relacionais passaram a ser conhecidos como NoSQL, e com crescente popularização das redes sociais, a geração de conteúdo por dispositivos móveis bem como o número cada vez maior de pessoas e dispositivos conectados, faz com que o trabalho de armazenamento de dados com o objetivo de utilizá-los em ferramentas analíticas, comece a esbarrar nas questões de escalabilidade e custos de manutenção desses dados.

Bancos de dados relacionais escalam, mas quanto maior o tamanho, mais custoso se torna essa escalabilidade, seja pelo custo de novas máquinas, seja pelo aumento de especialistas nos bancos de dados utilizados.

Já os não relacionais, permitem uma escalabilidade mais barata e menos trabalhosa, pois não exigem máquinas extremamente poderosas e sua facilidade de manutenção permite que um número menor de profissionais seja necessário.

Assim, os bancos de dados NoSQL, vão ficando mais populares entre as grandes empresas pois reúnem as características de poder trabalhar com dados semi-estruturados ou crus vindos de diversas origens (arquivos de log, web-sites, arquivos multimídia, etc…).

Podemos listar algumas dessas características abaixo:

Utilização do processamento paralelo para processamento das informações: para se atingir uma performance razoável no processamento de grandes volumes de dados, é mais eficiente dividir a tarefa em várias outras menores e que podem assim, serem executadas ao mesmo tempo, distribuindo essas tarefas pelos vários processadores disponíveis, para isso, os sistemas precisam atingir um alto grau de maturidade no processamento paralelo.

O uso de muitos processadores baratos, não só oferece melhor performance, mas se torna também uma solução economicamente interessante, pois dessa forma é possível escalar o sistema horizontalmente apenas adicionando hardware e não limita a empresa a poucos fornecedores de hardware mais poderoso.

Distribuição em escala global: para atender seus usuários de forma eficiente, algumas empresas utilizam vários data centers, localizados em diversas partes do pais ou do mundo.

Com isso, uma série de questões sobre disponibilidade e performance são levantadas ao construir os sistemas.

A distribuição deles combinada com o hardware barato, impõe ao sistema a necessidade de ser robusto o suficiente para tolerar falhas constantes e imprevisíveis, seja de hardware, seja da infraestrutura do lugar onde o data center se encontra.

Pensando nessas questões, bem como nas necessidades internas ou dos clientes, foi surgindo uma grande quantidade de bancos de dados não relacionais de trabalham de diferentes maneiras, e as principais estão listadas abaixo.

Banco de dados que trabalham no esquema chave/valor (Key/Value): sistemas distribuídos nessa categoria, também conhecidos como tabelas de hash distribuídas, armazenam objetos indexados por chaves, e possibilitam a busca por esses objetos a partir de suas chaves.

Alguns bancos que utilizam esse padrão são: DynamoDb, Couchbase, Riak, Azure Table Storage, Redis, Tokyo Cabinet, Berkeley DB, etc…

Bancos de dados orientados a documentos: os documentos dos bancos dessa categoria, são coleções de atributos e valores, onde um atributo pode ser multi-valorado. Em geral, os bancos de dados orientados a documento não possuem esquema, ou seja, os documentos armazenados não precisam possuir estrutura em comum.

Essa característica faz deles boas opções para o armazenamento de dados semi estruturados.

Alguns bancos que utilizam esse padrão são: MongoDb, CouchDB, RavenDb, etc.

Bancos de dados de famílias de colunas : Bancos relacionais normalmente guardam os registros das tabelas contiguamente no disco. Por exemplo, caso se queira guardar id, nome e endereço de usuários em um sistema de cadastro, os registros seriam: Id1, Nome1, Endereço1; Id2, Nome2, Endereço2.

Essa estrutura torna a escrita muito rápida, pois todos os dados de um registro são colocados no disco com uma única escrita no banco. Essa estrutura também é eficiente caso se queira ler registros inteiros. Mas para situações onde se quer ler algumas poucas colunas de muitos registros, essa estrutura é pouco eficiente, pois muitos blocos do disco terão de ser lidos. Para esses casos onde se quer otimizar a leitura de dados estruturados, bancos de dados de famílias de colunas são mais interessantes, pois eles guardam os dados contiguamente por coluna.

O exemplo anterior em um banco de dados dessa categoria ficaria: Id1, Id2; Nome1, Nome2; Endereço1, Endereço2.

Por esse exemplo é possível perceber a desvantagem de um banco de dados de famílias de colunas: a escrita de um novo registro é bem mais custosa do que em um banco de dados tradicional. Assim, num primeiro momento, os bancos tradicionais são mais adequados aprocessamento de transações online (OLTP) enquanto os bancos de dados de famílias de colunas são mais interessantes para processamento analítico online (OLAP). O Bigtable é uma implementação da Google dessa categoria de bancos de dados . Outros bancos de dados que são orientados a coluna: Hadoop, Cassanda, Hypertable, Amazon SimpleDB, etc. Bancos de dados de grafos: diferentemente de outros tipos de bancos de dados NoSQL, esse está diretamente relacionado a um modelo de dados estabelecido, o modelo de grafos. A ideia desse modelo é representar os dados e / ou o esquema dos dados como grafos dirigidos, ou como estruturas que generalizem a noção de grafos .

O modelo de grafos é mais interessante que outros quando “informações sobre a inter-conectividade ou a topologia dos dados são mais importantes, ou tão importante quantos os dados propriamente ditos . O modelo orientado a grafos possui três componentes básicos: os nós (são os vértices do grafo), os relacionamentos (são as arestas) e as propriedades (ou atributos) dos nós e relacionamentos.

Neste caso, o banco de dados pode ser visto como um multigrafo rotulado e direcionado, onde cada par de nós pode ser conectado por mais de uma aresta. Um exemplo pode ser : “Quais cidades foram visitadas anteriormente (seja residindo ou viajando) por pessoas que viajaram para o Rio de Janeiro ?” No modelo relacional esta consulta poderia ser muito complexa devido a necessidade de múltiplas junções, o que poderia acarretar uma diminuição no desempenho da aplicação. Porém, por meio dos relacionamentos inerentes aos grafos, estas consultas tornam-se mais simples e diretas.

Alguns bancos que utilizam esse padrão são: Neo4J, Infinite Graph, InforGrid, HyperGraphDB, etc. Como podem ver, os bancos de dados que se utilizam do conceito NoSQL, abrangem uma ampla gama de possibilidades de armazenamento da informação. Veremos no próximo artigo porque ele tem sido considerado fundamental para o BigData, e como podemos tirar partido de seu potencial.

(Texto extraído de https://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044)

Top 6 Bancos de Dados NoSQL

A Structured Query Language (Linguagem SQL) tornou-se o padrão para manipulação de dados em sistemas de gerenciamento de banco de dados relacionais ao longo dos anos. Por conta disso, o termo NoSQL vem sendo usado para definir tudo que não seja relacional, embora nem sempre essa abordagem seja precisa.

Sendo preciso ou não o termo NoSQL, as várias tecnologias NoSQL são bem-vindas e necessárias na paisagem de dados de hoje, especialmente por conta do Big Data. Key-value stores, document stores, graph databases e outros paradigmas de armazenamento de dados não-relacionais permitem velocidade, flexibilidade e escalabilidade ao armazenar e acessar dados não estruturados. Mas há uma grande quantidade de mecanismos de banco de dados NoSQL disponíveis hoje. Quais são os mais usados e quais são as diferenças? O excelente site DB-Engines.com é uma excelente fonte de pesquisa para responder estas perguntas.

O site DB-Engines.com oferece algumas ferramentas de comparação entre os todos os engines de banco de dados, sejam eles relacionais ou não relacionais, de acordo com a popularidade dos DBMS (Database Management Systems). O DB-Engines Ranking permite acompanhar a evolução e crescimento ao longo dos últimos 5 anos e fui buscar quais eram os principais bancos de dados NoSQL, usando como referência este gráfico abaixo coletado em Fevereiro de 2018. É espantoso ver o crescimento de alguns desses bancos de dados, especialmente as soluções em nuvem da Amazon.

O levantamento, feito em Fevereiro de 2018, aponta como principais mecanismos de banco de dados NoSQL: MongoDB, Redis, Cassandra, HBase, Amazon DynamoDB e Neo4j. Algo que chama atenção é o crescimento incrível desses bancos de dados em comparação aos bancos relacionais. Abaixo você encontra uma visão geral dos Top 6 NoSQL Databases (no momento da criação deste post, em Fevereiro/2018).

MongoDB

O MongoDB é um document store e o atual líder no segmento de banco de dados NoSQL. Como é o requisito para os engines NoSQL, o MongoDB não usa um esquema relacional, em vez disso, usa “documentos” semelhantes ao formato JSON (Java Script Object Notation), para armazenar dados. O documento é semelhante a um registro, com campos e valores. O MongoDB suporta esquemas dinâmicos, é um software livre e de código aberto.

O MongoDB também fornece os recursos necessários para um ambiente de produção: balanceamento de carga, replicação, indexação, consulta e pode atuar como um sistema de arquivos (com balanceamento de carga e tolerância a falhas).

Cassandra

Originalmente desenvolvido no Facebook, Cassandra é um mecanismo de banco de dados descentralizado, distribuído e orientado a coluna. É otimizado para clusters, especialmente aqueles em vários datacenters, e graças à sua atualização assíncrona e design sem mestre (master), o Cassandra fornece acesso de baixa latência a clientes. Como o MongoDB, também é gratuito e de código aberto.

Cassandra é um banco de dados orientado por coluna, o que significa que suas linhas realmente contêm o que geralmente pensamos como dados verticais, ou o que é tradicionalmente realizado em colunas relacionais. A vantagem do design de banco de dados orientado por coluna é que alguns tipos de pesquisas de dados podem se tornar muito rápidos, uma vez que os dados desejados podem ser armazenados consecutivamente em uma única linha (compare isso com ter que pesquisar e ler de múltiplas linhas não consecutivas para atingir o mesmo valor de campo em banco de dados orientado a linha). Essa particularidade, juntamente com o modelo distribuído otimizado e descentralizado, solidificou a popularidade da Cassandra ao longo dos anos. Veja na seção de referências ao final do post, um artigo explicando esse conceito em mais detalhes.

Redis

O Redis é a implementação key-value store mais popular e amplamente utilizada em nossa lista. O que é um key-value store? É um paradigma simples: atribua valores às chaves para facilitar o acesso e o armazenamento desses valores, que sempre são encontrados através das suas chaves. Pense em mapas de hash e você tem a ideia (dicionários em Python).

O Redis mantém seus pares de valores-chave na memória, tornando seu acesso rápido. Se a durabilidade dos dados pode ser sacrificada (principalmente com dados não críticos, ou em situações de somente leitura), ser capaz de renunciar a escritas de dados significa que esses dados somente em memória possuem um desempenho incrivelmente rápido. Ao longo dos anos, muitas APIs foram desenvolvidas para uma variedade incrivelmente ampla de linguagens de programação, tornando o Redis uma escolha fácil para desenvolvedores.

HBase

Outro banco de dados orientado a coluna, o HBase é uma implementação gratuita e aberta do BigTable do Google. Embora a HBase seja um legítimo software por direito próprio, sua popularidade e seu uso generalizado, sem dúvida, vem da sua estreita associação com o Hadoop, pois faz parte do projeto Apache. Isso facilita a busca eficiente de dados dispersos e distribuídos, que é um dos seus pontos mais fortes.

O HBase possui uma série de implementações em gigantes da internet, incluindo LinkedIn, Facebook e Spotify. Muitos projetos relacionados do Apache também oferecem suporte ao HBase, fornecendo uma camada SQL para acesso a dados (Phoenix), o que certamente seria bom para os administradores de banco de dados relacionais que procuram implementar uma solução NoSQL. E com o alto número de instalações Hadoop já existentes e seu grande crescimento, o HBase será uma solução de armazenamento NoSQL, padrão nos próximos anos. Ao final do post há um link para um excelente material com a arquitetura do HBase.

Amazon DynamoDB

O Amazon DynamoDB é um serviço de banco de dados NoSQL em nuvem oferecido pela AWS (Amazon Web Service). O DynamoDB é rápido e flexível para todas as aplicações que precisam de latência constante abaixo de 10 milissegundos em qualquer escala. O serviço é um banco de dados em nuvem totalmente gerenciado e é compatível com os modelos de armazenamento de documentos e de chave-valor. O modelo de dados flexível, o desempenho confiável e a escalabilidade automática da capacidade de throughput fazem desse serviço a opção ideal para aplicações móveis, web e de jogos, tecnologia de anúncios e IoT, entre muitas outras aplicações. Nesta lista de Top 6, foi o que mais cresceu ao longo dos últimos 5 anos.

Neo4j

Neo4j é o sistema de gerenciamento de banco de dados baseado em grafos (ou Graph Database), sendo o sistema mais popular desta categoria em uso atualmente. Um Graph Database é baseado em arestas que atuam como relacionamentos entre os vértices (ou nodes), relacionando diretamente instâncias de dados umas com as outras. Como outros na lista, o Neo4j também possui uma implementação de código aberto.

Os dados no Neo4j podem ser acessados e atualizados através da Cypher Query Language, uma linguagem semelhante à linguagem SQL.

Os bancos de dados baseados em grafos (e o Neo4j, claro) têm vantagens em alguns casos de uso, incluindo determinados cenários de mineração de dados e reconhecimento de padrões, uma vez que as associações entre instâncias de dados são explicitamente declaradas. Veja na seção de referências uma comparação entre bancos relacionais e o Neo4j.

Cerca de 80% do Big Data são dados não estruturados. Armazenar e processar esses dados em bancos relacionais não é uma tarefa viável, considerando principalmente que eles não foram concebidos com esse objetivo. Exatamente aí os bancos de dados NoSQL estão senso usados cada vez mais, para atender aplicações analíticas criadas na era do Big Data.

(Texto extraído de http://www.cienciaedados.com/top-6-nosql-databases/)

--

--

Marcio Luis Rodrigues de Paula Lima
PermaLink Univesp

Marido, Pai de 2 meninos e 1 menina, empreendedor digital e estudante de Engenharia de Computação da UNIVESP e técnico de TI na Prefeitura de Caraguatatuba-SP.