29
Gostei (12) (0) 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. 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 0 0 Curtir 0

Comparando o NoSQL Ao Modelo Relacional

Embed Size (px)

DESCRIPTION

Comparando o NoSQL ao modelo relacional

Citation preview

Page 1: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 129

Gostei (12) (0)

Buscar

coacutedigo fonte comentaacuterios post favorito (9)

SQL Magazine 123 shy Iacutendice

Comparando o NoSQL aomodelo relacional

Conheccedila nesse artigo os benefiacutecios e dificuldades no uso doNoSQL em comparaccedilatildeo com o modelo de banco de dadosrelacionais

Fique por dentro

O tradicional modelo relacional eacute o tipo de banco de dados mais utilizado nas

uacuteltimas deacutecadas Poreacutem haacute um crescimento cada vez mais intenso do volume de

0 0Curtir0

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 229

dados na era da Big Data redes sociais e computaccedilatildeo na nuvem e certos fatores

limitantes tecircm propiciado o surgimento de modelos alternativos de banco de

dados

O NoSQL vem ganhando espaccedilo no mercado e se tornando uma opccedilatildeo que atende

aos requisitos do ambiente de computaccedilatildeo distribuiacuteda em larga escala permitindo

escalabilidade disponibilidade alto desempenho e confiabilidade Este artigo tem

como objetivo fornecer uma visatildeo geral das soluccedilotildees de banco de dados NoSQL

modernas abordar suas principais caracteriacutesticas mostrar suas principais

diferenccedilas com relaccedilatildeo aos bancos de dados relacionais e apresentar um estudo

de caso de uma destas soluccedilotildees

Por deacutecadas os bancos de dados relacionais tecircm sido a escolha padratildeo para

persistecircncia de dados corporativos No entanto as grandes empresas e aplicaccedilotildees

web estatildeo mudando ao longo dos uacuteltimos anos

Com o aumento da quantidade e do fluxo de informaccedilotildees e a certeza de que sempre

haveraacute mais dados para armazenar o tradicional modelo relacional comeccedila a sofrer

limitaccedilotildees de escalabilidade

Neste cenaacuterio surge uma nova geraccedilatildeo de banco de dados natildeoshyrelacional como

uma maneira de lidar com o crescente volume de dados O NoSQL (Not only SQL)

atende aos requisitos do ambiente de computaccedilatildeo distribuiacuteda em larga escala o que

permite escalabilidade alta disponibilidade alto desempenho e confiabilidade

A grande motivaccedilatildeo para o NoSQL eacute resolver o problema de escalabilidade dos

bancos tradicionais Contudo se faz necessaacuterio analisar todas as suas caracteriacutesticas

para se ter uma visatildeo geral de seus proacutes e contras quando comparado ao modelo

relacional

Este artigo forneceraacute uma visatildeo geral sobre o modelo relacional de banco de dados

suas limitaccedilotildees e as soluccedilotildees do NoSQL como alternativa a este modelo de banco

Esta anaacutelise iraacute abordar os principais recursos e discutir os desafios da tecnologia

NoSQL identificando quais benefiacutecios e dificuldades esta tecnologia traz para a

soluccedilatildeo do grande volume de dados processados atualmente

Aleacutem disso seraacute apresentado atraveacutes de um estudo de caso algumas das

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 329

diferenccedilas identificadas entre os dois modelos

SGBDs RelacionaisO banco de dados no modelo relacional foi proposto por Edgar Codd um pesquisador

da IBM em torno de 1970 Desde entatildeo se tornou o modelo de banco de dados

dominante para aplicaccedilotildees comerciais Hoje haacute 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 relaccedilotildees Uma tabela

eacute composta de linhas e colunas As linhas tambeacutem satildeo chamadas de registros ou

tuplas As colunas tambeacutem satildeo chamadas de campo ou atributo Uma tabela de

banco de dados eacute semelhante a uma folha de caacutelculo

No entanto as relaccedilotildees 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 caracteriacutestica importante deste modelo eacute o uso de elementos para garantir a

integridade dos dados As restriccedilotildees mais comuns satildeo as chaves primaacuterias e as

estrangeiras O termo chave primaacuteria eacute utilizado para identificar o atributo que foi

escolhido pelo projetista do banco para identificar unicamente os registros que satildeo

armazenados em uma determinada tabela

Nenhum registro pode ter o mesmo valor no campo chave primaacuteria de uma

determinada tabela do banco de dados por isso os atributos chaves devem ser

selecionados com muito cuidado Jaacute a chave estrangeira transforma o valor de um

atributo dependente do valor existente em outro atributo normalmente de outra

tabela criando uma relaccedilatildeo de dependecircncia entre atributos de tabelas distintas

As chaves satildeo muito utilizadas em bancos de dados relacionais inclusive para a

criaccedilatildeo de outros componentes como os iacutendices que satildeo usados para melhorar o

desempenho de consultas no banco

Para projetar corretamente as tabelas de um banco de dados relacional temos um

conjunto de orientaccedilotildees que ajudam a reduzir a redundacircncia e chance de corrupccedilatildeo

de dados Eacute o que chamamos de normalizaccedilatildeo As regras de normalizaccedilatildeo satildeo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 429

projetadas para evitar anomalias de atualizaccedilatildeo e inconsistecircncias de dados e ao

mesmo tempo para permitir uma recuperaccedilatildeo mais faacutecil de informaccedilotildees

A linguagem chamada SQL foi desenvolvida para trabalhar com bancos de dados

relacionais Inspirada na aacutelgebra relacional e desenvolvida pela IBM o SQL eacute uma

linguagem declarativa para banco de dados

A facilidade de uso e simplicidade de expressatildeo 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 satildeo as propriedades ACID A sigla

significa Atomicidade Consistecircncia Isolamento e Durabilidade As propriedades ACID

de um SGBD permitem o compartilhamento seguro de dados oferecendo otimizaccedilatildeo

de consultas recuperaccedilatildeo de falhas validaccedilatildeo controle de concorrecircncia e

verificaccedilatildeo de integridade dos dados

Todas essas caracteriacutesticas e recursos deram ao Modelo Relacional de banco de

dados uma posiccedilatildeo de destaque e predominacircncia 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

Limitaccedilotildees do Modelo RelacionalO Walmart um gigante do varejo trabalha com mais de 1 milhatildeo de transaccedilotildees de

clientes por hora alimentando bancos de dados estimados em mais de 25

petabytes Jaacute o Facebook possui em seu banco cerca de 40 bilhotildees de fotos Estes

satildeo exemplos que mostram que o mundo conteacutem enorme quantidade de informaccedilatildeo

digital e que este volume de informaccedilotildees e dados estaacute ficando cada vez maior

rapidamente

Este eacute um dos principais problemas encontrados com a utilizaccedilatildeo do Modelo

Relacional a dificuldade em se usar esse modelo com uma demanda por

escalabilidade cada vez maior As aplicaccedilotildees web que usam banco de dados

relacional vecircm sofrendo com o grande volume de dados e problemas de

desempenho

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 529

Para solucionar tais problemas de escalabilidade geralmente se recorre a duas

alternativas o aumento do nuacutemero de servidores (escalonamento horizontal) ou a

realizaccedilatildeo de um upgrade no servidor (escalonamento vertical)

Isto natildeo eacute o suficiente caso o volume de informaccedilotildees continue a crescer em ritmo

acelerado Com o constante crescimento dos dados a soluccedilatildeo passa a ser escalar o

banco de dados em sistemas distribuiacutedos

Entretanto por causa da natureza estruturada do modelo relacional os

administradores de bancos de dados perceberam uma dificuldade em organizar as

informaccedilotildees em sistemas distribuiacutedos particionando os dados em maacutequinas

diferentes Manusear tabelas em diferentes servidores eacute muito difiacutecil e problemaacutetico

Por conta disso comeccedilam a surgir as soluccedilotildees natildeo relacionais

NoSQLOs desenvolvedores comeccedilaram a pensar em um modelo alternativo para modelar as

bases de dados frente agraves dificuldades encontradas no modelo relacional As soluccedilotildees

propostas para a melhoria de desempenho visavam evitar a riacutegida e tradicional

estrutura usada no modelo relacional

O objetivo dos projetistas de banco de dados das grandes organizaccedilotildees era

desenvolver uma nova maneira de armazenar as informaccedilotildees flexibilizando o banco

de dados para as caracteriacutesticas particulares de sua empresa

Esta flexibilidade eacute fundamental para atender aos requisitos dos sistemas

distribuiacutedos em larga escala permitindo escalabilidade e alta disponibilidade para as

aplicaccedilotildees 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 coacutedigo aberto que natildeo possuiacutea

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

natildeo atendia aos requisitos pretendidos Eacute um movimento totalmente adepto ao

coacutedigo aberto

A intenccedilatildeo do NoSQL natildeo eacute substituir o tradicional modelo relacional e sim ser uma

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 2: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 229

dados na era da Big Data redes sociais e computaccedilatildeo na nuvem e certos fatores

limitantes tecircm propiciado o surgimento de modelos alternativos de banco de

dados

O NoSQL vem ganhando espaccedilo no mercado e se tornando uma opccedilatildeo que atende

aos requisitos do ambiente de computaccedilatildeo distribuiacuteda em larga escala permitindo

escalabilidade disponibilidade alto desempenho e confiabilidade Este artigo tem

como objetivo fornecer uma visatildeo geral das soluccedilotildees de banco de dados NoSQL

modernas abordar suas principais caracteriacutesticas mostrar suas principais

diferenccedilas com relaccedilatildeo aos bancos de dados relacionais e apresentar um estudo

de caso de uma destas soluccedilotildees

Por deacutecadas os bancos de dados relacionais tecircm sido a escolha padratildeo para

persistecircncia de dados corporativos No entanto as grandes empresas e aplicaccedilotildees

web estatildeo mudando ao longo dos uacuteltimos anos

Com o aumento da quantidade e do fluxo de informaccedilotildees e a certeza de que sempre

haveraacute mais dados para armazenar o tradicional modelo relacional comeccedila a sofrer

limitaccedilotildees de escalabilidade

Neste cenaacuterio surge uma nova geraccedilatildeo de banco de dados natildeoshyrelacional como

uma maneira de lidar com o crescente volume de dados O NoSQL (Not only SQL)

atende aos requisitos do ambiente de computaccedilatildeo distribuiacuteda em larga escala o que

permite escalabilidade alta disponibilidade alto desempenho e confiabilidade

A grande motivaccedilatildeo para o NoSQL eacute resolver o problema de escalabilidade dos

bancos tradicionais Contudo se faz necessaacuterio analisar todas as suas caracteriacutesticas

para se ter uma visatildeo geral de seus proacutes e contras quando comparado ao modelo

relacional

Este artigo forneceraacute uma visatildeo geral sobre o modelo relacional de banco de dados

suas limitaccedilotildees e as soluccedilotildees do NoSQL como alternativa a este modelo de banco

Esta anaacutelise iraacute abordar os principais recursos e discutir os desafios da tecnologia

NoSQL identificando quais benefiacutecios e dificuldades esta tecnologia traz para a

soluccedilatildeo do grande volume de dados processados atualmente

Aleacutem disso seraacute apresentado atraveacutes de um estudo de caso algumas das

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 329

diferenccedilas identificadas entre os dois modelos

SGBDs RelacionaisO banco de dados no modelo relacional foi proposto por Edgar Codd um pesquisador

da IBM em torno de 1970 Desde entatildeo se tornou o modelo de banco de dados

dominante para aplicaccedilotildees comerciais Hoje haacute 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 relaccedilotildees Uma tabela

eacute composta de linhas e colunas As linhas tambeacutem satildeo chamadas de registros ou

tuplas As colunas tambeacutem satildeo chamadas de campo ou atributo Uma tabela de

banco de dados eacute semelhante a uma folha de caacutelculo

No entanto as relaccedilotildees 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 caracteriacutestica importante deste modelo eacute o uso de elementos para garantir a

integridade dos dados As restriccedilotildees mais comuns satildeo as chaves primaacuterias e as

estrangeiras O termo chave primaacuteria eacute utilizado para identificar o atributo que foi

escolhido pelo projetista do banco para identificar unicamente os registros que satildeo

armazenados em uma determinada tabela

Nenhum registro pode ter o mesmo valor no campo chave primaacuteria de uma

determinada tabela do banco de dados por isso os atributos chaves devem ser

selecionados com muito cuidado Jaacute a chave estrangeira transforma o valor de um

atributo dependente do valor existente em outro atributo normalmente de outra

tabela criando uma relaccedilatildeo de dependecircncia entre atributos de tabelas distintas

As chaves satildeo muito utilizadas em bancos de dados relacionais inclusive para a

criaccedilatildeo de outros componentes como os iacutendices que satildeo usados para melhorar o

desempenho de consultas no banco

Para projetar corretamente as tabelas de um banco de dados relacional temos um

conjunto de orientaccedilotildees que ajudam a reduzir a redundacircncia e chance de corrupccedilatildeo

de dados Eacute o que chamamos de normalizaccedilatildeo As regras de normalizaccedilatildeo satildeo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 429

projetadas para evitar anomalias de atualizaccedilatildeo e inconsistecircncias de dados e ao

mesmo tempo para permitir uma recuperaccedilatildeo mais faacutecil de informaccedilotildees

A linguagem chamada SQL foi desenvolvida para trabalhar com bancos de dados

relacionais Inspirada na aacutelgebra relacional e desenvolvida pela IBM o SQL eacute uma

linguagem declarativa para banco de dados

A facilidade de uso e simplicidade de expressatildeo 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 satildeo as propriedades ACID A sigla

significa Atomicidade Consistecircncia Isolamento e Durabilidade As propriedades ACID

de um SGBD permitem o compartilhamento seguro de dados oferecendo otimizaccedilatildeo

de consultas recuperaccedilatildeo de falhas validaccedilatildeo controle de concorrecircncia e

verificaccedilatildeo de integridade dos dados

Todas essas caracteriacutesticas e recursos deram ao Modelo Relacional de banco de

dados uma posiccedilatildeo de destaque e predominacircncia 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

Limitaccedilotildees do Modelo RelacionalO Walmart um gigante do varejo trabalha com mais de 1 milhatildeo de transaccedilotildees de

clientes por hora alimentando bancos de dados estimados em mais de 25

petabytes Jaacute o Facebook possui em seu banco cerca de 40 bilhotildees de fotos Estes

satildeo exemplos que mostram que o mundo conteacutem enorme quantidade de informaccedilatildeo

digital e que este volume de informaccedilotildees e dados estaacute ficando cada vez maior

rapidamente

Este eacute um dos principais problemas encontrados com a utilizaccedilatildeo do Modelo

Relacional a dificuldade em se usar esse modelo com uma demanda por

escalabilidade cada vez maior As aplicaccedilotildees web que usam banco de dados

relacional vecircm sofrendo com o grande volume de dados e problemas de

desempenho

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 529

Para solucionar tais problemas de escalabilidade geralmente se recorre a duas

alternativas o aumento do nuacutemero de servidores (escalonamento horizontal) ou a

realizaccedilatildeo de um upgrade no servidor (escalonamento vertical)

Isto natildeo eacute o suficiente caso o volume de informaccedilotildees continue a crescer em ritmo

acelerado Com o constante crescimento dos dados a soluccedilatildeo passa a ser escalar o

banco de dados em sistemas distribuiacutedos

Entretanto por causa da natureza estruturada do modelo relacional os

administradores de bancos de dados perceberam uma dificuldade em organizar as

informaccedilotildees em sistemas distribuiacutedos particionando os dados em maacutequinas

diferentes Manusear tabelas em diferentes servidores eacute muito difiacutecil e problemaacutetico

Por conta disso comeccedilam a surgir as soluccedilotildees natildeo relacionais

NoSQLOs desenvolvedores comeccedilaram a pensar em um modelo alternativo para modelar as

bases de dados frente agraves dificuldades encontradas no modelo relacional As soluccedilotildees

propostas para a melhoria de desempenho visavam evitar a riacutegida e tradicional

estrutura usada no modelo relacional

O objetivo dos projetistas de banco de dados das grandes organizaccedilotildees era

desenvolver uma nova maneira de armazenar as informaccedilotildees flexibilizando o banco

de dados para as caracteriacutesticas particulares de sua empresa

Esta flexibilidade eacute fundamental para atender aos requisitos dos sistemas

distribuiacutedos em larga escala permitindo escalabilidade e alta disponibilidade para as

aplicaccedilotildees 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 coacutedigo aberto que natildeo possuiacutea

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

natildeo atendia aos requisitos pretendidos Eacute um movimento totalmente adepto ao

coacutedigo aberto

A intenccedilatildeo do NoSQL natildeo eacute substituir o tradicional modelo relacional e sim ser uma

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 3: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 329

diferenccedilas identificadas entre os dois modelos

SGBDs RelacionaisO banco de dados no modelo relacional foi proposto por Edgar Codd um pesquisador

da IBM em torno de 1970 Desde entatildeo se tornou o modelo de banco de dados

dominante para aplicaccedilotildees comerciais Hoje haacute 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 relaccedilotildees Uma tabela

eacute composta de linhas e colunas As linhas tambeacutem satildeo chamadas de registros ou

tuplas As colunas tambeacutem satildeo chamadas de campo ou atributo Uma tabela de

banco de dados eacute semelhante a uma folha de caacutelculo

No entanto as relaccedilotildees 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 caracteriacutestica importante deste modelo eacute o uso de elementos para garantir a

integridade dos dados As restriccedilotildees mais comuns satildeo as chaves primaacuterias e as

estrangeiras O termo chave primaacuteria eacute utilizado para identificar o atributo que foi

escolhido pelo projetista do banco para identificar unicamente os registros que satildeo

armazenados em uma determinada tabela

Nenhum registro pode ter o mesmo valor no campo chave primaacuteria de uma

determinada tabela do banco de dados por isso os atributos chaves devem ser

selecionados com muito cuidado Jaacute a chave estrangeira transforma o valor de um

atributo dependente do valor existente em outro atributo normalmente de outra

tabela criando uma relaccedilatildeo de dependecircncia entre atributos de tabelas distintas

As chaves satildeo muito utilizadas em bancos de dados relacionais inclusive para a

criaccedilatildeo de outros componentes como os iacutendices que satildeo usados para melhorar o

desempenho de consultas no banco

Para projetar corretamente as tabelas de um banco de dados relacional temos um

conjunto de orientaccedilotildees que ajudam a reduzir a redundacircncia e chance de corrupccedilatildeo

de dados Eacute o que chamamos de normalizaccedilatildeo As regras de normalizaccedilatildeo satildeo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 429

projetadas para evitar anomalias de atualizaccedilatildeo e inconsistecircncias de dados e ao

mesmo tempo para permitir uma recuperaccedilatildeo mais faacutecil de informaccedilotildees

A linguagem chamada SQL foi desenvolvida para trabalhar com bancos de dados

relacionais Inspirada na aacutelgebra relacional e desenvolvida pela IBM o SQL eacute uma

linguagem declarativa para banco de dados

A facilidade de uso e simplicidade de expressatildeo 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 satildeo as propriedades ACID A sigla

significa Atomicidade Consistecircncia Isolamento e Durabilidade As propriedades ACID

de um SGBD permitem o compartilhamento seguro de dados oferecendo otimizaccedilatildeo

de consultas recuperaccedilatildeo de falhas validaccedilatildeo controle de concorrecircncia e

verificaccedilatildeo de integridade dos dados

Todas essas caracteriacutesticas e recursos deram ao Modelo Relacional de banco de

dados uma posiccedilatildeo de destaque e predominacircncia 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

Limitaccedilotildees do Modelo RelacionalO Walmart um gigante do varejo trabalha com mais de 1 milhatildeo de transaccedilotildees de

clientes por hora alimentando bancos de dados estimados em mais de 25

petabytes Jaacute o Facebook possui em seu banco cerca de 40 bilhotildees de fotos Estes

satildeo exemplos que mostram que o mundo conteacutem enorme quantidade de informaccedilatildeo

digital e que este volume de informaccedilotildees e dados estaacute ficando cada vez maior

rapidamente

Este eacute um dos principais problemas encontrados com a utilizaccedilatildeo do Modelo

Relacional a dificuldade em se usar esse modelo com uma demanda por

escalabilidade cada vez maior As aplicaccedilotildees web que usam banco de dados

relacional vecircm sofrendo com o grande volume de dados e problemas de

desempenho

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 529

Para solucionar tais problemas de escalabilidade geralmente se recorre a duas

alternativas o aumento do nuacutemero de servidores (escalonamento horizontal) ou a

realizaccedilatildeo de um upgrade no servidor (escalonamento vertical)

Isto natildeo eacute o suficiente caso o volume de informaccedilotildees continue a crescer em ritmo

acelerado Com o constante crescimento dos dados a soluccedilatildeo passa a ser escalar o

banco de dados em sistemas distribuiacutedos

Entretanto por causa da natureza estruturada do modelo relacional os

administradores de bancos de dados perceberam uma dificuldade em organizar as

informaccedilotildees em sistemas distribuiacutedos particionando os dados em maacutequinas

diferentes Manusear tabelas em diferentes servidores eacute muito difiacutecil e problemaacutetico

Por conta disso comeccedilam a surgir as soluccedilotildees natildeo relacionais

NoSQLOs desenvolvedores comeccedilaram a pensar em um modelo alternativo para modelar as

bases de dados frente agraves dificuldades encontradas no modelo relacional As soluccedilotildees

propostas para a melhoria de desempenho visavam evitar a riacutegida e tradicional

estrutura usada no modelo relacional

O objetivo dos projetistas de banco de dados das grandes organizaccedilotildees era

desenvolver uma nova maneira de armazenar as informaccedilotildees flexibilizando o banco

de dados para as caracteriacutesticas particulares de sua empresa

Esta flexibilidade eacute fundamental para atender aos requisitos dos sistemas

distribuiacutedos em larga escala permitindo escalabilidade e alta disponibilidade para as

aplicaccedilotildees 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 coacutedigo aberto que natildeo possuiacutea

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

natildeo atendia aos requisitos pretendidos Eacute um movimento totalmente adepto ao

coacutedigo aberto

A intenccedilatildeo do NoSQL natildeo eacute substituir o tradicional modelo relacional e sim ser uma

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 4: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 429

projetadas para evitar anomalias de atualizaccedilatildeo e inconsistecircncias de dados e ao

mesmo tempo para permitir uma recuperaccedilatildeo mais faacutecil de informaccedilotildees

A linguagem chamada SQL foi desenvolvida para trabalhar com bancos de dados

relacionais Inspirada na aacutelgebra relacional e desenvolvida pela IBM o SQL eacute uma

linguagem declarativa para banco de dados

A facilidade de uso e simplicidade de expressatildeo 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 satildeo as propriedades ACID A sigla

significa Atomicidade Consistecircncia Isolamento e Durabilidade As propriedades ACID

de um SGBD permitem o compartilhamento seguro de dados oferecendo otimizaccedilatildeo

de consultas recuperaccedilatildeo de falhas validaccedilatildeo controle de concorrecircncia e

verificaccedilatildeo de integridade dos dados

Todas essas caracteriacutesticas e recursos deram ao Modelo Relacional de banco de

dados uma posiccedilatildeo de destaque e predominacircncia 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

Limitaccedilotildees do Modelo RelacionalO Walmart um gigante do varejo trabalha com mais de 1 milhatildeo de transaccedilotildees de

clientes por hora alimentando bancos de dados estimados em mais de 25

petabytes Jaacute o Facebook possui em seu banco cerca de 40 bilhotildees de fotos Estes

satildeo exemplos que mostram que o mundo conteacutem enorme quantidade de informaccedilatildeo

digital e que este volume de informaccedilotildees e dados estaacute ficando cada vez maior

rapidamente

Este eacute um dos principais problemas encontrados com a utilizaccedilatildeo do Modelo

Relacional a dificuldade em se usar esse modelo com uma demanda por

escalabilidade cada vez maior As aplicaccedilotildees web que usam banco de dados

relacional vecircm sofrendo com o grande volume de dados e problemas de

desempenho

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 529

Para solucionar tais problemas de escalabilidade geralmente se recorre a duas

alternativas o aumento do nuacutemero de servidores (escalonamento horizontal) ou a

realizaccedilatildeo de um upgrade no servidor (escalonamento vertical)

Isto natildeo eacute o suficiente caso o volume de informaccedilotildees continue a crescer em ritmo

acelerado Com o constante crescimento dos dados a soluccedilatildeo passa a ser escalar o

banco de dados em sistemas distribuiacutedos

Entretanto por causa da natureza estruturada do modelo relacional os

administradores de bancos de dados perceberam uma dificuldade em organizar as

informaccedilotildees em sistemas distribuiacutedos particionando os dados em maacutequinas

diferentes Manusear tabelas em diferentes servidores eacute muito difiacutecil e problemaacutetico

Por conta disso comeccedilam a surgir as soluccedilotildees natildeo relacionais

NoSQLOs desenvolvedores comeccedilaram a pensar em um modelo alternativo para modelar as

bases de dados frente agraves dificuldades encontradas no modelo relacional As soluccedilotildees

propostas para a melhoria de desempenho visavam evitar a riacutegida e tradicional

estrutura usada no modelo relacional

O objetivo dos projetistas de banco de dados das grandes organizaccedilotildees era

desenvolver uma nova maneira de armazenar as informaccedilotildees flexibilizando o banco

de dados para as caracteriacutesticas particulares de sua empresa

Esta flexibilidade eacute fundamental para atender aos requisitos dos sistemas

distribuiacutedos em larga escala permitindo escalabilidade e alta disponibilidade para as

aplicaccedilotildees 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 coacutedigo aberto que natildeo possuiacutea

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

natildeo atendia aos requisitos pretendidos Eacute um movimento totalmente adepto ao

coacutedigo aberto

A intenccedilatildeo do NoSQL natildeo eacute substituir o tradicional modelo relacional e sim ser uma

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 5: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 529

Para solucionar tais problemas de escalabilidade geralmente se recorre a duas

alternativas o aumento do nuacutemero de servidores (escalonamento horizontal) ou a

realizaccedilatildeo de um upgrade no servidor (escalonamento vertical)

Isto natildeo eacute o suficiente caso o volume de informaccedilotildees continue a crescer em ritmo

acelerado Com o constante crescimento dos dados a soluccedilatildeo passa a ser escalar o

banco de dados em sistemas distribuiacutedos

Entretanto por causa da natureza estruturada do modelo relacional os

administradores de bancos de dados perceberam uma dificuldade em organizar as

informaccedilotildees em sistemas distribuiacutedos particionando os dados em maacutequinas

diferentes Manusear tabelas em diferentes servidores eacute muito difiacutecil e problemaacutetico

Por conta disso comeccedilam a surgir as soluccedilotildees natildeo relacionais

NoSQLOs desenvolvedores comeccedilaram a pensar em um modelo alternativo para modelar as

bases de dados frente agraves dificuldades encontradas no modelo relacional As soluccedilotildees

propostas para a melhoria de desempenho visavam evitar a riacutegida e tradicional

estrutura usada no modelo relacional

O objetivo dos projetistas de banco de dados das grandes organizaccedilotildees era

desenvolver uma nova maneira de armazenar as informaccedilotildees flexibilizando o banco

de dados para as caracteriacutesticas particulares de sua empresa

Esta flexibilidade eacute fundamental para atender aos requisitos dos sistemas

distribuiacutedos em larga escala permitindo escalabilidade e alta disponibilidade para as

aplicaccedilotildees 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 coacutedigo aberto que natildeo possuiacutea

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

natildeo atendia aos requisitos pretendidos Eacute um movimento totalmente adepto ao

coacutedigo aberto

A intenccedilatildeo do NoSQL natildeo eacute substituir o tradicional modelo relacional e sim ser uma

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 6: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 629

alternativa para as empresas que necessitam de um modelo de banco de dados mais

flexiacutevel para suportar o seu volume de dados

A constante tendecircncia de computaccedilatildeo em nuvem e o crescimento das redes sociais

satildeo fatores importantes que levam ao desenvolvimento de armazenamento NoSQL

Apesar da existecircncia de muitos bancos de dados NoSQL o movimento ganhou forccedila

quando grandes empresas da tecnologia passaram a usar suas proacuteprias

implementaccedilotildees a fim de fornecer serviccedilos para seus sistemas distribuiacutedos

Buscando atender suas necessidades de armazenamento em 2004 o Google criou o

BigTable

Na sequecircncia buscando tambeacutem a alta disponibilidade a Amazon lanccedilou o Dynamo

Em 2008 o Facebook desenvolveu o Cassandra para tratar o grande volume de

dados e este se mostrou tatildeo eficiente que em 2010 o Twitter deixou o MySQL de

lado para usaacuteshylo

Outras soluccedilotildees lanccediladas satildeo o Apache CouchDB e o MongoDB que satildeo banco de

dados orientados a documentos e com caracteriacutesticas bem semelhantes como alta

performance e escalaacuteveis projetados para suportar sistemas distribuiacutedos em larga

escala

Todos os bancos citados satildeo considerados NoSQL possuem caracteriacutesticas

semelhantes mas tambeacutem possuem particularidades que os diferenciam A proacutexima

seccedilatildeo aborda justamente os diferentes modelos de bancos de dados NoSQL

mostrando suas caracteriacutesticas

31 Modelos de BD NoSQLMais e mais organizaccedilotildees tecircm adotado soluccedilotildees NoSQL para apoiar seus projetos

Estas soluccedilotildees apresentam caracteriacutesticas em comum como uma maior

escalabilidade e alta disponibilidade mas tambeacutem apresentam diversas

singularidades Os bancos de dados NoSQL satildeo subdivididos pela maneira como

armazenam as informaccedilotildees Os principais tipos satildeo Armazenamento ChaveshyValor

(KeyValue) Documento Coluna e Grafo

A soluccedilatildeo chaveshyvalor armazena qualquer coisa como pares de valoresshychave o que

implica valores armazenados recuperados por chaves uacutenicas Satildeo capazes de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 7: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 729

armazenar grandes quantidades de dados e no entanto mantecircm o acesso simples

por uma chave primaacuteria

Este tipo de armazenamento funciona bem para listas como as categorias de

produtos os atributos de cada produto carrinho de compras conteuacutedos ou valores

individuais etc

Por conta disto o Amazon Dynamo eacute uma soluccedilatildeo que adota este modelo Os dados

deste sistema satildeo particionados e replicados usando hashing consistente a fim de

fornecer a escalabilidade e disponibilidade

O segundo modelo de soluccedilatildeo muda o tradicional paradigma de orientaccedilatildeo a

registros (ou tuplas) para orientaccedilatildeo a colunas (ou atributos) Aqui os dados seguem

uma indexaccedilatildeo tripla (linha coluna e timestamp) onde as linhas e as colunas satildeo

identificadas por chaves e o timestamp possibilita a diferenciaccedilatildeo de muacuteltiplas

versotildees de um mesmo dado

Alguns modelos deste tipo de armazenamento possuem colunas (registros que

possuem nome valor e timestamp) famiacutelias de colunas (uma coleccedilatildeo de colunas

equivalente a uma tabela do Modelo Relacional) e supershycolunas (formadas por

arrays de colunas)

O conceito de famiacutelia de colunas pode ser observado na Figura 1 onde

primeiroNome e sobrenome satildeo colunas pertencentes agrave famiacutelia de colunas

denominada nome e as colunas endereccedilo e cidade pertencem agrave famiacutelia local Dois

grandes exemplos de sistemas orientados a coluna satildeo o Cassandra e o BigTable

Figura 1 Exemplo de modelo baseado em colunas

Jaacute uma soluccedilatildeo baseada em documento eacute um tipo de banco de dados que armazena

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 8: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 829

coleccedilotildees de documentos Os documentos satildeo representados como objetos com um

uacutenico identificador e um conjunto de campos que podem ser strings listas ou

documentos aninhados Como esta base de dados eacute semiestruturada e natildeo possui

esquema uma informaccedilatildeo especiacutefica 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 temshyse 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 trecircs

componentes baacutesicos os veacutertices (satildeo os noacutes do grafo) as arestas (satildeo os

relacionamentos entre os noacutes) e os atributos dos noacutes e relacionamentos Os dados

satildeo armazenados nos noacutes do grafo e as arestas representam o tipo de associaccedilatildeo

entre eles

Novas arestas podem ser adicionadas (ou as antigas removidas) a qualquer

momento permitindo que relaccedilotildees 1shyN (um para muitos) e NshyN (muitos para muitos)

sejam expressas de forma faacutecil Construccedilotildees como amigos seguidores graus de

separaccedilatildeo listas satildeo muito naturalmente acomodadas em bancos de dados do tipo

grafo

A Figura 3 representa um exemplo de grafo de uma aplicaccedilatildeo que possui

informaccedilotildees 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

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 9: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 929

No exemplo da figura temos trecircs pessoas que satildeo noacutes do grafo e estatildeo conectados agrave

cidades que ou jaacute visitaram ou moraram Atraveacutes da representaccedilatildeo do grafo fica faacutecil

perceber que Maria e Joseacute jaacute visitaram o Rio de Janeiro

E que Joatildeo jaacute morou em Recife e Salvador Um exemplo de banco de dados baseado

em grafo eacute o Neo4j que eacute openshysource e implementado em Java

Figura 3 Exemplo de modelo baseado em grafo

Eacute importante ressaltar que nenhum dos modelos apresentados deve ser considerado

superior ao outro pois tudo depende da necessidade da aplicaccedilatildeo Eacute importante que

os desenvolvedores conheccedilam os diversos modelos de soluccedilatildeo para que seja

adotado aquele que mais se adequar ao que a aplicaccedilatildeo ou empresa precisa Isto

contribui para a diminuiccedilatildeo do custo de criaccedilatildeo do banco de dados e com o aumento

do desempenho no processamento dos dados

A Tabela 1 apresenta uma comparaccedilatildeo dos modelos apresentados destacando suas

principais vantagens e desvantagens e ainda citando seus principais exemplos e

suas disponibilidades

Tipo Vantagem Desvantagem Exemplos Disponibilidade

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 10: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1029

ChaveValor

Simplicidade

e

escalabilidade

Falta recursos

mais

avanccedilados de

consulta

Amazon

DynamoDB

O niacutevel gratuito da AWS inclui 100

MB de armazenamento 5 unidades

de capacidade de gravaccedilatildeo e 10

unidades de capacidade de leitura

com o Amazon DynamoDB

Disponiacutevel em

httpawsamazoncomptdynamodb

DocumentoFacilidade de

uso

Natildeo eacute

adequado para

dados

relacionais

Consulta

limitada a

chaves e

iacutendices

MongoDB

CouchDB

Como a maioria das licenccedilas de

software livre permite seja usado

modificado e distribuiacutedo por usuaacuterios

Podeshyse adquirir o MongoDB em

httpwwwmongodborg

e CouchDB

httpcouchdbapacheorg

ColunaEscalabilidade

e flexibilidadeComplexidade

Google Big

Table

Cassandra

BigTable foi desenvolvida no Google

em tem sido usado desde 2005 em

dezenas de serviccedilos do Google Uma

versatildeo de coacutedigo aberto HBase foi

criado pelo Apache

httphbaseapacheorg

Jaacute o Cassandra tambeacutem pode ser

adquirido de forma gratuita

httpcassandraapacheorg

Grafo

Modelo de

dados

poderoso e

raacutepido

Flexibilidade

Neo4j Como os demais acima o Neo4j

tambeacutem estaacute disponiacutevel para

download em httpwwwneo4jorg

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 11: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1129

Tabela 1 Anaacutelise comparativa dos modelos de BD NoSQL

Modelo Relacional x NoSQLAo se comparar os modelos em questatildeo uma grande diferenccedila a se notar eacute que as

tecnologias relacionais tecircm esquemas riacutegidos enquanto os modelos NoSQL satildeo

schemashyfree ou seja sem esquema O modelo relacional requer uma definiccedilatildeo

estrita de um esquema antes de armazenar todos os dados em um banco de dados

Alterar o esquema uma vez que os dados jaacute estatildeo inseridos eacute muito complicado e

por isso evitado No entanto isto eacute exatamente o oposto do comportamento

desejado na era ldquoBig Datardquo 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 trecircs criteacuterios satildeo

considerados relevantes para esta escolha escalonamento consistecircncia de dados e

disponibilidade E eacute isto que seraacute abordado a partir de agora

Basicamente pelo fato de terem sido criados para essa finalidade os bancos NoSQL

apresentam vantagens em relaccedilatildeo 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 cenaacuterios em que o escalonamento eacute

necessaacuterio

Eacute possiacutevel tornar um banco de dados relacional mais escalaacutevel atraveacutes da teacutecnica de

escalonamento vertical onde eacute feita uma atualizaccedilatildeo (upgrade) no servidor de

bancos de dados

Poreacutem este escalonamento fica limitado agrave capacidade de uma uacutenica maacutequina Jaacute o

escalonamento horizontal eacute feito com o aumento da quantidade de servidores que

iratildeo disponibilizar os dados paralelamente (Figura 4) facilitando o acesso aos dados

e garantindo que a queda de um servidor natildeo seja um problema de disponibilidade

dos dados

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 12: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1229

Figura 4 O uso do escalonamento horizontal

Outra caracteriacutestica a favor do NoSQL eacute o uso do sharding que consiste em trabalhar

com o escalonamento horizontal particionando e paralelizando seus dados em vaacuterios

servidores (Figura 5) Essa teacutecnica eacute complexa para se usar em SGBDs relacionais

devido a toda a sua estrutura loacutegica e devido ao uso da desnormalizaccedilatildeo dos dados

o contraacuterio usado no modelo relacional

O sharding traz benefiacutecios pois conjuntos de dados menores satildeo mais faacuteceis de

serem acessados atualizados e gerenciados O maior benefiacutecio em comparaccedilatildeo ao

modelo relacional eacute a otimizaccedilatildeo do grau de disponibilidade do sistema pois como

jaacute dito anteriormente a queda de uma maacutequina natildeo causaria a interrupccedilatildeo de todo o

sistema

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 13: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1329

Figura 5 Teacutecnica de sharding

O controle de concorrecircncia tambeacutem funciona de maneira distinta nos modelos em

questatildeo O modelo relacional utiliza bloqueios (locks) como garantia de que dois

usuaacuterios natildeo atualizem o mesmo dado ao mesmo tempo Jaacute no modelo NoSQL satildeo

usadas outras estrateacutegias para permitir um maior grau de concorrecircncia

Alguns bancos NoSQL usam o MVCC (Multiversion Concurrency Control) ou Controle

de Concorrecircncia Multishyversotildees Nesta teacutecnica o acesso aos dados pode ser realizado

em paralelo

Cada usuaacuterio que se conecta ao banco de dados visualiza uma coacutepia temporaacuteria do

banco de dados naquele instante Qualquer atualizaccedilatildeo que esteja sendo feita em

determinado momento por um usuaacuterio natildeo seraacute vista pelos demais que estatildeo

operando simultaneamente no banco de dados ateacute que a atualizaccedilatildeo tenha sido

concluiacuteda

Quando se opta por usar um modelo NoSQL haacute ganhos de performance flexibilidade

e disponibilidade mas haacute uma perda de consistecircncia Haacute um teorema na ciecircncia da

computaccedilatildeo criado Eric Brewer chamado Teorema CAP (Consistency Availability e

Partition Tolerance) que diz ser impossiacutevel para um sistema distribuiacutedo garantir

consistecircncia disponibilidade e toleracircncia ao particionamento De forma simultacircnea

soacute eacute possiacutevel conseguir duas destas trecircs caracteriacutesticas Vejamos exemplos de

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 14: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1429

SGBDs na Figura 6 segundo o Teorema CAP

Figura 6 Distribuiccedilatildeo relativa de alguns bancos de dados quanto ao Teorema CAP

As soluccedilotildees NoSQL seguem um paradigma denominado BASE (Basically Available

Soft state Eventual consistency) Este tem como caracteriacutesticas estar basicamente

disponiacutevel o tempo todo estar em estado leve ou seja natildeo sendo consistente o

tempo todo e possuir uma consistecircncia eventual o sistema se torna consistente no

momento apropriado

O modelo BASE eacute um contraste ao paradigma ACID (Atomicity Consistency

Isolation Durability) comumente associado aos bancos de dados de modelo

relacional Ao contraacuterio do modelo ACID que promove uma seguranccedila dos dados

forccedilando a consistecircncia ao final de cada operaccedilatildeo o modelo BASE permite que o

banco de dados esteja em um estado eventualmente consistente

A disponibilidade do modelo BASE estaacute associada justamente ao fato de que a falha

de uma maacutequina do sistema natildeo interrompe o sistema como um todo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 15: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1529

Para se analisar de forma mais raacutepida e comparativa a Tabela 2 apresenta as

principais caracteriacutesticas de ambos os modelos discutidos aqui

Modelo Relacional NoSQL

Escalonamento Possui sua natureza

estruturada e por conta disto

o escalonamento de bancos

tende a ser uma tarefa

complexa

Eacute livre de esquemas por isso

o NoSQL possui uma maior

flexibilidade e alta

escalabilidade considerada

uma das principais vantagens

desse modelo

Consistecircncia Possui uma estrutura mais

riacutegida e garante em suas

transaccedilotildees a existecircncia dessa

propriedade As diversas

regras deste modelo

possibilitam uma maior

rigidez quanto a garantia de

consistecircncia dos dados

sendo este o ponto mais

forte desse modelo

A consistecircncia nesse modelo

possui um caraacuteter eventual

o que natildeo garante que uma

determinada atualizaccedilatildeo em

um dado momento seja

percebida por todos os noacutes

Disponibilidade Haacute uma dificuldade de se

trabalhar de forma eficiente

com a distribuiccedilatildeo de dados

por causa de sua natureza

estruturada situaccedilotildees em

que exigem uma maior

demanda de um sistema que

utilizem esse modelo podem

natildeo ser bem suportadas por

ele

Considerada outra das

grandes vantagens do

modelo essa propriedade

junto com o alto grau de

distribuiccedilatildeo desse modelo

possibilita que o sistema

fique um menor periacuteodo de

tempo natildeoshydisponiacutevel assim

como tambeacutem permite que a

solicitaccedilatildeo aos dados por um

nuacutemero crescente de clientes

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 16: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1629

seja atendida

Toleracircncia a

Particionamento

Por natildeo terem sido

construiacutedo com a finalidade

de trabalhar com

particionamento de dados

este modelo natildeo possui um

grau muito alto de toleracircncia

ao particionamento cuja

razatildeo principal seria a

dificuldade de junccedilotildees entre

as tabelas

Trabalha de forma faacutecil e

eficiente com a distribuiccedilatildeo

de dados Este modelo eacute

capaz de suportar grandes

demandas de dados assim

como possui alta toleracircncia

ao particionamento dos

mesmos

Tabela 2 Anaacutelise 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 verificaccedilatildeo contiacutenua

da consistecircncia de cada transaccedilatildeo adiciona custos consideraacuteveis para um sistema

que tem milhares de transaccedilotildees ocorrendo

A consistecircncia eventual promovida pelo modelo BASE daacute agraves organizaccedilotildees a

capacidade de interagir com os clientes de forma contiacutenua com a necessaacuteria

disponibilidade e toleracircncia a particcedilatildeo mantendo baixos custos e o sistema rodando

sem interrupccedilotildees Sem duacutevida seria excelente ter consistecircncia completa o tempo

todo mas eacute preciso haver compensaccedilotildees e a consistecircncia eventual permite o

desenvolvimento eficaz de sistemas que podem lidar com o aumento exponencial de

dados devido agraves redes sociais computaccedilatildeo em nuvem e outros projetos de Big Data

Estudo de Caso shy MongoDBPara fins comparativos seratildeo analisadas nesta seccedilatildeo algumas diferenccedilas entre um

banco NoSQL o MongoDB e os bancos relacionais baseados em SQL O MongoDB eacute

um banco de dados NoSQL criado em 2009 pela empresa 10gen orientado a

documentos altamente escalaacutevel de alta performance e de coacutedigo aberto O

cofundador e diretor de tecnologia da 10gen define o MongoDB da seguinte forma ldquoO

MongoDB natildeo foi concebido em um laboratoacuterio

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 17: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1729

Noacutes construiacutemos o MongoDB com base em nossas experiecircncias na construccedilatildeo de

sistemas robustos de grande escala e alta disponibilidade Natildeo comeccedilamos do zero

noacutes tentamos descobrir o que estava problemaacutetico e solucionamos isso

Assim o que eu penso sobre MongoDB eacute que se vocecirc pegar o MySQL e alterar o

modelo de dados do relacional para orientado a documento vocecirc ganha uma grande

quantidade de recursos documentos embarcados para melhorar velocidade

facilidade de gerenciamento desenvolvimento aacutegil com bancos de dados sem

ldquoschemardquo escalabilidade horizontal mais faacutecil pois ldquojoinsrdquo natildeo satildeo tatildeo importantes

Haacute muitas coisas que funcionam muito bem nos bancos de dados relacionais iacutendices

consultas dinacircmicas e atualizaccedilotildees e noacutes natildeo mudamos muito neste ponto Por

exemplo a maneira de projetar seus iacutendices no MongoDB deve ser exatamente do

jeito que vocecirc faz isso no MySQL ou Oracle vocecirc soacute ganha a opccedilatildeo de indexar um

campo embarcadordquo

Como dito na seccedilatildeo de modelos de bancos de dados NoSQL um banco orientado a

documentos natildeo possui esquemas riacutegidos e estruturados sendo possiacutevel que ocorra

uma atualizaccedilatildeo na estrutura do documento Portanto inserir novos campos no

documento natildeo 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 coleccedilatildeo

iacutendice iacutendice

linha documento BSON

coluna campo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 18: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1829

joins documentos incorporados e vinculaccedilatildeo

primary key

(Especifica qualquer combinaccedilatildeo de colunas

ou coluna uacutenica como chave primaacuteria)

primary key

(No MongoDB a chave primaacuteria eacute definida

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 dinacircmicos ou seja sem a

necessidade de que cada registro tenha a mesma estrutura Estas estruturas satildeo

chamadas de coleccedilotildees (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 sobrenomeSilva idade22 bairroPituba

Outro documento para representar um aluno na mesma coleccedilatildeo

aluno2=nomeLiardquo sobrenomeSaacute cursoDireito materias[Civil Penal]

Podeshyse ter registros diferentes um do outro dentro de uma mesma coleccedilatildeo Parece

estranho este tipo de abordagem mas no modelo relacional usamos isto o tempo

inteiro e de maneira ineficiente com a formaccedilatildeo de tabelas esparsas

Estas satildeo tabelas incompletas onde algumas colunas satildeo sempre preenchidas e

outras nem sempre satildeo usadas Para ilustrar isto observe a Tabela 4 que apresenta

registros da construccedilatildeo civil

Coacutedigo Produto Altura Potecircncia Peso Diacircmetro

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 19: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 1929

1 Britadeira 300cv 100kg

2 Cimento

3 Empilhadeira 15cv 300kg

4 Escada 3m

5 Tubulaccedilatildeo 20cm

Tabela 4 Cadastro de produtos da construccedilatildeo civil em banco de dados modelo

relacional

Neste exemplo haacute uma desvantagem no modelo relacional Haacute colunas cujo valor eacute

preenchido apenas uma vez como pode ser visto no exemplo das colunas Altura e

Diacircmetro Na construccedilatildeo das tabelas ao incluir colunas que satildeo pouco utilizadas

jogashyse fora espaccedilo de armazenamento e reduzshyse o desempenho do sistema como

um todo E ainda tratamos objetos diferentes como se fossem iguais o que nem

sempre eacute uma boa praacutetica Abaixo o exemplo de como ficaria este cadastro de

produtos no modelo documental

codigo1 produtoBritadeira potencia300cv peso100kg

codigo2 produtoCimento

codigo3 produtoEmpilhadeira potencia15cv peso300kg

codigo4 produtoEscada altura3m

codigo5 produtoTubulaccedilatildeo diametro20cm

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

Seratildeo apresentados agora alguns comandos comuns usados no MongoDB Voltando

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 20: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2029

ao primeiro exemplo de documento criado para alunos observe como ficaria o

comando para salvar os alunos em uma coleccedilatildeo

dbunifacssave(aluno1)

dbunifacssave(aluno2)

O comando acima salva os documentos aluno1 e aluno2 na coleccedilatildeo ldquounifacsrdquo Eacute

possiacutevel acessar os dados de uma coleccedilatildeo atraveacutes do comando find() basicamente

ele vai percorrer todos os registros da coleccedilatildeo e retornar os documentos listados No

exemplo dado o comando seria dbunifacsfind() E para apagar tudo que existe na

coleccedilatildeo dbunifacsremove()

Natildeo eacute necessaacuterio que se crie uma coleccedilatildeo ou mesmo que se configure uma estrutura

isso eacute feito automaticamente quando o primeiro registro eacute incluiacutedo No entanto eacute

possiacutevel usar o comando de criar uma coleccedilatildeo e isto pode ser utilizado para preacuteshy

atribuir espaccedilo para uma coleccedilatildeo Uma coleccedilatildeo de tamanho fixo usa o comando

ldquocappedrdquo e vem a substituir automaticamente as entradas mais antigas quando

atinge seu tamanho maacuteximo

Todas as coleccedilotildees limitadas e fixas devem especificar um tamanho maacuteximo e

tambeacutem podem especificar um nuacutemero maacuteximo de documentos O MongoDB remove

os documentos antigos se uma coleccedilatildeo atinge o limite de tamanho maacuteximo antes

que ele atinja a contagem maacutexima de documentos Considere o seguinte exemplo

dbcreateCollection (unifacs capped true size 5242880 max 5000)

Este comando cria uma coleccedilatildeo nomeada de ldquounifacsrdquo com uma dimensatildeo maacutexima

de 5 megabytes e um maacuteximo de 5000 documentos

Para visualizar todas as coleccedilotildees de um banco de dados MongoDB utilizashyse o

seguinte comando

dbgetCollectionNames()

Enfim haacute muitas diferenccedilas entre os comandos usados no MongoDB e no MySQL As

quatro operaccedilotildees baacutesicas usadas para criaccedilatildeo consulta atualizaccedilatildeo e destruiccedilatildeo de

dados conhecidas como CRUD (Create Read Update e Delete) apresentam

comandos bem distintos nos dois tipos de bancos em questatildeo A Tabela 5 compara

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 21: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2129

alguns comandos de CRUD em ambos os bancos

MySQL MongoDB

CREATE TABLE unifacs (

id MEDIUMINT NOT NULL

AUTO_INCREMENT

matricula Number

nome Varchar(30)

idade Number

PRIMARY KEY (id)

)

A coleccedilatildeo eacute criada implicitamente na primeira

inserccedilatildeo de dados O _id chave primaacuteria eacute

adicionada automaticamente se o campo _id natildeo

eacute especificado

dbunifacsinsert (

matricula 04217253

nome Paulo

idade 22

)

ALTER TABLE unifacs

ADD join_date DATETIME

Coleccedilotildees natildeo descrevem ou forccedilam a estrutura

dos seus documentos No entanto no niacutevel do

documento operaccedilotildees de update () podem

adicionar campos para documentos existentes

usando o operador $set e remover usando

$unset

dbunifacsupdate (

$set join_date new Date ()

multi true

)

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 22: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2229

ALTER TABLE unifacs

DROP COLUMN join_date

dbunifacsupdate(

$unset join_date

multi true

)

INSERT INTO unifacs (matricula nome

idade)

VALUES (032104211 ldquoJoanardquo 21)

dbunifacsinsert(

matricula 032104211 nome ldquoJoanardquo idade

21

)

SELECT FROM unifacs dbunifacsfind()

SELECT FROM unifacs WHERE idade =

21dbunifacsfind( idade 21 )

SELECT FROM unifacs WHERE nome =

ldquoJoanardquo

AND idade = 21

dbunifacsfind( nome ldquoJoanardquo idade 21 )

SELECT FROM unifacs WHERE idade gt

20dbunifacsfind( age $gt 20 )

SELECT COUNT() FROM unifacs

dbuserscount()

ou

dbunifacsfind()count()

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 23: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2329

UPDATE unifacs SET status = ldquoAprovadordquo

WHERE nota gt 7

dbunifacsupdate( nota $gt 7

$set status ldquoAprovadordquo multi true )

UPDATE unifacs SET nota = nota + 1

WHERE status = Aprovado

dbunifacsupdate( status Aprovado

$inc nota 1 multi true )

DELETE FROM unifacs WHERE status =

Reprovadodbunifacsremove( status Reprovado )

Tabela 5 Comparativo de alguns exemplos de comandos CRUD em ambos os

bancos

Eacute importante saber que cada documento de uma coleccedilatildeo no MongoDB tem um

tamanho maacuteximo de 16MB o que eacute mais do que suficiente para armazenar dados em

um documento No entanto o MongoDB ainda eacute capaz de armazenar arquivos no

banco de dados em uma coleccedilatildeo especifica que eacute a coleccedilatildeo do tipo GridFS

Ela eacute ideal para trabalhar com arquivos maiores de imagens viacutedeo e aacuteudio O GridFS

divide o arquivo em partes ou pedaccedilos e salva cada pedaccedilo em um documento

separado Quando vocecirc consulta um arquivo no GridFS eacute preciso remontar os

pedaccedilos conforme a necessidade

O MongoDB atinge o objetivo de ser amigaacutevel para o desenvolvedor Possui uma

documentaccedilatildeo bem escrita para a maioria dos principais idiomas Sua consulta

baseada em JavaScript eacute faacutecil para os desenvolvedores da Web e ele tambeacutem eacute faacutecil

de instalar Por estas razotildees o MongoDB eacute uma oacutetima opccedilatildeo de tecnologia para uso

em uma aplicaccedilatildeo

Um exemplo do sucesso deste banco eacute o depoimento do especialista em banco de

dados da Globocom Franklin Amorim Em um evento sobre o MongoDB em 2011 na

cidade de Satildeo Paulo Franklin apresentou o case de sucesso da adoccedilatildeo do MongoDB

para uma nova funccedilatildeo do ldquofantasy gamerdquo CartolaFC

O jogo eacute maior aplicaccedilatildeo dinacircmica do portal Globocom com mais de 2 milhotildees de

usuaacuterios cadastrados e quase 90 milhotildees de pageviews somente em um mecircs

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 24: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2429

A ideia da aplicaccedilatildeo era criar uma espeacutecie de ldquotwitterrdquo para os usuaacuterios do jogo com

a finalidade de promover uma maior interaccedilatildeo entre os usuaacuterios aleacutem de aumentar o

seu tempo de permanecircncia no site

Na Globocom a maioria dos projetos satildeo em banco de dados relacional poreacutem

resolveram tentar algo novo para o CartolaFC jaacute que em alguns testes de

performance as vantagens do MongoDB foram mais atrativas do que o MySQL Nos

testes realizados pela equipe da Globo conseguiushyse 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 abstraccedilotildees

de tabelas foi considerado atrativo pelos desenvolvedores Natildeo possuir schema

tambeacutem foi fator de vantagem pela flexibilidade dos documentos criados E o fato de

o sistema estar sempre ativo devido ao ldquoFailoverrdquo automaacutetico que manteacutem o sistema

sempre disponiacutevel e a possibilidade de escalar escritas com Sharding foram outros

fatores que levaram a equipe a escolher o MongoDB para a aplicaccedilatildeo

A partir desta experiecircncia de sucesso outros projetos na Globocom passaram a usar

o MongoDB Atualmente temshyse o receitascom e o novo cataacutelogo de viacutedeos da

emissora que possui cerca de 800 mil arquivos cadastrados

Este artigo discutiu as soluccedilotildees NoSQL como modelo de banco de dados em cenaacuterios

onde escalabilidade eacute a questatildeo principal O objetivo foi mostrar aos mais

conservadores a existecircncia de uma tecnologia que pode ser uma alternativa ao

tradicional modelo relacional O desenvolvedor precisa portanto observar o cenaacuterio

em que estaacute trabalhando para tomar uma decisatildeo coerente de qual modelo de banco

de dados deve usar

No cenaacuterio atual da Web 20 Big Data computaccedilatildeo em nuvem e redes sociais os

modelos tradicionais para gerenciamento de dados tecircm apresentado limitaccedilotildees

principalmente no quesito escalabilidade e assim o NoSQL surgiu como opccedilatildeo

Atualmente podemos observar grandes empresas e negoacutecios de escala global

fazendo uso dessa tecnologia Como jaacute citado como exemplos o Cassandra eacute usado

no Facebook e Twitter e o MongoDB estaacute em uso no Foursquare SourceForge e na

Globocom Isto eacute um indicativo de que esse tipo de tecnologia certamente natildeo seraacute

descartada facilmente como um modismo

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 25: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2529

Gostei (12) (0)

O que vocecirc achou deste post

Postar duacutevida Comentaacuterio

O NoSQL natildeo eacute uma tecnologia de banco de dados totalmente nova e haacute indiacutecios de

que seu futuro eacute bastante promissor Ela oferece a possibilidade e flexibilidade de

manipulaccedilatildeo de dados semiestruturados complexos e otimiza soluccedilotildees para

diferentes tipos de dados nesta era da computaccedilatildeo em larga escala Este artigo

buscou fomentar um estudo sobre o NoSQL e mostrar a necessidade de um maior

conhecimento das tecnologias disponiacuteveis como soluccedilatildeo no quesito banco de dados

DevMedia

A DevMedia eacute um portal para analistas desenvolvedores de sistemas gerentes e DBAs com milhares deartigos dicas cursos e videoaulas gratuitos e exclusivos para assinantes

Todos os comentarios (2)Meus comentarios

Rafael Dantas Silva

Achei o artigo excelente Parabeacutens No entanto gostaria de tirar 3 duacutevidas

1ordm) Eacute possiacutevel criar um coleccedilatildeo com atributos obrigatoacuterios Ex Colocar como obrigatoacuterio o

preenchimento dos atributos matricula e nome na coleccedilatildeo [unifacs]

2ordm) Na modelagem NoSQL Documental eacute possiacutevel criar relacionamentos Algo similar a uma FK

3ordm) Todos os artigos que vejo sobre NoSQL sempre satildeo com o foco em Desenvolvimento Gostaria

de saber mais a respeito das tarefas administrativas necessaacuterias para um BD desse tipo Em um

Banco SQL precisamos coletar estatiacutesticas realizar rebuild de iacutendices desfragmentaccedilatildeo de

segmentos Quais tarefas administrativas satildeo necessaacuterias em um BD NoSQL

[haacute +1 mecircs] shy Responder

Daniella Adriana Da Costa

Olaacute Rafael

conforme vc jaacute enviou feedback para o autor vamos postar abaixo a mesma resposta dada

por ele para as suas duacutevidas

Andreacute

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 26: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2629

Parabeacutens mais uma vez pelo bom trabalho e pelo empenho e proatividade em esclarecer as

duacutevidas Vou ler os links que vocecirc enviou com calma

Rafael Dantas

[RESPOSTA DO AUTOR]

Olaacute Rafael Dantas

Fico contente de ter gostado do artigo

A pesquisa que realizei foi bem focada em fazer uma comparaccedilatildeo entre os modelos

portanto natildeo busquei e nem me preocupei com algumas outras demandas da aacuterea

Tentei dar uma pesquisada no assunto sobre as perguntas feitas

1shy No desenvolvimento do meu artigo ao estudar o mongo e o NoSQL em si natildeo observei

em nenhum dos artigos que utilizei como referecircncia um relato de possibilidade de tornar

um atributo obrigatoacuterio Pesquisando sobre o assunto vejo que haacute gem de mapeamento

objetoshydocumento usadas pra acessar o MongoDB como Mongoose e MongoID e nelas haacute

a possibilidade de usar um validador para verificar se um campo foi definido antes de

salvaacuteshylo e tambeacutem eacute possiacutevel definir um campo como obrigatoacuterio na definiccedilatildeo de esquema

(httpstackoverflowcomquestions17943609canshyishyrequireshyanshyattributeshytoshybeshysetshyinshyashy

mongodbshycollectionshynotshynull)

2shy Uma diferenccedila fundamental entre os dois modelos surge quando precisamos criar

relacionamentos nos bancos de dados relacionais diferente dos bancos orientados a

documentos que natildeo fornecem relacionamentos entre documentos o que manteacutem seu

design sem esquemas

Leia mais em Introduccedilatildeo ao MongoDB httpwwwdevmediacombrintroducaoshyaoshy

mongodb30792ixzz3A0lWPu00

No entanto buscando sobre o assunto vi que haacute a possibilidade de criar algum tipo de

relacionamento quando se usa uma gem como o Mongoid

httpmongoidorgenmongoiddocsrelationshtml

3shy Os bancos de dados NoSQL satildeo caracterizados por afastar a complexidade dos bancos

SQL A loacutegica de validaccedilatildeo controle de acesso mapeamento de consultas de dados

indexados correlaccedilatildeo entre os dados relacionados resoluccedilatildeo de conflitos manutenccedilatildeo de

restriccedilotildees de integridade (constraint) e procedimentos engatilhados satildeo movidos para

fora da camada de banco de dados Isto permite o foco em performance e escalabilidade

Uma das grandes vantagens da arquitetura NoSQL eacute que a loacutegica pode ser codificada em

qualquer linguagem de programaccedilatildeo ao inveacutes de depender da grande variedade de APIs

complexas em um servidor SQL

4shy Sobre as tarefas administrativas natildeo achei nada a respeito Vi que no proacuteprio site do

Mongodb haacute um serviccedilo de gerenciamento httpsmmsmongodbcom

Espero ter ajudado

Att

Andreacute Simotildees

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 27: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2729

[haacute +1 mecircs] shy Responder

Serviccedilos

Inclua um comentaacuterio

Adicionar aos Favoritos

Marcar como lidoassistido

Incluir anotaccedilatildeo pessoal

Versatildeo para impressatildeo

+SQL

Mais postsVideo aula

Terceira Forma Normal - Curso Modelagem de Dados - Aula 26

Video aula

Aplicaccedilotildees da Segunda Forma Normal - Curso Modelagem deDados - Aula 25

Video aula

Segunda Forma Normal - Curso Modelagem de Dados - Aula

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 28: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2829

24

Video aula

Primeira Forma Normal - Curso Modelagem de Dados - Aula 23

Video aula

Normalizaccedilatildeo e Anomalias - Curso Modelagem de Dados -Aula 22

Video aula

Dependecircncias Funcionais - Curso Modelagem de Dados - Aula21

Video aula

MySQL Administrador - Curso Completo de MySQL - Aula 16

Video aula

Ferramentas e Utilitaacuterios - Curso Completo de MySQL - Aula 15

Video aula

Mais sobre o Prompt de Comando - Curso Completo deMySQL - Aula 14

Listar mais conteuacutedo

Anuncie | Loja | Publique | Assine | Fale conosco

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir

Page 29: Comparando o NoSQL Ao Modelo Relacional

08042015 Comparando o NoSQL ao modelo relacional

httpwwwdevmediacombrcomparandoshyoshynosqlshyaoshymodeloshyrelacional30917 2929

Hospedagem web por Porta 80 Web Hosting

DevMediaVocecirc curtiu isso

Vocecirc e outras 63895 pessoas curtiram DevMedia

Plugshyin social do Facebook

Curtir