Fonte: http://artedosdados.blogspot.com.br/2013/08/o-que-e-nosql.html |
NoSQL
é uma abreviação de Not only SQL, (não somente SQL). Esse termo define os novos modelos
de armazenamento de dados, criados para atenderem às necessidades de
flexibilidade, disponibilidade, escalabilidade e desempenho das aplicações
inseridas no contexto de Big Data (Marquesone, 2017).
De
acordo com Marquesone (2017), Sistemas de Gerenciamento de Bancos de Dados
Relacionais (SGBDR) usam a Structured
Query Language (SQL) para operações de criação e manipulação dos dados. Suportam
transações ACID (acrônimo de Atomicidade, Consistência, Isolamento e
Durabilidade), que oferecem alta integridade aos dados armazenados.
- Atomicidade: Significa "tudo ou nada", ou seja, uma transação é concluída integralmente ou não.
- Constância: Significa que quando uma transação é realizada, os dados devem estar em conformidade com o schema do banco de dados.
- Isolamento: Exige que as transações simultâneas sejam executadas separadas uma da outra.
- Durabilidade: É a capacidade de se recuperar de uma falha do sistema ou falta de energia inesperada para o último estado conhecido.
Diferente
do banco de dados relacional, em que o foco principal é voltado à integridade
dos dados, os modelos existentes em NoSQL tendem a sacrificar uma ou mais
propriedades ACID, para assim oferecer maior desempenho e escalabilidade às
soluções que lidam com grande volume de dados (Marquesone, 2017).
Assim
como não existe um padrão único para criação de aplicações de Big Data, o termo
one-size-fits-all também não se enquadra
em NoSQL. Ou seja, não existe um modelo de armazenamento único que seja
adequado para todos os cenários de aplicações, uma vez que cada solução requer
necessidades específicas. Enquanto uma solução pode ter como requisito a
gravação de informações em fluxos constantes ao banco, outra pode necessitar de
leituras periódicas em sua base. Para que cada uma dessas soluções tivessem
recursos capazes de atender seus requisitos, diferentes modelos de
armazenamento passaram a ser criados no contexto de NoSQL (Marquesone, 2017).
Comparação entre Bancos de Dados SQL e NoSQL
Item
|
SQL
|
NoSQL
|
Modelo de dados
|
Normaliza
dados em estruturas tabulares conhecidas como tabelas, que consistem em
linhas e colunas. Um schema define estritamente as tabelas, colunas, índices,
relações entre tabelas e outros elementos do banco de dados.
|
Normalmente
não aplicam um schema. Geralmente, uma chave de partição é usada para
recuperar valores, conjuntos de colunas ou documentos semiestruturados JSON,
XML ou outros que contenham atributos de itens relacionados.
|
Propriedades ACID
|
Conjunto
de propriedades ACID: Atomicidade, Constância, Isolamento e Durabilidade.
|
Modelo
de dados mais flexível que escala horizontalmente. Essas características
fazem dos bancos de dados NoSQL uma excelente opção em situações em que os
RDBMS deparam com desafios de arquitetura e precisam solucionar uma
combinação de gargalos de desempenho, escalabilidade, complexidade
operacional e custos crescentes de administração e suporte.
|
Desempenho
|
O
desempenho normalmente depende do subsistema do disco. A otimização de
consultas, índices e estrutura de tabela é necessária para alcançar máximo
desempenho.
|
Desempenho
geralmente é uma função do tamanho do cluster do hardware subjacente, da
latência de rede e da aplicação que faz a chamada.
|
Escala
|
Mais
fácil de aumentar a escala "verticalmente" com hardware mais
rápido. Outros investimentos são
necessários para tabelas relacionais para abranger um sistema distribuído.
|
Projetado
para aumentar a escala "horizontalmente" usando clusters
distribuídos de hardware de baixo custo para aumentar a transferência sem
aumentar a latência.
|
APIs
|
As
solicitações para armazenar e recuperar dados são comunicadas usando
consultas compatíveis com structured query language (SQL). Essas consultas
são analisadas e executadas por sistemas de gerenciamento de bancos de dados
relacionais (RDBMS).
|
APIs
baseadas em objetos permitem que desenvolvedores de aplicações armazenem e
restaurem facilmente estruturas de dados na memória. As chaves de partição
permitem que os aplicativos procurem pares de chave-valor, conjuntos de
colunas ou documentos semiestruturados contendo objetos e atributos de
aplicativos serializados.
|
Ferramentas
|
Os
bancos de dados SQL normalmente oferecem um rico conjunto de ferramentas para
simplificar o desenvolvimento de aplicações orientadas ao banco de dados.
|
Os
bancos de dados NoSQL normalmente oferecem ferramentas para gerenciar
clusters e escalabilidade. As aplicações são a interface principal com os
dados subjacentes.
|
Fonte:
https://aws.amazon.com/pt/nosql/
Tipos de Bancos de Dados NoSQL
Podemos
classificar os modelos existentes em NoSQL de acordo com a estrutura que os
dados são armazenados. Atualmente, existem 4 modelos principais: o modelo
orientado a chave-valor, orientado a documentos, orientado a colunas e orientado
a grafos.
Banco de dados orientado a Chave-Valor
De todos os modelos de banco de dados
NoSQL, o orientado a chave-valor é o que possui a estrutura mais simples. Ele
utiliza chaves como identificadores das informações gravadas em um campo identificado
como valor. A chave é composta normalmente de um campo do tipo String. Já o
campo valor pode conter diferentes tipos de dados, sem necessitar de um esquema
predefinido, como acontece em bancos de dados relacionais. Bancos de dados
orientados a chave-valor são adequados para aplicações que realizam leituras
frequentes. Existem atualmente diversas opções de banco de dados orientado a
chave-valor. Embora cada um possua suas próprias características, todas as
opções disponíveis são criadas com foco em oferecer flexibilidade, desempenho e
escalabilidade no gerenciamento dos dados. Por esse motivo, esse modelo de
banco de dados pode ser uma solução ideal para resolver questões de lentidão
para leitura e escrita de dados em grande variedade e volume. Com sua estrutura
simples, ele é capaz de otimizar o desempenho da consulta e realizar operações
com alta vazão. Embora a estrutura simples do banco de dados orientado a chave-valor
ofereça benefícios, ela também possui algumas limitações. Nesse tipo de banco,
o conteúdo do campo valor é "opaco", não sendo possível fazer uma
indexação com esse campo e uma consulta mais complexa (Marquesone, 2017). Seguem
exemplos de bancos de dados orientados a Chave-Valor:
- DynamoDB: https://aws.amazon.com/pt/dynamodb/
- Redis (open source): http://redis.io/
- Riak (open source): http://basho.com/
- Memcached (open source): https://memcached.org/
Bancos de dados orientado a Documentos
Considerado uma extensão do banco de
dados orientado a chave-valor, este tipo de banco de dados é provavelmente a
categoria NoSQL mais popular atualmente. Ele oferece meios de criação de
índices sobre os valores dos dados armazenados, enriquecendo as possibilidades
de consultas, além de permitir normalização de dados e muitos outros conceitos oriundos
do banco de dados relacional, tais como a criação de joins e definição de
esquemas rígidos. No entanto, esses recursos não são obrigatórios como nos
bancos de dados relacionais. Podemos definir documentos como sendo estruturas
flexíveis que podem ser obtidas por meio de dados semiestruturados, como o
formato XML e JSON. Pense em um documento como sendo uma linha de uma tabela, e
um conjunto de documentos como sendo a tabela com todos os registros. A
diferença é que cada documento (ou seja, cada linha da tabela) pode conter
variações em sua estrutura. Isso é possível pelo fato de que você não precisa
definir um esquema antes de adicionar os registros. Diferente do modelo
chave-valor, o banco de dados orientado a documentos permite a criação de consultas
e filtros sobre os valores armazenados, e não somente pelo campo chave. Permite
trabalhar com a replicação dos dados em um cluster, e assim garantir que o dado
ficará disponível mesmo com a ocorrência de falha em um dos servidores. Esse
modelo é indicado para realizar o armazenamento de conteúdo de páginas Web, na
catalogação de documentos de uma empresa e no gerenciamento de inventário de um
e-commerce, pois são aplicações que trabalham diretamente com coleções de documentos
(Marquesone, 2017). Seguem exemplos de bancos de dados orientados a Documentos:
- Couchbase: http://www.couchbase.com/
- CouchDB (open source): http://couchdb.apache.org/
- MarkLogic: http://www.marklogic.com/
- MongoDB: https://www.mongodb.com/
Bancos de dados orientado a Colunas
De
todos os modelos de armazenamento NoSQL, provavelmente o orientado a colunas
seja o mais complexo. Esse modelo também é considerado uma extensão do
armazenamento orientado a chave-valor e possui conceitos similares ao do modelo
relacional, como a criação de linhas e colunas. Entretanto, é preciso ficar
atento, pois existem diferenças fundamentais no modo como essas estruturas são
criadas. Como o banco de dados orientado a colunas se diferencia do banco de
dados relacional nesse cenário? Esse tipo de banco busca resolver
principalmente o problema de escalabilidade e flexibilidade no armazenamento de
dados. No que se refere à flexibilidade, ao invés de definir antecipadamente as
colunas necessárias para armazenar um registro, o responsável pela modelagem de
dados define o que é chamado de "famílias de colunas". As famílias de
colunas são organizadas em grupos de itens de dados que são frequentemente usados
em conjunto em uma aplicação. A partir das "famílias de colunas"
definidas, o desenvolvedor possui a flexibilidade de inserir as colunas que considerar
necessárias em cada registro armazenado, sem precisar alterar a estrutura dos
dados já armazenados. Outra informação armazenada no banco de dados orientado a
colunas é o timestamp de cada item gravado.
Essa abordagem é utilizada para prover o versionamento das colunas. Com essa
estratégia de armazenamento por famílias de colunas, além de fornecer
flexibilidade, esse modelo oferece também grande escalabilidade. O registro de
um item pode ter informações gravadas em diversas famílias de colunas, que
podem estar armazenadas em diferentes servidores. Isso é possível pelo fato de
que os dados são armazenados fisicamente em uma sequência orientada a colunas e
não por linhas. Dessa forma, mesmo em um ambiente distribuído, com milhões de
colunas, o banco de dados orientado a colunas pode distribuir as consultas em
um grande número de nós de processamento sem realizar operações de join. Se sua aplicação trabalha com
volumes imensos de dados, se ela necessita de alto desempenho e de alta
disponibilidade na leitura e escrita dos dados, ou se você necessita de
inclusão de campos dinâmicos e sua solução tolera eventuais inconsistências, provavelmente
o banco de dados orientado a colunas é a solução mais adequada. Por atender
tais necessidades, esse modelo é muito utilizado por aplicações de larga
escala, como ocorre com o serviço de mensagens do Facebook (Marquesone, 2017).
Seguem exemplos de bancos de dados orientados a Colunas:
- BigTable do Google: https://cloud.google.com/bigtable/
- Accumulo (open source): https://accumulo.apache.org/
- Cassandra (open source): http://cassandra.apache.org/
- HBase: https://hbase.apache.org/
- Hypertable: http://www.hypertable.org/
Bancos de dados orientado a Grafos
Em
situações como essa, com foco no relacionamento dos dados, é que o banco de
dados orientado a grafos é recomendado. Em situações como essa, com foco no relacionamento
dos dados, é que o banco de dados orientado a grafos é recomendado. Entre os
quatro tipos de armazenamento NoSQL apresentados, o orientado a grafos é
provavelmente o mais especializado. Diferente dos outros modelos, em vez dos
dados serem modelados utilizando um formato de linhas e colunas, eles possuem
uma estrutura definida na teoria dos grafos, usando vértices e arestas para
armazenar os dados dos itens coletados e os relacionamentos entre esses dados,
respectivamente. Esse modelo oferece maior desempenho nas aplicações que precisam
traçar os caminhos existentes nos relacionamentos entre os dados, como por
exemplo, as que precisam identificar como um conjunto de amigos está conectado
em uma rede, ou descobrir a melhor rota para se chegar a um local em menor
tempo (Marquesone, 2017). Seguem exemplos de bancos de dados orientados a
gráficos:
- AllegroGraph: http://franz.com/agraph/allegrograph/
- ArangoDB: https://www.arangodb.com/
- InfoGrid: http://infogrid.org/trac/
- Neo4J: https://neo4j.com/
- Titan: http://titan.thinkaurelius.com/
REFERÊNCIAS:
Bibliográfica:
MARQUESONE,
Big Data: Técnicas e Tecnologias para extração de valor de dados. São Paulo:
Casa do Código, 2017.
Internet:
https://aws.amazon.com/pt/nosql/
Comentários