Comparando o NoSQL ao modelo relacional

Propaganda
08/04/2015
Comparando o NoSQL ao modelo relacional
Buscar
código fonte
comentários
post favorito (9)
SQL Magazine 123 ­ Índice
Comparando o NoSQL ao
modelo relacional
Conheça nesse artigo os benefícios e dificuldades no uso do
NoSQL em comparação com o modelo de banco de dados
relacionais.
0
Gostei (12)
0
Curtir
0
(0)
Fique por dentro
O tradicional modelo relacional é o tipo de banco de dados mais utilizado nas
últimas décadas. Porém, há um crescimento cada vez mais intenso do volume de
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
1/29
08/04/2015
Comparando o NoSQL ao modelo relacional
dados na era da Big Data, redes sociais e computação na nuvem, e certos fatores
limitantes têm propiciado o surgimento de modelos alternativos de banco de
dados.
O NoSQL vem ganhando espaço no mercado e se tornando uma opção que atende
aos requisitos do ambiente de computação distribuída em larga escala, permitindo
escalabilidade, disponibilidade, alto desempenho e confiabilidade. Este artigo tem
como objetivo fornecer uma visão geral das soluções de banco de dados NoSQL
modernas, abordar suas principais características, mostrar suas principais
diferenças com relação aos bancos de dados relacionais e apresentar um estudo
de caso de uma destas soluções.
Por décadas, os bancos de dados relacionais têm sido a escolha padrão para
persistência de dados corporativos. No entanto, as grandes empresas e aplicações
web estão mudando ao longo dos últimos anos.
Com o aumento da quantidade e do fluxo de informações e a certeza de que sempre
haverá mais dados para armazenar, o tradicional modelo relacional começa a sofrer
limitações de escalabilidade.
Neste cenário surge uma nova geração de banco de dados, não­relacional, como
uma maneira de lidar com o crescente volume de dados. O NoSQL (Not only SQL)
atende aos requisitos do ambiente de computação distribuída em larga escala, o que
permite escalabilidade, alta disponibilidade, alto desempenho e confiabilidade.
A grande motivação para o NoSQL é resolver o problema de escalabilidade dos
bancos tradicionais. Contudo, se faz necessário analisar todas as suas características
para se ter uma visão geral de seus prós e contras quando comparado ao modelo
relacional.
Este artigo fornecerá uma visão geral sobre o modelo relacional de banco de dados,
suas limitações e as soluções do NoSQL como alternativa a este modelo de banco.
Esta análise irá abordar os principais recursos e discutir os desafios da tecnologia
NoSQL, identificando quais benefícios e dificuldades esta tecnologia traz para a
solução do grande volume de dados processados atualmente.
Além disso, será apresentado, através de um estudo de caso, algumas das
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
2/29
08/04/2015
Comparando o NoSQL ao modelo relacional
diferenças identificadas entre os dois modelos.
SGBDs Relacionais
O banco de dados no modelo relacional foi proposto por Edgar Codd, um pesquisador
da IBM, em torno de 1970. Desde então se tornou o modelo de banco de dados
dominante para aplicações comerciais. Hoje, há muitos Sistemas de Gerenciamento
de Banco de Dados (SGBDs), como Oracle, IBM DB2 e Microsoft SQL Server, MySQL,
PostgreSQL, entre outros.
Um banco de dados relacional organiza os dados em tabelas ou relações. Uma tabela
é composta de linhas e colunas. As linhas também são chamadas de registros ou
tuplas. As colunas também são chamadas de campo ou atributo. Uma tabela de
banco de dados é semelhante a uma folha de cálculo.
No entanto, as relações que podem ser criadas entre as mesmas possibilitam a um
banco de dados relacional armazenar eficientemente uma quantidade de dados e,
efetivamente, recuperar os dados selecionados.
Outra característica importante deste modelo é o uso de elementos para garantir a
integridade dos dados. As restrições mais comuns são as chaves primárias e as
estrangeiras. O termo chave primária é utilizado para identificar o atributo que foi
escolhido pelo projetista do banco para identificar unicamente os registros que são
armazenados em uma determinada tabela.
Nenhum registro pode ter o mesmo valor no campo chave primária de uma
determinada tabela do banco de dados, por isso os atributos chaves devem ser
selecionados com muito cuidado. Já a chave estrangeira transforma o valor de um
atributo dependente do valor existente em outro atributo, normalmente de outra
tabela, criando uma relação de dependência entre atributos de tabelas distintas.
As chaves são muito utilizadas em bancos de dados relacionais, inclusive para a
criação de outros componentes como os índices, que são usados para melhorar o
desempenho de consultas no banco.
Para projetar corretamente as tabelas de um banco de dados relacional temos um
conjunto de orientações que ajudam a reduzir a redundância e chance de corrupção
de dados. É o que chamamos de normalização. As regras de normalização são
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
3/29
08/04/2015
Comparando o NoSQL ao modelo relacional
projetadas para evitar anomalias de atualização e inconsistências de dados, e ao
mesmo tempo para permitir uma recuperação mais fácil de informações.
A linguagem chamada SQL foi desenvolvida para trabalhar com bancos de dados
relacionais. Inspirada na álgebra relacional e desenvolvida pela IBM, o SQL é uma
linguagem declarativa para banco de dados.
A facilidade de uso e simplicidade de expressão fez com que o SQL se transformasse
na linguagem de consulta de dados mais usada no mundo, o que ajudou a consolidar
o modelo relacional de banco de dados.
Outro conceito importante para bancos de dados são as propriedades ACID. A sigla
significa Atomicidade, Consistência, Isolamento e Durabilidade. As propriedades ACID
de um SGBD permitem o compartilhamento seguro de dados, oferecendo otimização
de consultas, recuperação de falhas, validação, controle de concorrência e
verificação de integridade dos dados.
Todas essas características e recursos deram ao Modelo Relacional de banco de
dados uma posição de destaque e predominância nos diversos ambientes
computacionais. No entanto, a sua complexidade estrutural fez com que surgissem
problemas, principalmente relacionados ao crescente volume de dados que as
empresas necessitam armazenar atualmente.
Limitações do Modelo Relacional
O Walmart, um gigante do varejo, trabalha com mais de 1 milhão de transações de
clientes por hora, alimentando bancos de dados estimados em mais de 2,5
petabytes. Já o Facebook, possui em seu banco cerca de 40 bilhões de fotos. Estes
são exemplos que mostram que o mundo contém enorme quantidade de informação
digital, e que este volume de informações e dados está ficando cada vez maior
rapidamente.
Este é um dos principais problemas encontrados com a utilização do Modelo
Relacional, a dificuldade em se usar esse modelo com uma demanda por
escalabilidade cada vez maior. As aplicações web que usam banco de dados
relacional vêm sofrendo com o grande volume de dados e problemas de
desempenho.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
4/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Para solucionar tais problemas de escalabilidade, geralmente se recorre a duas
alternativas: o aumento do número de servidores (escalonamento horizontal) ou a
realização de um upgrade no servidor (escalonamento vertical).
Isto não é o suficiente caso o volume de informações continue a crescer em ritmo
acelerado. Com o constante crescimento dos dados, a solução passa a ser escalar o
banco de dados em sistemas distribuídos.
Entretanto, por causa da natureza estruturada do modelo relacional, os
administradores de bancos de dados perceberam uma dificuldade em organizar as
informações em sistemas distribuídos, particionando os dados em máquinas
diferentes. Manusear tabelas em diferentes servidores é muito difícil e problemático.
Por conta disso, começam a surgir as soluções não relacionais.
NoSQL
Os desenvolvedores começaram a pensar em um modelo alternativo para modelar as
bases de dados frente às dificuldades encontradas no modelo relacional. As soluções
propostas para a melhoria de desempenho visavam evitar a rígida e tradicional
estrutura usada no modelo relacional.
O objetivo dos projetistas de banco de dados das grandes organizações era
desenvolver uma nova maneira de armazenar as informações flexibilizando o banco
de dados para as características particulares de sua empresa.
Esta flexibilidade é fundamental para atender aos requisitos dos sistemas
distribuídos em larga escala, permitindo escalabilidade e alta disponibilidade para as
aplicações que gerenciam grande quantidade de dados.
Assim surgiu o NoSQL, termo usado primeiramente em 1998, por Carlo Strozzi, como
um nome para um banco de dados relacional leve, de código aberto, que não possuía
interface SQL.
Em 2009, este nome foi novamente usado em um evento para descrever um modelo
de banco que conseguia ajustar os dados, principalmente quando o modelo relacional
não atendia aos requisitos pretendidos. É um movimento totalmente adepto ao
código aberto.
A intenção do NoSQL não é substituir o tradicional modelo relacional, e sim ser uma
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
5/29
08/04/2015
Comparando o NoSQL ao modelo relacional
alternativa para as empresas que necessitam de um modelo de banco de dados mais
flexível para suportar o seu volume de dados.
A constante tendência de computação em nuvem e o crescimento das redes sociais
são fatores importantes que levam ao desenvolvimento de armazenamento NoSQL.
Apesar da existência de muitos bancos de dados NoSQL, o movimento ganhou força
quando grandes empresas da tecnologia passaram a usar suas próprias
implementações a fim de fornecer serviços para seus sistemas distribuídos.
Buscando atender suas necessidades de armazenamento, em 2004, o Google criou o
BigTable.
Na sequência, buscando também a alta disponibilidade, a Amazon lançou o Dynamo.
Em 2008, o Facebook desenvolveu o Cassandra para tratar o grande volume de
dados, e este se mostrou tão eficiente que em 2010 o Twitter deixou o MySQL de
lado para usá­lo.
Outras soluções lançadas são o Apache CouchDB e o MongoDB, que são banco de
dados orientados a documentos e com características bem semelhantes, como alta
performance e escaláveis, projetados para suportar sistemas distribuídos em larga
escala.
Todos os bancos citados são considerados NoSQL, possuem características
semelhantes, mas também possuem particularidades que os diferenciam. A próxima
seção aborda justamente os diferentes modelos de bancos de dados NoSQL,
mostrando suas características.
3.1 Modelos de BD NoSQL
Mais e mais organizações têm adotado soluções NoSQL para apoiar seus projetos.
Estas soluções apresentam características em comum, como uma maior
escalabilidade e alta disponibilidade, mas também apresentam diversas
singularidades. Os bancos de dados NoSQL são subdivididos pela maneira como
armazenam as informações. Os principais tipos são: Armazenamento Chave­Valor
(Key/Value), Documento, Coluna e Grafo.
A solução chave­valor armazena qualquer coisa como pares de valores­chave, o que
implica valores armazenados recuperados por chaves únicas. São capazes de
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
6/29
08/04/2015
Comparando o NoSQL ao modelo relacional
armazenar grandes quantidades de dados e, no entanto, mantêm o acesso simples
por uma chave primária.
Este tipo de armazenamento funciona bem para listas, como as categorias de
produtos, os atributos de cada produto, carrinho de compras, conteúdos ou valores
individuais, etc.
Por conta disto, o Amazon Dynamo é uma solução que adota este modelo. Os dados
deste sistema são particionados e replicados usando hashing consistente, a fim de
fornecer a escalabilidade e disponibilidade.
O segundo modelo de solução muda o tradicional paradigma de orientação a
registros (ou tuplas) para orientação a colunas (ou atributos). Aqui os dados seguem
uma indexação tripla (linha, coluna e timestamp), onde as linhas e as colunas são
identificadas por chaves e o timestamp possibilita a diferenciação de múltiplas
versões de um mesmo dado.
Alguns modelos deste tipo de armazenamento possuem colunas (registros que
possuem nome, valor e timestamp), famílias de colunas (uma coleção de colunas,
equivalente a uma tabela do Modelo Relacional) e super­colunas (formadas por
arrays de colunas).
O conceito de família de colunas pode ser observado na Figura 1, onde
primeiroNome e sobrenome são colunas pertencentes à família de colunas
denominada nome e as colunas endereço e cidade pertencem à família local. Dois
grandes exemplos de sistemas orientados a coluna são o Cassandra e o BigTable.
Figura 1. Exemplo de modelo baseado em colunas
Já uma solução baseada em documento é um tipo de banco de dados que armazena
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
7/29
08/04/2015
Comparando o NoSQL ao modelo relacional
coleções de documentos. Os documentos são representados como objetos com um
único identificador e um conjunto de campos, que podem ser strings, listas ou
documentos aninhados. Como esta base de dados é semiestruturada e não possui
esquema, uma informação específica ou atributos podem ser adicionados a qualquer
campo sem que isso cause algum problema na base de dados.
Podemos observar um documento na Figura 2 com seus campos e atributos
associados. Comparado com o SQL, esta abordagem fornece flexibilidade e
extensibilidade. Como exemplos que usam este tipo de armazenamento tem­se o
MongoDB e o Apache CouchDB.
Figura 2. Exemplo de modelo baseado em documento
A quarta categoria (os banco de dados baseados em grafos) possui três
componentes básicos: os vértices (são os nós do grafo), as arestas (são os
relacionamentos entre os nós) e os atributos dos nós e relacionamentos. Os dados
são armazenados nos nós do grafo e as arestas representam o tipo de associação
entre eles.
Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer
momento, permitindo que relações 1­N (um para muitos) e N­N (muitos para muitos)
sejam expressas de forma fácil. Construções como amigos, seguidores, graus de
separação, listas são muito naturalmente acomodadas em bancos de dados do tipo
grafo.
A Figura 3 representa um exemplo de grafo de uma aplicação que possui
informações sobre locais visitados e locais onde pessoas moram. Comparado ao
modelo relacional, algumas consultas passam a ser bem mais simples e diretas por
conta dos relacionamentos existentes nos grafos.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
8/29
08/04/2015
Comparando o NoSQL ao modelo relacional
No exemplo da figura temos três pessoas que são nós do grafo e estão conectados à
cidades que ou já visitaram ou moraram. Através da representação do grafo fica fácil
perceber que Maria e José já visitaram o Rio de Janeiro.
E que João já morou em Recife e Salvador. Um exemplo de banco de dados baseado
em grafo é o Neo4j, que é open­source e implementado em Java.
Figura 3. Exemplo de modelo baseado em grafo
É importante ressaltar que nenhum dos modelos apresentados deve ser considerado
superior ao outro, pois tudo depende da necessidade da aplicação. É importante que
os desenvolvedores conheçam os diversos modelos de solução para que seja
adotado aquele que mais se adequar ao que a aplicação ou empresa precisa. Isto
contribui para a diminuição do custo de criação do banco de dados, e com o aumento
do desempenho no processamento dos dados.
A Tabela 1 apresenta uma comparação dos modelos apresentados destacando suas
principais vantagens e desvantagens, e ainda citando seus principais exemplos e
suas disponibilidades.
Tipo
Vantagem
Desvantagem Exemplos
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
Disponibilidade
9/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Amazon
Simplicidade
Chave/Valor e
escalabilidade
Falta recursos
O nível gratuito da AWS inclui 100
DynamoDB MB de armazenamento, 5 unidades
de capacidade de gravação e 10
mais
unidades de capacidade de leitura
avançados de
com o Amazon DynamoDB.
consulta
Disponível em:
http://aws.amazon.com/pt/dynamodb
Não é
MongoDB
adequado para
dados
Documento
Como a maioria das licenças de
software livre, permite seja usado,
CouchDB
modificado e distribuído por usuários.
Facilidade de
relacionais;
Pode­se adquirir o MongoDB em:
uso
Consulta
http://www.mongodb.org
limitada a
chaves e
e CouchDB:
índices
http://couchdb.apache.org
Google Big BigTable foi desenvolvida no Google
Table
em tem sido usado desde 2005 em
dezenas de serviços do Google. Uma
Cassandra
Coluna
Escalabilidade
e flexibilidade
versão de código aberto, HBase, foi
criado pelo Apache:
Complexidade
http://hbase.apache.org.
Já o Cassandra também pode ser
adquirido de forma gratuita:
http://cassandra.apache.org
Modelo de
Grafo
dados
Neo4j
Flexibilidade
poderoso e
Como os demais acima o Neo4j
também está disponível para
download em http://www.neo4j.org/
rápido
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
10/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Tabela 1. Análise comparativa dos modelos de BD NoSQL.
Modelo Relacional x NoSQL
Ao se comparar os modelos em questão, uma grande diferença a se notar é que as
tecnologias relacionais têm esquemas rígidos, enquanto os modelos NoSQL são
schema­free, ou seja, sem esquema. O modelo relacional requer uma definição
estrita de um esquema antes de armazenar todos os dados em um banco de dados.
Alterar o esquema uma vez que os dados já estão inseridos é muito complicado e,
por isso, evitado. No entanto, isto é exatamente o oposto do comportamento
desejado na era “Big Data”, onde os desenvolvedores precisam constante e
rapidamente incorporar novos tipos de dados para enriquecer seus aplicativos.
Muitas coisas devem ser levadas em conta na hora de se escolher qual tipo de banco
de dados usar: NoSQL ou modelo relacional. Entretanto, três critérios são
considerados relevantes para esta escolha: escalonamento, consistência de dados e
disponibilidade. E é isto que será abordado a partir de agora.
Basicamente pelo fato de terem sido criados para essa finalidade, os bancos NoSQL
apresentam vantagens em relação aos SGBDs relacionais quando se trata de
escalonamento. O modelo NoSQL apresenta uma maior flexibilidade em sua estrutura
e se adaptada com maior facilidade a cenários em que o escalonamento é
necessário.
É possível tornar um banco de dados relacional mais escalável através da técnica de
escalonamento vertical, onde é feita uma atualização (upgrade) no servidor de
bancos de dados.
Porém, este escalonamento fica limitado à capacidade de uma única máquina. Já o
escalonamento horizontal é feito com o aumento da quantidade de servidores que
irão disponibilizar os dados paralelamente (Figura 4), facilitando o acesso aos dados
e garantindo que a queda de um servidor não seja um problema de disponibilidade
dos dados.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
11/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Figura 4. O uso do escalonamento horizontal
Outra característica a favor do NoSQL é o uso do sharding, que consiste em trabalhar
com o escalonamento horizontal, particionando e paralelizando seus dados em vários
servidores (Figura 5). Essa técnica é complexa para se usar em SGBDs relacionais
devido a toda a sua estrutura lógica e devido ao uso da desnormalização dos dados,
o contrário usado no modelo relacional.
O sharding traz benefícios, pois conjuntos de dados menores são mais fáceis de
serem acessados, atualizados e gerenciados. O maior benefício, em comparação ao
modelo relacional, é a otimização do grau de disponibilidade do sistema, pois como
já dito anteriormente, a queda de uma máquina não causaria a interrupção de todo o
sistema.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
12/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Figura 5. Técnica de sharding
O controle de concorrência também funciona de maneira distinta nos modelos em
questão. O modelo relacional utiliza bloqueios (locks) como garantia de que dois
usuários não atualizem o mesmo dado ao mesmo tempo. Já no modelo NoSQL são
usadas outras estratégias para permitir um maior grau de concorrência.
Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle
de Concorrência Multi­versões. Nesta técnica, o acesso aos dados pode ser realizado
em paralelo.
Cada usuário que se conecta ao banco de dados visualiza uma cópia temporária do
banco de dados naquele instante. Qualquer atualização que esteja sendo feita em
determinado momento por um usuário não será vista pelos demais que estão
operando simultaneamente no banco de dados, até que a atualização tenha sido
concluída.
Quando se opta por usar um modelo NoSQL, há ganhos de performance, flexibilidade
e disponibilidade, mas há uma perda de consistência. Há um teorema na ciência da
computação, criado Eric Brewer, chamado Teorema CAP (Consistency, Availability e
Partition Tolerance) que diz ser impossível para um sistema distribuído garantir
consistência, disponibilidade e tolerância ao particionamento. De forma simultânea,
só é possível conseguir duas destas três características. Vejamos exemplos de
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
13/29
08/04/2015
Comparando o NoSQL ao modelo relacional
SGBDs na Figura 6 segundo o Teorema CAP.
Figura 6. Distribuição relativa de alguns bancos de dados quanto ao Teorema CAP
As soluções NoSQL seguem um paradigma denominado BASE (Basically Available,
Soft state, Eventual consistency). Este tem como características estar basicamente
disponível o tempo todo, estar em estado leve, ou seja, não sendo consistente o
tempo todo, e possuir uma consistência eventual, o sistema se torna consistente no
momento apropriado.
O modelo BASE é um contraste ao paradigma ACID (Atomicity, Consistency,
Isolation, Durability) comumente associado aos bancos de dados de modelo
relacional. Ao contrário do modelo ACID que promove uma segurança dos dados
forçando a consistência ao final de cada operação, o modelo BASE permite que o
banco de dados esteja em um estado eventualmente consistente.
A disponibilidade do modelo BASE está associada justamente ao fato de que a falha
de uma máquina do sistema não interrompe o sistema como um todo.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
14/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Para se analisar de forma mais rápida e comparativa, a Tabela 2 apresenta as
principais características de ambos os modelos discutidos aqui.
Escalonamento
Modelo Relacional
NoSQL
Possui sua natureza
É livre de esquemas, por isso
estruturada, e por conta disto o NoSQL possui uma maior
o escalonamento de bancos
flexibilidade e alta
tende a ser uma tarefa
escalabilidade, considerada
complexa.
uma das principais vantagens
desse modelo.
Consistência
Possui uma estrutura mais
A consistência nesse modelo
rígida e garante em suas
possui um caráter eventual,
transações a existência dessa o que não garante que uma
propriedade. As diversas
determinada atualização, em
regras deste modelo
um dado momento, seja
possibilitam uma maior
percebida por todos os nós.
rigidez quanto a garantia de
consistência dos dados,
sendo este o ponto mais
forte desse modelo.
Disponibilidade
Há uma dificuldade de se
Considerada outra das
trabalhar de forma eficiente
grandes vantagens do
com a distribuição de dados
modelo, essa propriedade,
por causa de sua natureza
junto com o alto grau de
estruturada, situações em
distribuição desse modelo,
que exigem uma maior
possibilita que o sistema
demanda de um sistema que
fique um menor período de
utilizem esse modelo podem
tempo não­disponível, assim
não ser bem suportadas por
como também permite que a
ele.
solicitação aos dados por um
número crescente de clientes
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
15/29
08/04/2015
Comparando o NoSQL ao modelo relacional
seja atendida.
Tolerância a
Por não terem sido
Trabalha de forma fácil e
Particionamento
construído com a finalidade
eficiente com a distribuição
de trabalhar com
de dados. Este modelo é
particionamento de dados,
capaz de suportar grandes
este modelo não possui um
demandas de dados assim
grau muito alto de tolerância
como possui alta tolerância
ao particionamento, cuja
ao particionamento dos
razão principal seria a
mesmos.
dificuldade de junções entre
as tabelas.
Tabela 2. Análise comparativa entre o Modelo Relacional e NoSQL.
A tabela nos mostra que o novo paradigma BASE usado pelos bancos de dados
NoSQL tem permitido uma melhor escalabilidade aos sistemas. A verificação contínua
da consistência de cada transação adiciona custos consideráveis para um sistema
que tem milhares de transações ocorrendo.
A consistência eventual promovida pelo modelo BASE dá às organizações a
capacidade de interagir com os clientes, de forma contínua, com a necessária
disponibilidade e tolerância a partição, mantendo baixos custos e o sistema rodando
sem interrupções. Sem dúvida seria excelente ter consistência completa o tempo
todo, mas é preciso haver compensações, e a consistência eventual permite o
desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de
dados devido às redes sociais, computação em nuvem e outros projetos de Big Data.
Estudo de Caso ­ MongoDB
Para fins comparativos serão analisadas nesta seção algumas diferenças entre um
banco NoSQL, o MongoDB, e os bancos relacionais baseados em SQL. O MongoDB é
um banco de dados NoSQL criado em 2009 pela empresa 10gen, orientado a
documentos, altamente escalável, de alta performance e de código aberto. O
cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma: “O
MongoDB não foi concebido em um laboratório.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
16/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Nós construímos o MongoDB com base em nossas experiências na construção de
sistemas robustos de grande escala e alta disponibilidade. Não começamos do zero,
nós tentamos descobrir o que estava problemático, e solucionamos isso.
Assim, o que eu penso sobre MongoDB é que se você pegar o MySQL, e alterar o
modelo de dados do relacional para orientado a documento, você ganha uma grande
quantidade de recursos: documentos embarcados para melhorar velocidade,
facilidade de gerenciamento, desenvolvimento ágil com bancos de dados sem
“schema”, escalabilidade horizontal mais fácil, pois “joins” não são tão importantes.
Há muitas coisas que funcionam muito bem nos bancos de dados relacionais: índices,
consultas dinâmicas e atualizações, e nós não mudamos muito neste ponto. Por
exemplo, a maneira de projetar seus índices no MongoDB deve ser exatamente do
jeito que você faz isso no MySQL ou Oracle, você só ganha a opção de indexar um
campo embarcado”.
Como dito na seção de modelos de bancos de dados NoSQL, um banco orientado a
documentos não possui esquemas rígidos e estruturados, sendo possível que ocorra
uma atualização na estrutura do documento. Portanto, inserir novos campos no
documento não causa problemas na estrutura do banco.
Para um maior entendimento e fins comparativos, a Tabela 3 apresenta os diversos
conceitos e terminologia SQL, e a terminologia e conceitos correspondentes no
MongoDB.
MySQL
MongoDB
tabela
coleção
índice
índice
linha
documento BSON
coluna
campo
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
17/29
08/04/2015
Comparando o NoSQL ao modelo relacional
joins
documentos incorporados e vinculação
primary key
primary key
(Especifica qualquer combinação de colunas
(No MongoDB, a chave primária é definida
ou coluna única como chave primária)
automaticamente como campo _id)
group by
aggregation
Tabela 3. Comparativo de termos e conceitos entre MySQL e MongoDB.
O MongoDB faz uso de documentos com esquemas dinâmicos, ou seja, sem a
necessidade de que cada registro tenha a mesma estrutura. Estas estruturas são
chamadas de coleções (collections). Para isso, o MongoDB armazena os documentos
no estilo parecido com o JSON (Java Script Object Notation), chamado BSON (Binary
JSON). Exemplo:
// Um documento usado para representar um aluno
aluno1 = {nome: "Paulo", sobrenome:"Silva", idade:22, bairro:"Pituba"}
// Outro documento para representar um aluno na mesma coleção
aluno2={nome:"Lia”, sobrenome:"Sá", curso:"Direito", materias:['Civil', 'Penal']}
Pode­se ter registros diferentes um do outro dentro de uma mesma coleção. Parece
estranho este tipo de abordagem, mas no modelo relacional usamos isto o tempo
inteiro e de maneira ineficiente, com a formação de tabelas esparsas.
Estas são tabelas incompletas onde algumas colunas são sempre preenchidas e
outras nem sempre são usadas. Para ilustrar isto, observe a Tabela 4 que apresenta
registros da construção civil.
Código
Produto
Altura
Potência
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
Peso
Diâmetro
18/29
08/04/2015
Comparando o NoSQL ao modelo relacional
1
Britadeira
2
Cimento
3
Empilhadeira
4
Escada
5
Tubulação
300cv
100kg
15cv
300kg
3m
20cm
Tabela 4. Cadastro de produtos da construção civil em banco de dados modelo
relacional.
Neste exemplo há uma desvantagem no modelo relacional. Há colunas cujo valor é
preenchido apenas uma vez, como pode ser visto no exemplo das colunas Altura e
Diâmetro. Na construção das tabelas ao incluir colunas que são pouco utilizadas,
joga­se fora espaço de armazenamento e reduz­se o desempenho do sistema como
um todo. E ainda tratamos objetos diferentes como se fossem iguais, o que nem
sempre é uma boa prática. Abaixo o exemplo de como ficaria este cadastro de
produtos no modelo documental:
{codigo:1, produto:"Britadeira", potencia:"300cv", peso:"100kg"}
{codigo:2, produto:"Cimento"}
{codigo:3, produto:"Empilhadeira", potencia:"15cv", peso:"300kg"}
{codigo:4, produto:"Escada", altura:"3m"}
{codigo:5, produto:"Tubulação", diametro:"20cm"}
Portanto, o MongoDB por ser um banco de modelo documental evita o problema de
tabelas esparsas presente no modelo relacional, melhorando seu armazenamento e
desempenho.
Serão apresentados agora alguns comandos comuns usados no MongoDB. Voltando
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
19/29
08/04/2015
Comparando o NoSQL ao modelo relacional
ao primeiro exemplo de documento criado para alunos, observe como ficaria o
comando para salvar os alunos em uma coleção:
db.unifacs.save(aluno1)
db.unifacs.save(aluno2)
O comando acima salva os documentos aluno1 e aluno2 na coleção “unifacs”. É
possível acessar os dados de uma coleção através do comando find(), basicamente
ele vai percorrer todos os registros da coleção e retornar os documentos listados. No
exemplo dado o comando seria: db.unifacs.find(). E para apagar tudo que existe na
coleção: db.unifacs.remove().
Não é necessário que se crie uma coleção ou mesmo que se configure uma estrutura,
isso é feito automaticamente quando o primeiro registro é incluído. No entanto, é
possível usar o comando de criar uma coleção, e isto pode ser utilizado para pré­
atribuir espaço para uma coleção. Uma coleção de tamanho fixo usa o comando
“capped”, e vem a substituir automaticamente as entradas mais antigas quando
atinge seu tamanho máximo.
Todas as coleções limitadas e fixas devem especificar um tamanho máximo e
também podem especificar um número máximo de documentos. O MongoDB remove
os documentos antigos se uma coleção atinge o limite de tamanho máximo antes
que ele atinja a contagem máxima de documentos. Considere o seguinte exemplo:
db.createCollection ("unifacs", {capped: true, size: 5242880, max: 5000})
Este comando cria uma coleção nomeada de “unifacs” com uma dimensão máxima
de 5 megabytes e um máximo de 5000 documentos.
Para visualizar todas as coleções de um banco de dados MongoDB utiliza­se o
seguinte comando
db.getCollectionNames().
Enfim, há muitas diferenças entre os comandos usados no MongoDB e no MySQL. As
quatro operações básicas usadas para criação, consulta, atualização e destruição de
dados, conhecidas como CRUD (Create, Read, Update e Delete), apresentam
comandos bem distintos nos dois tipos de bancos em questão. A Tabela 5 compara
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
20/29
08/04/2015
Comparando o NoSQL ao modelo relacional
alguns comandos de CRUD em ambos os bancos.
MySQL
MongoDB
CREATE TABLE unifacs (
A coleção é criada implicitamente na primeira
id MEDIUMINT NOT NULL
AUTO_INCREMENT,
matricula Number,
nome Varchar(30),
idade Number,
PRIMARY KEY (id)
)
inserção de dados. O _id chave primária é
adicionada automaticamente se o campo _id não
é especificado.
db.unifacs.insert ({
matricula: 04217253,
nome: "Paulo",
idade: 22
})
Coleções não descrevem ou forçam a estrutura
dos seus documentos. No entanto, no nível do
documento, operações de update () podem
adicionar campos para documentos existentes
usando o operador $set e remover usando
$unset.
ALTER TABLE unifacs
db.unifacs.update (
ADD join_date DATETIME
{},
{$set: {join_date: new Date ()}},
{multi: true}
)
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
21/29
08/04/2015
Comparando o NoSQL ao modelo relacional
db.unifacs.update(
ALTER TABLE unifacs
{ },
DROP COLUMN join_date
{ $unset: { join_date: "" } },
{ multi: true }
)
db.unifacs.insert(
INSERT INTO unifacs (matricula, nome,
idade)
{ matricula: 032104211, nome: “Joana”, idade:
21 }
VALUES (032104211, “Joana”, 21)
)
SELECT * FROM unifacs
SELECT * FROM unifacs WHERE idade =
21
db.unifacs.find()
db.unifacs.find( { idade: 21 } )
SELECT * FROM unifacs WHERE nome =
“Joana”
db.unifacs.find( { nome: “Joana”, idade: 21 } )
AND idade = 21
SELECT * FROM unifacs WHERE idade >
db.unifacs.find( { age: { $gt: 20 } } )
20
db.users.count()
SELECT COUNT(*) FROM unifacs
ou
db.unifacs.find().count()
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
22/29
08/04/2015
Comparando o NoSQL ao modelo relacional
UPDATE unifacs SET status = “Aprovado”
db.unifacs.update( { nota: { $gt: 7 } }, {
WHERE nota > 7
$set: { status: “Aprovado” } }, { multi: true } )
UPDATE unifacs SET nota = nota + 1
db.unifacs.update( { status: "Aprovado" } , {
WHERE status = "Aprovado"
$inc: { nota: 1 } }, { multi: true } )
DELETE FROM unifacs WHERE status =
"Reprovado"
db.unifacs.remove( { status: "Reprovado" } )
Tabela 5. Comparativo de alguns exemplos de comandos CRUD em ambos os
bancos
É importante saber que cada documento de uma coleção no MongoDB tem um
tamanho máximo de 16MB, o que é mais do que suficiente para armazenar dados em
um documento. No entanto, o MongoDB ainda é capaz de armazenar arquivos no
banco de dados em uma coleção especifica, que é a coleção do tipo GridFS.
Ela é ideal para trabalhar com arquivos maiores de imagens, vídeo e áudio. O GridFS
divide o arquivo em partes ou pedaços e salva cada pedaço em um documento
separado. Quando você consulta um arquivo no GridFS, é preciso remontar os
pedaços conforme a necessidade.
O MongoDB atinge o objetivo de ser amigável para o desenvolvedor. Possui uma
documentação bem escrita para a maioria dos principais idiomas. Sua consulta
baseada em JavaScript é fácil para os desenvolvedores da Web e ele também é fácil
de instalar. Por estas razões, o MongoDB é uma ótima opção de tecnologia para uso
em uma aplicação.
Um exemplo do sucesso deste banco é o depoimento do especialista em banco de
dados da Globo.com, Franklin Amorim. Em um evento sobre o MongoDB, em 2011 na
cidade de São Paulo, Franklin apresentou o case de sucesso da adoção do MongoDB
para uma nova função do “fantasy game” CartolaFC.
O jogo é maior aplicação dinâmica do portal Globo.com, com mais de 2 milhões de
usuários cadastrados e quase 90 milhões de pageviews somente em um mês.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
23/29
08/04/2015
Comparando o NoSQL ao modelo relacional
A ideia da aplicação era criar uma espécie de “twitter” para os usuários do jogo, com
a finalidade de promover uma maior interação entre os usuários, além de aumentar o
seu tempo de permanência no site.
Na Globo.com, a maioria dos projetos são em banco de dados relacional, porém
resolveram tentar algo novo para o CartolaFC, já que em alguns testes de
performance, as vantagens do MongoDB foram mais atrativas do que o MySQL. Nos
testes realizados pela equipe da Globo conseguiu­se uma velocidade duas vezes
maior com o MongoDB comparado ao MySQL.
O acesso mais natural aos dados no banco via BSON, sem ter que fazer abstrações
de tabelas, foi considerado atrativo pelos desenvolvedores. Não possuir schema
também foi fator de vantagem pela flexibilidade dos documentos criados. E o fato de
o sistema estar sempre ativo devido ao “Failover” automático que mantém o sistema
sempre disponível e a possibilidade de escalar escritas com Sharding foram outros
fatores que levaram a equipe a escolher o MongoDB para a aplicação.
A partir desta experiência de sucesso, outros projetos na Globo.com passaram a usar
o MongoDB. Atualmente tem­se o receitas.com e o novo catálogo de vídeos da
emissora que possui cerca de 800 mil arquivos cadastrados.
Este artigo discutiu as soluções NoSQL como modelo de banco de dados em cenários
onde escalabilidade é a questão principal. O objetivo foi mostrar aos mais
conservadores a existência de uma tecnologia que pode ser uma alternativa ao
tradicional modelo relacional. O desenvolvedor precisa, portanto, observar o cenário
em que está trabalhando para tomar uma decisão coerente de qual modelo de banco
de dados deve usar.
No cenário atual da Web 2.0, Big Data, computação em nuvem e redes sociais, os
modelos tradicionais para gerenciamento de dados têm apresentado limitações,
principalmente no quesito escalabilidade, e assim o NoSQL surgiu como opção.
Atualmente podemos observar grandes empresas e negócios de escala global
fazendo uso dessa tecnologia. Como já citado como exemplos, o Cassandra é usado
no Facebook e Twitter, e o MongoDB está em uso no Foursquare, SourceForge e na
Globo.com. Isto é um indicativo de que esse tipo de tecnologia certamente não será
descartada facilmente como um modismo.
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
24/29
08/04/2015
Comparando o NoSQL ao modelo relacional
O NoSQL não é uma tecnologia de banco de dados totalmente nova e há indícios de
que seu futuro é bastante promissor. Ela oferece a possibilidade e flexibilidade de
manipulação de dados semiestruturados complexos e otimiza soluções para
diferentes tipos de dados nesta era da computação em larga escala. Este artigo
buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior
conhecimento das tecnologias disponíveis como solução no quesito banco de dados.
DevMedia
A DevMedia é um portal para analistas, desenvolvedores de sistemas, gerentes e DBAs com milhares de
artigos, dicas, cursos e videoaulas gratuitos e exclusivos para assinantes.
O que você achou deste post?
Gostei (12)
(0)
Todos os comentarios (2)
Postar dúvida / Comentário
Meus comentarios
Rafael Dantas Silva
Achei o artigo excelente. Parabéns ! No entanto, gostaria de tirar 3 dúvidas. 1º) É possível criar um coleção com "atributos" obrigatórios ? Ex: Colocar como obrigatório o
preenchimento dos atributos "matricula" e "nome" na coleção [unifacs]. 2º) Na modelagem NoSQL Documental é possível criar relacionamentos ? Algo similar a uma FK. 3º) Todos os artigos que vejo sobre NoSQL sempre são com o foco em Desenvolvimento. Gostaria
de saber mais a respeito das tarefas administrativas necessárias para um BD desse tipo. Em um
Banco SQL precisamos coletar estatísticas, realizar rebuild de índices, desfragmentação de
segmentos. Quais tarefas administrativas são necessárias em um BD NoSQL ? [há +1 mês] ­ Responder
Daniella Adriana Da Costa
Olá Rafael, conforme vc já enviou feedback para o autor, vamos postar abaixo a mesma resposta dada
por ele para as suas dúvidas: André, http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
25/29
08/04/2015
Comparando o NoSQL ao modelo relacional
Parabéns mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as
dúvidas. Vou ler os links que você enviou com calma. Rafael Dantas [RESPOSTA DO AUTOR] Olá Rafael Dantas, Fico contente de ter gostado do artigo! A pesquisa que realizei foi bem focada em fazer uma comparação entre os modelos,
portanto não busquei e nem me preocupei com algumas outras demandas da área. Tentei dar uma pesquisada no assunto sobre as perguntas feitas: 1­ No desenvolvimento do meu artigo, ao estudar o mongo e o NoSQL em si, não observei
em nenhum dos artigos que utilizei como referência um relato de possibilidade de tornar
um atributo obrigatório. Pesquisando sobre o assunto vejo que há gem de mapeamento
objeto­documento usadas pra acessar o MongoDB, como Mongoose e MongoID, e nelas há
a possibilidade de usar um validador para verificar se um campo foi definido antes de
salvá­lo e também é possível definir um campo como obrigatório na definição de esquema.
(http://stackoverflow.com/questions/17943609/can­i­require­an­attribute­to­be­set­in­a­
mongodb­collection­not­null) 2­ "Uma diferença fundamental entre os dois modelos surge quando precisamos criar
relacionamentos nos bancos de dados relacionais, diferente dos bancos orientados a
documentos que não fornecem relacionamentos entre documentos, o que mantém seu
design sem esquemas." Leia mais em: Introdução ao MongoDB http://www.devmedia.com.br/introducao­ao­
mongodb/30792#ixzz3A0lWPu00" No entanto, buscando sobre o assunto vi que há a possibilidade de criar algum tipo de
relacionamento quando se usa uma gem como o Mongoid. http://mongoid.org/en/mongoid/docs/relations.html 3­ Os bancos de dados NoSQL são caracterizados por afastar a complexidade dos bancos
SQL. A lógica de validação, controle de acesso, mapeamento de consultas de dados
indexados, correlação entre os dados relacionados, resolução de conflitos, manutenção de
restrições de integridade (constraint), e procedimentos engatilhados são movidos para
fora da camada de banco de dados. Isto permite o foco em performance e escalabilidade.
Uma das grandes vantagens da arquitetura NoSQL é que a lógica pode ser codificada em
qualquer linguagem de programação, ao invés de depender da grande variedade de APIs
complexas em um servidor SQL. 4­ Sobre as tarefas administrativas, não achei nada a respeito. Vi que no próprio site do
Mongodb, há um serviço de gerenciamento: https://mms.mongodb.com Espero ter ajudado! Att, André Simões
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
26/29
08/04/2015
Comparando o NoSQL ao modelo relacional
[há +1 mês] ­ Responder
Serviços
Inclua um comentário
Adicionar aos Favoritos
Marcar como lido/assistido
Incluir anotação pessoal
Versão para impressão
+SQL
Mais posts
Video aula
Terceira Forma Normal - Curso Modelagem de Dados - Aula 26
Video aula
Aplicações da Segunda Forma Normal - Curso Modelagem de
Dados - Aula 25
Video aula
Segunda Forma Normal - Curso Modelagem de Dados - Aula
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
27/29
08/04/2015
Comparando o NoSQL ao modelo relacional
24
Video aula
Primeira Forma Normal - Curso Modelagem de Dados - Aula 23
Video aula
Normalização e Anomalias - Curso Modelagem de Dados Aula 22
Video aula
Dependências Funcionais - Curso Modelagem de Dados - Aula
21
Video aula
MySQL Administrador - Curso Completo de MySQL - Aula 16
Video aula
Ferramentas e Utilitários - Curso Completo de MySQL - Aula 15
Video aula
Mais sobre o Prompt de Comando - Curso Completo de
MySQL - Aula 14
Listar mais conteúdo
Anuncie | Loja | Publique | Assine | Fale conosco
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
28/29
08/04/2015
Comparando o NoSQL ao modelo relacional
DevMedia
Curtir Você curtiu isso.
Você e outras 63.895 pessoas curtiram DevMedia.
Plug­in social do Facebook
Hospedagem web por Porta 80 Web Hosting
http://www.devmedia.com.br/comparando­o­nosql­ao­modelo­relacional/30917
29/29
Download