Buscar

Banco de Dados para Big Data

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 206 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 206 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 206 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Indaial – 2020
Banco de dados 
para Big data
Prof. Geomar André Schreiner
1a Edição
Copyright © UNIASSELVI 2020
Elaboração:
Prof. Geomar André Schreiner
Prof. Daniel dos Santos Brandão
Prof. Fabiano Berlinck Neumann
Prof.ª Mariana Araújo Pereira
Este livro foi feito com a parceira com a Sagah
Revisão, Diagramação e Produção:
Centro Universitário Leonardo da Vinci – UNIASSELVI
Ficha catalográfica elaborada na fonte pela Biblioteca Dante Alighieri 
UNIASSELVI – Indaial.
Impresso por:
S378b
 Schreiner, Geomar André
 Banco de dados para big data. / Geomar André Schreiner. – Indaial: 
UNIASSELVI, 2020.
 206 p.; il.
 ISBN 978-65-5663-123-3
 ISBN Digital 978-65-5663-117-2
1. Big data. - Brasil. 2. Banco de dados. – Brasil. Centro Universitário 
Leonardo Da Vinci.
CDD 004
III
apresentação
Caro acadêmico!
No decorrer deste material exploraremos as diferentes facetas dos 
problemas e soluções para armazenar e manipular grandes quantidades de 
dados. Consideramos Big Data uma grande quantidade de dados que são 
acessadas ou inseridas constantemente por diversas fontes. Bancos de Dados 
Relacionais são utilizados há décadas para armazenar e consultar dados de 
maneira segura e confiável. No entanto, com o surgimento do Big Data, os 
bancos de dados relacionais foram colocados em xeque, já que foram desen-
volvidos em um contexto de armazenamento diferente e não são adequados 
para os novos requisitos que tais dados exigem. 
Dessa forma, é natural que novas soluções emergissem para tratar 
de problemas que o modelo relacional de dados não é mais capaz de tratar. 
Nesse sentido, esses novos modelos surgem com o intuito de tratar proble-
mas que o modelo de dados relacional não é adequado para tratar, e não para 
substituir esses BDs. Vários novos BDs foram surgindo nos últimos anos, 
assim como arquiteturas capazes de lidar com as características do Big Data. 
Neste livro didático, estudaremos as características dessas novas soluções 
para entendermos quando e como devemos utilizá-las. 
O livro de Banco de Dados para Big Data está dividido em três unida-
des. A Unidade 1 apresenta conceitos gerais sobre bancos de dados NoSQL 
(Not Only SQL), a descrição das principais famílias, bem como a descrição de 
cada uma delas. Na Unidade 2, estudaremos o papel do particionamento de 
dados e das arquiteturas distribuídas frente aos desafios impostos por cená-
rios de Big Data. Por fim, a Unidade 3 apresenta o conceito de sharding e seu 
papel na distribuição e processamento de dados semiestruturados.
Aproveitamos a oportunidade para destacar a importância de desen-
volver as autoatividades, lembrando que essas atividades não são opcionais. 
Elas objetivam a fixação dos conceitos apresentados. Em caso de dúvida na 
realização das atividades, sugerimos que você entre em contato com seu tu-
tor externo ou com a tutoria interna da UNIASSELVI, não prosseguindo as 
atividades sem ter sanado todas as dúvidas que irão surgindo. 
Bons estudos!
IV
Você já me conhece das outras disciplinas? Não? É calouro? Enfim, tanto para 
você que está chegando agora à UNIASSELVI quanto para você que já é veterano, há 
novidades em nosso material.
Na Educação a Distância, o livro impresso, entregue a todos os acadêmicos desde 2005, é 
o material base da disciplina. A partir de 2017, nossos livros estão de visual novo, com um 
formato mais prático, que cabe na bolsa e facilita a leitura. 
O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova 
diagramação no texto, aproveitando ao máximo o espaço da página, o que também 
contribui para diminuir a extração de árvores para produção de folhas de papel, por exemplo.
Assim, a UNIASSELVI, preocupando-se com o impacto de nossas ações sobre o ambiente, 
apresenta também este livro no formato digital. Assim, você, acadêmico, tem a possibilidade 
de estudá-lo com versatilidade nas telas do celular, tablet ou computador. 
 
Eu mesmo, UNI, ganhei um novo layout, você me verá frequentemente e surgirei para 
apresentar dicas de vídeos e outras fontes de conhecimento que complementam o assunto 
em questão. 
Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas 
institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa 
continuar seus estudos com um material de qualidade.
Aproveito o momento para convidá-lo para um bate-papo sobre o Exame Nacional de 
Desempenho de Estudantes – ENADE. 
 
Bons estudos!
NOTA
V
VI
Olá, acadêmico! Iniciamos agora mais uma disciplina e com ela 
um novo conhecimento. 
Com o objetivo de enriquecer seu conhecimento, construímos, além do livro 
que está em suas mãos, uma rica trilha de aprendizagem, por meio dela você terá 
contato com o vídeo da disciplina, o objeto de aprendizagem, materiais complementares, 
entre outros, todos pensados e construídos na intenção de auxiliar seu crescimento.
Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo.
Conte conosco, estaremos juntos nesta caminhada!
LEMBRETE
VII
UNIDADE 1 - BANCOS NOSQL ...........................................................................................................1
TÓPICO 1 - BANCOS NOSQL ...............................................................................................................3
1 INTRODUÇÃO .......................................................................................................................................3
2 MOTIVAÇÃO ..........................................................................................................................................3
3 MODELOS DE DADOS ........................................................................................................................9
RESUMO DO TÓPICO 1........................................................................................................................12
AUTOATIVIDADE .................................................................................................................................13
TÓPICO 2 - BANCOS CHAVE-VALOR ..............................................................................................15
1 INTRODUÇÃO .....................................................................................................................................15
2 MODELO DE DADOS E ARQUITETURA .....................................................................................15
3 ATIVIDADE PRÁTICA REDIS ..........................................................................................................20
RESUMO DO TÓPICO 2........................................................................................................................25
AUTOATIVIDADE .................................................................................................................................26
TÓPICO 3 - BANCOS ORIENTADOS A DOCUMENTOS ............................................................27
1 INTRODUÇÃO .....................................................................................................................................27
2 MODELO DE DADOS E ARQUITETURA .....................................................................................28
3 ATIVIDADE PRÁTICA MONGODB ...............................................................................................37
RESUMO DO TÓPICO 3........................................................................................................................42
AUTOATIVIDADE .................................................................................................................................43
TÓPICO 4 - BANCOS ORIENTADOS A COLUNAS.......................................................................45
1 INTRODUÇÃO .....................................................................................................................................45
2 MODELO DE DADOS E ARQUITETURA.....................................................................................46
3 ATIVIDADE PRÁTICA CASSANDRA............................................................................................52
RESUMO DO TÓPICO 4........................................................................................................................56
AUTOATIVIDADE .................................................................................................................................57
TÓPICO 5 - BANCOS ORIENTADOS A GRAFOS ..........................................................................59
1 INTRODUÇÃO .....................................................................................................................................59
2 MODELO DE DADOS E ARQUITETURA .....................................................................................60
3 ATIVIDADE PRÁTICA NEO4J..........................................................................................................64
RESUMO DO TÓPICO 5........................................................................................................................74
AUTOATIVIDADE .................................................................................................................................75
UNIDADE 2 - PARTICIONAMENTO DE BANCO DE DADOS ..................................................77
TÓPICO 1 - PARTICIONAMENTO DE DADOS .............................................................................79
1 INTRODUÇÃO .....................................................................................................................................79
2 DESAFIOS DO BIG DATA .................................................................................................................79
3 LIMITAÇÕES DO PARTICIONAMENTO DE DADOS ..............................................................81
4 BENEFÍCIOS DO PARTICIONAMENTO DE DADOS ...............................................................83
sumário
VIII
5 GERENCIAMENTO DE PARTICIONAMENTO ...........................................................................84
6 DESAFIOS DO PARTICIONAMENTO DE DADOS ...................................................................86
7 ESTRATÉGIA DE PARTIÇÃO ...........................................................................................................87
RESUMO DO TÓPICO 1........................................................................................................................89
AUTOATIVIDADE .................................................................................................................................90
TÓPICO 2 - APLICAÇÕES SIMPLES UTILIZANDO FRAMEWORKS DE BIG DATA ..........93
1 INTRODUÇÃO .....................................................................................................................................93
2 FUNCIONAMENTO DO MAPREDUCE .........................................................................................93
3 INTERFACES PARA UTILIZAÇÃO DO HADOOP MAPREDUCE ..........................................95
4 CONCEITO DO CONTADOR DE PALAVRAS COM MAPREDUCE ......................................96
5 APLICAÇÃO COM O HADOOP MAPREDUCE ...........................................................................97
6 APLICAÇÃO COM O MAPREDUCE NO SPARK ......................................................................100
RESUMO DO TÓPICO 2......................................................................................................................103
AUTOATIVIDADE ...............................................................................................................................104
TÓPICO 3 - OVERVIEW DE FRAMEWORKS DE STREAM DE BIG DATA ...........................105
1 INTRODUÇÃO ...................................................................................................................................105
2 CONHECENDO O SPARK STREAMING ....................................................................................105
3 FLUXOS DISCRETIZADOS (DSTREAMS) ..................................................................................107
4 SPARK STREAMING E OUTROS FRAMEWORKS ...................................................................109
4.1. SPARK STREAMING E SPARK STRUCTURED STREAMING .............................................109
4.2. SPARK STREAMING, APACHE FLINK E APACHE STORM ...............................................110
5 INGESTÃO DE DADOS COM O SPARK STREAMING EM JAVA ........................................112
6 ETAPAS PARA CRIAR UM PROGRAMA COM SPARK STREAMING ................................112
RESUMO DO TÓPICO 3......................................................................................................................117
AUTOATIVIDADE ...............................................................................................................................118
TÓPICO 4 - FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS .................119
1 INTRODUÇÃO ...................................................................................................................................119
2 ECOSSISTEMA HADOOP E HDFS ...............................................................................................119
3 ARQUITETURA ..................................................................................................................................120
4 TOLERÂNCIA A FALHAS ...............................................................................................................121
5 ARMAZENAMENTO EM NUVEM ................................................................................................122
5.1. AMAZON S3 .................................................................................................................................123
5.2 MICROSOFT AZURE STORAGE ................................................................................................124
5.3 GOOGLE CLOUD STORAGE ......................................................................................................125
5.4 IBM CLOUD STORAGE ...............................................................................................................125
6 HDFS ON-PREMISE E ARMAZENAMENTO EM NUVEM .....................................................126
7 OPERAÇÕES SOBRE DADOS NÃO ESTRUTURADOS ..........................................................128
RESUMO DO TÓPICO 4......................................................................................................................130
AUTOATIVIDADE ...............................................................................................................................131
UNIDADE 3 - DADOS SEMI-ESTRUTURADOS E SHARDING ...............................................133
TÓPICO 1 - FRAMEWORKS DE ARMAZENAMENTO SEMIESTRUTURADOS .................135
1 INTRODUÇÃO ...................................................................................................................................135
2 CARACTERÍSTICAS DOS BANCOS DE DADOS NoSQL ......................................................135
3 ONDE GUARDAR DOCUMENTOS E GRAFOS ........................................................................137
4 OPERAÇÕES COM DADOS SEMIESTRUTURADOS ..............................................................140
RESUMO DO TÓPICO 1......................................................................................................................144
AUTOATIVIDADE ...............................................................................................................................145
IX
TÓPICO 2 - SHARDING ......................................................................................................................147
1 INTRODUÇÃO ...................................................................................................................................147
2 O QUE É SHARDING? ......................................................................................................................1473 UTILIZANDO SHARDING EM CLUSTERS ...............................................................................151
3.1 CLUSTER LOCAL E REMOTO ...................................................................................................153
3.2 RELAÇÃO ENTRE SHARDING E ÍNDICES ............................................................................154
3.3 UTILIZANDO ÍNDICES EM BANCOS DE DADOS ................................................................155
RESUMO DO TÓPICO 2......................................................................................................................158
AUTOATIVIDADE ...............................................................................................................................159
TÓPICO 3 - FRAMEWORKS QUE UTILIZAM SHARDING COMO
 FORMA DE DISTRIBUIÇÃO ......................................................................................161
1 INTRODUÇÃO ...................................................................................................................................161
2 ARQUITETURA DO SHARDING ..................................................................................................161
3 SHARDING BASEADO EM HASH ...............................................................................................164
4 SHARDING BASEADO EM INTERVALOS .................................................................................165
5 SHARDING BASEADO EM DIRETÓRIO....................................................................................165
6 FRAGMENTAÇÃO NO APACHE CASSANDRA .......................................................................166
7 HASH CONSISTENTE ......................................................................................................................168
8 FRAGMENTAÇÃO NO MONGODB ............................................................................................170
RESUMO DO TÓPICO 3......................................................................................................................185
AUTOATIVIDADE ...............................................................................................................................186
REFERÊNCIAS .......................................................................................................................................189
X
1
UNIDADE 1
BANCOS NOSQL
OBJETIVOS DE APRENDIZAGEM
PLANO DE ESTUDOS
A partir do estudo desta unidade, você deverá ser capaz de:
• conhecer a motivação para o surgimento dos Banco de Dados (BDs) NoSQL;
• caracterizar de maneira geral os BDs NoSQL e suas principais diferenças para 
o modelo relacional;
• apresentar os diferentes modelos de BDs NoSQL;
• dialogar sobre os diferentes modelos de dados de BDs NoSQL e suas 
aplicações.
Esta unidade está dividida em cinco tópicos. No decorrer da unidade 
você encontrará autoatividades com o objetivo de reforçar o conteúdo 
apresentado.
TÓPICO 1 – BANCOS NOSQL
TÓPICO 2 – BANCOS CHAVE-VALOR
TÓPICO 3 – BANCOS ORIENTADOS A DOCUMENTOS
TÓPICO 4 – BANCOS ORIENTADOS A COLUNAS
TÓPICO 5 – BANCOS ORIENTADOS A GRAFOS
Preparado para ampliar seus conhecimentos? Respire e vamos 
em frente! Procure um ambiente que facilite a concentração, assim absorverá 
melhor as informações.
CHAMADA
2
3
TÓPICO 1
UNIDADE 1
BANCOS NOSQL
1 INTRODUÇÃO
Os Bancos de Dados (BDs) sempre tiveram um lugar de destaque em se 
tratando de sistemas da computação, porém, atualmente, com as grandes quan-
tidades de dados a serem armazenados (Big Data), os BDs ganham ainda mais 
destaque (STONEBRAKER, 2012). Praticamente, todas as aplicações acessadas 
utilizam algum meio de armazenamento de dados. Durante décadas, os dados fo-
ram armazenados através do modelo relacional de dados. Com o surgimento da 
Web e a popularização da internet, cada vez mais pessoas utilizam as aplicações 
de maneira on-line, trazendo à tona os limites do modelo relacional.
 
Com essa motivação foram surgindo novos modelos de dados com foco 
na grande escalabilidade e alta disponibilidade dos sistemas, criando um novo 
paradigma de armazenamento de dados (CATTELL, 2011). Esse novo paradigma 
de armazenamento foi batizado de NoSQL (Not Only SQL). Esses BDs não se-
guem o modelo de dados relacional, propondo novas formas de armazenamento 
(BERMAN, 2013). 
No decorrer desta unidade, iremos explorar o paradigma de BDs não rela-
cionais, apresentando de maneira mais detalhada a motivação para o surgimento 
desses novos BDs. Desse modo, suas principais características serão exploradas e 
comparadas com as do já conhecido modelo relacional de armazenamento. Além 
disso, serão apresentados os novos modelos de dados e quais as principais carac-
terísticas de cada um deles.
2 MOTIVAÇÃO
Em geral, BDs relacionais são utilizados há décadas em grande escala 
para o armazenamento e manipulação eficiente dos mais variados domínios de 
aplicação (SADALAGE; FOWLER, 2019). O modelo relacional de dados foi pro-
posto por Edward Codd em 1970. Nesse sentido, o modelo de dados relacional é 
baseado em uma abstração sobre os dados que definem uma estrutura de entida-
des (tabelas) e seus relacionamentos.
Como você já deve saber, grande parte do sucesso do modelo relacional 
deve-se à padronização imposta por ele e de sua poderosa linguagem de consul-
tas: a SQL (Structured Query Language) (SILBERSCHATS; KORTH; SUDARSHAN, 
2012). A linguagem SQL é baseada na teoria de conjuntos e permite que o usuário 
UNIDADE 1 | BANCOS NOSQL
4
manipule os dados a fim de obter os resultados desejados. Graças ao modelo de 
dados relacional e à SQL, todos os BDs relacionais compartilham diversas carac-
terísticas. Dessa forma, aprendendo os fundamentos sobre o modelo relacional e 
a SQL somos capazes de utilizar as ferramentas de qualquer Sistema Gerenciador 
de Banco de Dados (SGBD) relacional. Cada SGBD possui suas peculiaridades e 
seu dialeto de SQL, porém, como dito, todos possuem uma mesma base.
Outra característica importante do modelo relacional, compartilhada pe-
los SGBDs, é a possibilidade de o usuário executar transações. Uma transação 
é uma série de operações consideradas críticas que devem ser executadas com 
um bloco único e indivisível (bloco atômico) (SILBERSCHATS; KORTH; SUDAR-
SHAN, 2012). Essas operações devem ser executadas em sua totalidade. Assim, 
caso algum erro ocorra durante a execução uma transação, esta deve falhar e as 
operações que já haviam sido executadas com êxito devem ser desfeitas. 
Imagine a seguinte situação: você está sacando seu dinheiro de um caixa 
eletrônico. A operação de saque é uma transação que será executada no sistema do 
seu banco, que possivelmente é um BD relacional. Você passa algumas informações 
e, através delas, algumas operações serão executas para que o caixa eletrônico lhe 
dê seu dinheiro. De maneira geral, o sistema executará as seguintes operações:
(i) validar suas informações pessoais (conta, agência e senha);
(ii) verificar seu saldo;
(iii) se o saldo for suficiente, reduzir o montante do saque do saldo atual;
(iv) salvar o novo saldo;
(v) efetivar o saque liberando o dinheiro. 
Agora, imagine que entre os passos (iv) e (v) falte energia, desse modo, a 
transação teria retirado o dinheiro do saque de sua conta, porém o caixa eletrônico 
não iria mais liberar o dinheiro já que a transação terminou. Erros desse tipo 
não podem ser tolerados em uma instituição financeira, bem como em outras 
aplicações. Dessa forma, todo banco relacional deve possuir suporte às transações 
compatíveis com as propriedades ACID (Atomicidade, Consistência, Isolamento 
e Durabilidade) (SILBERSCHATS; KORTH; SUDARSHAN, 2012).
Cada uma das propriedades ACID garantem que o comportamento das 
transações em um BD relacional seja sempre o mesmo (ABADI, 2009). Cada letra 
da sigla ACID tem o seguinte significado:
• A: a propriedade de atomicidade deve garantir que a transação seja executada 
como um todo, ou seja, caso exista uma falha,as operações executadas devem 
ser desfeitas (rollback). 
• C: a consistência assegura que os dados respeitem as restrições de integridade 
criadas pelo usuário (tipos de dados, chaves primárias, chaves estrangeiras, 
entre outras). 
• I: o isolamento garante que as transações sejam executadas em paralelo, sem 
que nenhuma afete a execução da outra, normalmente essa propriedade é im-
plementada através de locks e latches.
TÓPICO 1 | BANCOS NOSQL
5
• D: a propriedade de durabilidade diz respeito ao armazenamento efetivo das 
informações, ou seja, o resultado das operações da transação deve ter sido ar-
mazenado no disco para que a transação seja efetivada.
As propriedades ACID são um dos principais atrativos dos BDs relacio-
nais, porém elas acarretam em processamento extra. Por exemplo, a propriedade 
de atomicidade necessita de logs e outros mecanismos para permitir, caso ne-
cessário, que o sistema realize um rollback. Já a propriedade isolamento acarreta 
operações de locks, que deixam outras transações (usuários) esperando sua vez 
para acessar aos recursos.
Os BDs Relacionais foram criados, como vimos, há décadas e sua essên-
cia continua a mesma. Ao longo dos anos, o paradigma foi sendo modificado, 
algoritmos melhorados e novas funcionalidades foram sendo desenvolvidas. No 
entanto, sua arquitetura com crescimento vertical (para melhorar o sistema, deve 
ser melhorado o hardware) e operações baseadas em disco (todas as transações 
dependem da gravação no disco para obterem êxito) permanecem inalteradas 
(STONEBRAKER, 2012).
Com o surgimento da Web, muitas demandas mudaram. Atualmente, 
muitas aplicações necessitam lidar com grandes quantidades de dados que, 
geralmente, caracterizam-se por serem heterogêneos e não possuírem um es-
quema bem definido. Esses dados são comumente denominados de Big Data 
(BERNAN, 2013). 
Em termos gerais, Big Data são grandes quantidades de dados gerados 
com certa velocidade por fontes diferente, esse conceito será melhor descrito na 
Unidade 3. Apesar de os BDs relacionais serem usados há décadas como meio 
seguro de armazenamento, eles se mostram ineficientes para o gerenciamento 
de Big Data (STONEBRAKER, 2012). Isso se deve principalmente pelo compro-
metimento do desempenho com verificações de consistência dos dados, proces-
samento de consultas complexas, manutenção das propriedades ACID, entre 
outras, e a representação rígida e estruturada dos dados através de esquemas 
(ABADI, 2009).
Locks e Latches são importantes mecanismos de controle dos Bancos de 
Dados. Locks são estruturas lógicas utilizadas pelo SGBD para manter a consistência entre 
transações, não permitindo que duas transações escrevam o mesmo dado. Latches são 
bloqueios criados sobre estruturas de dados físicas armazenadas no disco. 
IMPORTANT
E
UNIDADE 1 | BANCOS NOSQL
6
Dessa forma, para suprir os requisitos impostos pelo processamento de 
Big Data, novas arquiteturas de BDs foram propostas (STONEBRAKER, 2012). 
Geralmente, essas novas arquiteturas utilizam recursos de alta disponibilidade 
e escalabilidade atrelados ao paradigma da computação na nuvem, paradigma 
baseado na capacidade de processamento e armazenamento de grandes volumes 
de dados por centros distribuídos geograficamente (ABOUZEID, 2009). 
A quantidade de dados gerados, armazenados e processados atingiu es-
calas inéditas com a Web 2.0, a partir disso nasceram os chamados BDs NoSQL 
(DIANA; GEROSA, 2010). Perceba que estamos falando em um contexto especí-
fico, todas as aplicações, pelo menos a maioria, utilizavam o modelo relacional 
de dados, conforme o volume e a variedade dos dados foi aumentando, o mo-
delo relacional começou a apresentar alguns problemas dada sua natureza de 
processamento. 
Os desenvolvedores começaram a questionar o uso de uma estrutura tão 
rígida para o armazenamento de dados, sendo que algumas aplicações não neces-
sitam dessa rigidez. Aliado a isso, ainda temos o fato de que a escalabilidade do 
modelo relacional é baseada no crescimento vertical (escalonamento vertical), ou 
seja, a melhora do desempenho do SGBD pode ser efetuada acrescentando mais 
recursos ao servidor, o que torna o processo caro.
Escalabilidade horizontal: consiste em adicionar uma nova máquina no clus-
ter, visando aumentar a capacidade do sistema distribuído.
Escalabilidade vertical: trata-se do upgrade em um servidor já existente na rede, podendo ser 
a substituição, a reposição ou a adição de novos recursos, como memória ou discos rígidos.
FONTE: <https://bit.ly/2X5p0uD>. Acesso em: 28 mar. 2020.
NOTA
Considerando os pontos falhos dos BD relacionais, os BDs NoSQL 
foram propostos como BDs essencialmente distribuídos, que são baseados no 
crescimento horizontal (escalonamento horizontal). Desse modo, para melhorar 
o desempenho do sistema, o usuário pode adicionar máquinas ao conjunto que 
compõe o BD (cluster). 
Na construção do cluster, máquinas um pouco mais antigas que estavam 
em desuso podem ser utilizadas para melhorar o desempenho do SGBD. Esses 
novos BDs podem ser definidos como BDs que não seguem o modelo relacional 
de dados e possuem seis propriedades (CATELL, 2011):
TÓPICO 1 | BANCOS NOSQL
7
I. Escalonamento horizontal. 
II. Armazenamento de dados complexos de maneira distribuída.
III. Interface de acesso ou protocolo de acesso simples para manipulação dos 
dados.
IV. Sem suporte ou relaxamento das propriedades ACID.
V. Alta disponibilidade.
VI. Esquema flexível ou até ausência de esquema.
No entanto, é importante compreender que não se trata de afirmar que os 
BDs NoSQL são perfeitos e vieram para substituir os BDs relacionais, pelo contrário, 
os BDs são na verdade complementares. Os BDs NoSQL surgiram para suportar re-
quisitos que o modelo relacional não conseguia, porém eles não tratam do mesmo 
tipo de problema. Como dito, os BDs NoSQL não possuem suporte da ACID, assim, 
não podem ser utilizados em ambientes que necessitam de transações.
O termo NoSQL, da forma que é conhecido atualmente, surgiu em 2009 
cunhado por Johan Oskarsson (SADALAGE; FOWLER, 2019). Na época, o surgi-
mento do Big Table (desenvolvido pela Google) e Dynamo (desenvolvido pela Ama-
zon) com suas arquiteturas distribuídas, baseadas em alta disponibilidade e cres-
cimento horizontal, inspiraram o surgimento de diversos projetos de BDs NoSQL. 
Esses projetos já eram discutidos em algumas conferências, mas Johan 
queria conhecer mais sobre o assunto, discutindo suas vantagens e desvantagens. 
Desse modo, pensou na época em organizar uma “reunião” para discutir essas 
novas tecnologias de BDs não relacionais. Johan precisava de um nome para esse 
encontro, e através de um canal de IRC (Internet Relay Chat) do banco de dados 
Cassandra pediu sugestões. O nome NoSQL foi sugerido por Eric Evans e foi 
adotado de imediato (SADALAGE, 2012). 
O termo NoSQL, apesar de ter um impacto negativo por ser visto como a 
negação do SQL, resume bem os BDs desenvolvidos para esse movimento. Vale 
ressaltar também que não existe uma descrição formal para os BDs NoSQL, desse 
modo, para caracterizar um banco como NoSQL, devemos observar as caracterís-
ticas citadas anteriormente.
Como esses BDs não seguem o modelo relacional, a linguagem de consul-
ta SQL não é aplicável a eles (CATTELL, 2011). Assim, não existe um padrão de 
consulta que possa ser utilizado em todos os BDs NoSQL, cada um possui uma 
forma diferente de consulta (SOTENEBREAKER, 2012). 
O BD NoSQL Cassandra, por exemplo, possui uma linguagem de consul-
ta própria denominada de CQL (Cassandra Query Language). Essa linguagem de 
consulta se assemelha em muitos aspectos ao SQL, porém não possui a mesma 
expressividade, e o tratamento das informações se dá de forma diferente já que o 
Cassandra utiliza um modelo de dados diferente.
Outro exemplo de linguagem de consulta é o MongoDB (Figura 1). No 
exemplo é visto uma consulta sendo realizada tanto em linguagem SQL, bem 
UNIDADE 1 | BANCOS NOSQL
8
como utilizando o MongoDB. O MongoDB é um NoSQLmuito conhecido, e sua 
linguagem de consulta é baseado em documentos JSON. No decorrer dos nossos 
estudos, vamos aprender mais sobre o MongoDB e sua linguagem de consulta. No 
entanto, como pode ser observado, ela se difere consideravelmente do padrão SQL.
FIGURA 1 – MAPEAMENTO SQL PARA LINGUAGEM DO MONGODB
FONTE: O autor
Na Figura 1 (A), a tabela pessoas é mapeada para a coleção de documentos 
“pessoas” do Mongo – Figura 1 (B). Perceba também que a seleção da SQL (WHE-
RE) é mapeado para o primeiro parâmetro do “fi nd”. Mais detalhes sobre a lingua-
gem de consulta do MongoDB serão apresentados no Tópico 3 desta Unidade. 
O mais próximo de um padrão de consulta que os BDs NoSQL possuem 
é o engajamento da comunidade – de desenvolvedores – de prover acesso aos 
dados através de uma API (Application Programming Interface) de acesso baseada 
em REST (Representational State Transfer). A API REST defi ne um gerenciamento 
de dados unifi cado através da Web, utilizando as interfaces de acesso get, put, 
delete e post. No entanto, é importante ressaltar que isso não pode ser considerado 
um padrão, já que alguns BDs NoSQL não têm acesso via REST. Essa falta de pa-
dronização se deve ao fato de não existir um conceito totalmente fechado acerca 
deste paradigma. Como já dito, defi nimos se o BD é ou não um NoSQL baseado 
em um conjunto de propriedades. 
Para entender um pouco mais sobre o conceito de API REST confi ra o artigo O 
que é API? REST e RESTful? Conheça as defi nições e diferenças! que está disponível em: 
https://becode.com.br/o-que-e-api-rest-e-restful/. 
DICAS
TÓPICO 1 | BANCOS NOSQL
9
Agora conhecemos a motivação para o surgimento dos BDs NoSQ e 
também as principais funcionalidades que um BD NoSQL deve possuir. Além 
disso, sabemos que os BDs NoSQL não seguem o modelo relacional. Já que 
não seguem, qual o modelo de dados que os NoSQL possuem? O que é um 
modelo de dados afinal? Essas perguntas são de suma importância para um bom 
entendimento dos BDs NoSQL e serão respondidas no próximo tópico.
 
3 MODELOS DE DADOS
Um modelo de dados pode ser conceituado como uma combinação de 
estruturas para organizar um conjunto de dados (ATZENI; BUGIOTTI; ROSSI, 
2012). Dessa forma, vemos o modelo de dados como a forma com que o BD 
organizará e armazenará seus dados fisicamente. Como você deve estar imagi-
nando, já que o modelo de dados é como o BD organiza seus dados, ele interfere 
diretamente no desempenho do BD. Desse modo, temos que conhecer a fundo 
os modelos de dados existentes e entender qual o mais adequado para cada tipo 
de problema.
Normalmente, somos apresentados ao modelo relacional de dados, 
aprendemos suas abstrações (organização dos dados em tabelas) e como utilizá-
-lo (SQL), e o usamos em todas as situações. Como visto anteriormente, ele não é 
o mais indicado para tratar grandes quantidades de dados. Os BDs NoSQL não 
seguem o modelo relacional e, para variar, não possuem um modelo de dados 
padrão, ou seja, cada BD NoSQL tem seu modelo de dados e suas especificações.
Felizmente, os modelos de dados utilizados na implementação de BDs 
NoSQL podem ser sumarizados em quatro modelos de dados principais: chave-
-valor, orientado a colunas, orientado a documentos e orientado a grafos (SADA-
LAGE; FOWLER, 2019). Dessa forma, qualquer modelo de dados de NoSQL pode 
ser classificado em uma dessas categorias, mesmo que internamente ele trabalhe 
de forma diferente dos demais. 
O modelo de dados chave-valor é o mais simples de todos. Nesse mode-
lo, você apenas dispõe de pares chave-valor como estrutura de armazenamento. 
A chave representa o identificador único para um determinado “valor”. Para a 
maioria dos BDs, a chave pode ser representada por qualquer vetor de caracte-
res (exemplo: “pessoa.1”). O valor, que é atrelado à chave, é um valor atômico 
(indivisível) que pode conter qualquer tipo de dado (outros pares chave–valor, 
um inteiro, entre outros), sendo considerado uma “caixa-preta”. Uma impor-
tante característica desse modelo de dados é que os BDs apenas permitem pes-
quisar pela chave e não pelo valor já que este é uma incógnita e não segue um 
padrão. Apesar de soar estranho não poder realizar busca pelo valor, essa sim-
plificação faz com que a busca por uma chave seja muito rápida. Geralmente, 
a busca por uma chave em um BD chave-valor é O (1), ou seja, com uma única 
operação é encontrada a chave procurada. Sendo assim, é ótimo para pesquisas 
em que se possui a chave, mas não pode ser utilizado para buscas que envolvam 
informações armazenadas no campo de valor.
UNIDADE 1 | BANCOS NOSQL
10
O modelo orientado a colunas é semelhante ao chave-valor. Na verdade, 
podemos dizer que ele é uma especialização do modelo chave-valor. O modelo 
orientado a colunas organiza seus dados com base em uma distribuição por co-
lunas (propriedades), esta organização é mais complexa que a anterior e permi-
te consultas com filtro em valores de colunas. Conforme descrito por Sadalage 
(2012), esse modelo de dados é composto por uma keyspace (base de dados), fa-
mílias de colunas, conjuntos de colunas acessadas com base em uma chave única, 
colunas e seus respectivos valores. Famílias de colunas tem a ideia de agrupar 
colunas que possuam um domínio em comum (exemplo: conjunto de colunas que 
representam pessoas). Cada conjunto de colunas possui uma chave de acesso, 
como se fosse uma chave primária de um BD relacional, e este conjunto repre-
senta um conjunto de características de uma ocorrência (exemplo: informações 
pessoais de uma pessoa). Por fim, cada coluna de um desses conjuntos possui 
um nome e um valor. A principal diferença para o modelo chave-valor é que o 
modelo orientado a colunas permite consultas mais complexas que envolvam o 
valor das colunas.
O modelo de dados orientado a documentos armazena seus dados baseado 
em uma organização de documentos. Ele utiliza o conceito de coleção de docu-
mentos, em que cada documento é acessado também a partir de uma chave única 
e atômica (CATTELL, 2015). Da mesma forma que um objeto em um BD orientado 
a objetos, um documento é composto por uma série de atributos, cujo valor pode 
ser simples ou complexo. Considera-se um atributo simples aquele que possui um 
valor atômico, e um atributo complexo aquele que possui um conteúdo multivalo-
rado ou um conteúdo organizado em uma estrutura, como uma lista, um registro 
ou um conjunto. Esse modelo de dados é basicamente composto por um BD, um 
conjunto de coleções de documentos, documentos, atributos e valores. Assim como 
o modelo colunar, o modelo orientado a documentos permite consultas complexas 
sobre os valores de cada atributo. Adicionalmente, a orientação a documento pos-
sui uma estrutura mais flexível facilitando a inclusão dos dados. 
O modelo de dados orientado a grafos possui uma estrutura de armaze-
namento baseada em grafos de acesso (ABADI, 2009). Geralmente, dizemos que 
os três primeiros modelos de dados são baseados em chave de acesso, pois todos 
compartilham essa noção. O modelo orientado a grafos é consideravelmente dife-
rente dos demais. Sua estrutura, assim como uma estrutura de grafo tradicional, 
é baseada em nós e arestas. Cada nó armazena um nome e uma série de atributos 
e valores. Os nós são conectados por arestas que possuem um nome, e opcional-
mente uma série de atributos e valores. Devido a sua natureza de organização, o 
modelo de grafos é o mais especializado de todos. Ele é muito indicado para mo-
delar relacionamentos entre objetos e para realizar consultas que envolvam esses 
relacionamentos. No entanto, seu uso para o armazenamento de informações que 
não possuam relacionamento é desencorajado, já que o processo de busca no gra-
fo pode se tornar custoso.
Como podemos ver cada um dos modelos de dados possui característi-
cas únicas e aplicações específicas. Claro que nestas poucas linhas não é possível 
TÓPICO 1 | BANCOS NOSQL
11
entender a fundo como cada um desses modelos de dados trabalha e quando de 
fato cada umdeve ser utilizado. Dessa forma, nos próximos tópicos, trataremos 
separadamente de cada um dos modelos de dados, abordando suas característi-
cas principais e quais os problemas que podem ser resolvidos por cada um deles. 
Além disso, para cada modelo de dados que estudaremos, serão realizados al-
guns testes práticos para aprofundar os conceitos.
12
Neste tópico, você aprendeu que:
• Os BDs relacionais foram utilizados durantes anos como fonte segura de 
armazenamento e consulta de dados, porém eles não são adequados para lidar 
com os requisitos impostos pelo Big Data.
• Os BDs NoSQL possuem arquitetura distribuída baseada em alta disponibilidade 
e crescimento horizontal. Eles surgiram para lidar com as demandas que os 
BDs relacionais não eram capazes.
• Os BDs NoSQL não vão acabar com o uso de BDs relacionais, eles tratam de 
problemas diferentes e são complementares.
• Os BDs NoSQL não seguem o modelo relacional de dados e, geralmente, não 
possuem acesso via SQL. Além disso, não existe um padrão de consulta para 
esses BDs.
• Os BDs NoSQL podem ser caracterizados em quatro diferentes modelos de 
dados: chave-valor, orientado a colunas, orientado a documentos e orientado a 
grafos.
RESUMO DO TÓPICO 1
13
1 Considere as seguintes características do projeto de um Banco de Dados:
I- Alta disponibilidade e esquema rígido.
II- Relaxamento das propriedades ACID aliado à alta disponibilidade.
III- Linguagem de consulta padrão.
IV- Escalonamento horizontal.
Sobre as características que os BDs NoSQL possuem, assinale a alternativa 
CORRETA:
a) ( ) I, apenas.
b) ( ) III e IV, apenas.
c) ( ) II e I, apenas.
d) ( ) I, II e IV, apenas.
2 Disserte sobre os motivos que culminaram com o surgimento dos BDs 
NoSQL e quais as estruturas de dados que esses BDs utilizam.
3 O surgimento dos BDs NoSQL diminui de alguma forma a relevância dos 
BDs relacionais?
AUTOATIVIDADE
14
15
TÓPICO 2
BANCOS CHAVE-VALOR
UNIDADE 1
1 INTRODUÇÃO
No tópico anterior, conhecemos a motivação para a criação do 
paradigma NoSQL, discutimos suas características básicas e quais os modelos 
de dados existentes. Como dito anteriormente, é importante que você, como 
bom profissional, consiga entender os modelos de dados e suas aplicações. Dessa 
forma, quando confrontado com uma situação real será capaz de decidir qual o 
modelo de dados mais se adequa aos seus problemas e qual o BD NoSQL (ou 
mesmo relacional) irá usar.
Dentre os quatro modelos de dados dos BDs NoSQL, o chave-valor é 
considerado o mais simples. Apesar desse modelo de dados ser simples, isso não 
implica que ele seja ruim ou possa ser menosprezado. É devido à simplicidade desse 
modelo que ele possui um desempenho excelente, quando utilizado corretamente.
Neste tópico, conheceremos mais a fundo o modelo de dados chave-valor 
e explorar suas principais características entendendo seu funcionamento básico. 
Ao estudar sobre o modelo chave-valor, você terá uma noção de como o modelo 
de dados se comporta, traçando um paralelo com os BDs relacionais. Além disso, 
vamos dar uma olhada no Redis, um BD NoSQL chave-valor, compreendendo 
como ele trabalha, em quais plataformas pode ser utilizado e como é sua 
linguagem de consulta.
2 MODELO DE DADOS E ARQUITETURA
De maneira geral, podemos dizer que um BD chave-valor é uma grande 
tabela de hash, em que cada linha é um par chave-valor (SADALAGE; FOWLER, 
2019). Sendo a chave um identificador único e o valor um conjunto de informações 
visto como atômico (CATTELL, 2011). Sendo assim, ele é muito indicado para 
quando as buscas no BD são por um valor específico e único (uma chave primária). 
O Quadro 1 apresenta um mapeamento simples entre os conceitos básicos 
de um BD relacional com os envolvidos em um banco chave-valor. Perceba 
que um BD relacional pode suporta mais de uma base de dados em uma única 
instalação, porém, geralmente, BDs chave-valor não possuem múltiplas bases de 
dados. O conceito de tabela relacional não se relaciona diretamente com nenhum 
conceito comum a todos os BDs NoSQL chave-valor. Assim, todos os dados 
UNIDADE 1 | BANCOS NOSQL
16
(pares chave-valor) são armazenados diretamente no cluster. Alguns BDs NoSQL, 
como o Redis, criam uma estrutura que se assemelha ao conceito de tabela. Essa 
estrutura é chamada de bucket, porém é encontrada em poucos BDs.
Perceba que os BDs chave-valor apenas permitem consultas nas chaves. As 
consultas sobre os valores se tornariam muito custosas, pois exigem que todos os registros 
sejam analisados. Por isso dizemos que o valor armazenado para uma determinada chave é 
uma caixa-preta: pode possuir qualquer estrutura interna, mas não podemos realizar fi ltros 
nessas estruturas.
IMPORTANT
E
 QUADRO 1 – MAPEAMENTO RELACIONAL PARA CHAVE-VALOR
Banco Relacional NoSQL Chave-Valor
Base de dados Cluster
Tabela (relação) –
Linha (tupla) Par chave-valor
Identifi cador da tupla Chave
FONTE: O autor
Como vimos no Quadro 1, um par chave-valor do modelo é visto como 
uma tupla para o modelo relacional, e o identifi cador de uma tupla, ou mesmo o 
conjunto de chaves primárias de uma determinada tupla, é visto como a chave. 
A Figura 2 apresenta uma visão de um BD NoSQL, o qual possui quatro pares 
chave-valor.
FIGURA 2 − VISÃO DE UM BD CHAVE-VALOR
FONTE: O autor
TÓPICO 2 | BANCOS CHAVE-VALOR
17
Apesar de estarmos traçando este paralelo entre o modelo relacional e 
o chave-valor, é importante ressaltar que eles se diferem em muitos aspectos. 
Mesmo que uma tupla relacional possa ser mapeada para um par chave-valor 
não devemos considerar, necessariamente, esse mapeamento ao criar nossa base 
de dados. A construção, ou definição de uma chave para o BD chave-valor, é 
crítica e deve ser devidamente planejada.
Além disso, sempre é importante manter em mente que o valor armazenado 
pode ser de qualquer tipo. Pode ser um texto puro, um vetor de números, outros 
pares chave-valor e assim por diante. Dessa forma, o valor sempre é visto como 
uma caixa-preta. 
Como vimos anteriormente, em um BD chave-valor, uma chave deve 
ser única e, usualmente, somente são permitidas consultas sobre as chaves e 
não sobre os valores atrelados a elas. Assim, imagine que você foi incumbido de 
projetar um BD chave-valor para armazenar os dados de um BD relacional. Você 
possui duas tabelas: Diretores (id, nome, prêmios) e Filmes (id, nome, diretor – 
chave estrangeira para Diretores –, ano) sendo id a chave primária de ambas as 
tabelas (Figura 3). Considerando essas duas tabelas, imagine que você propõe o 
mapeamento direto de tuplas. Desse modo, chaves primárias serão mapeadas 
para chaves (do par chave-valor) e os dados da tupla serão compactados e 
armazenados no valor (do par chave-valor). O primeiro problema enfrentado é 
que como o atributo id é a chave primária das duas tabelas nada impede que 
exista um id com valor 1 para Filmes e um id com valor 1 para a tabela Diretores. 
Dessa forma, nossa estratégia não funciona.
FIGURA 3 – DB CINEMA
FONTE: O autor
Nesse sentido, a situação proposta trata-se de um problema simples de 
contornar, pois podemos concatenar o valor da chave primária com o nome da 
tabela, eliminando o problema. A Figura 4 apresenta uma visão dessa ideia. 
Perceba que temos as chaves constituídas da concatenação do nome da tabela e 
UNIDADE 1 | BANCOS NOSQL
18
um valor inteiro (que é o valor para o id). Como valor podemos criar um JSON 
com todas as informações da tupla.
FIGURA 4 – MODELO CHAVE-VALOR BD CINEMA
FONTE: O autor
Agora imagine que necessitamos fazer algumas consultas nessa base de 
dados. Por exemplo, realizar a busca de qual ano que o filme The Godfather foi 
lançado. Como já discutimos anteriormente este tipo de consulta não pode ser 
executada em um BD chave-valor. Como você sabe, esses BDs apenas permitem 
a consulta na chave. Sendo assim, não é possível realizar essa consulta. Com 
este modelo apenas poderíamos buscar a informação de um determinado filme, 
por exemplo, mostrar as informações doFilme com id 1, em que buscando pela 
chave ‘filme.1’ é possível obter o valor que nos possibilita mostrar ao usuário. 
Geralmente, esses bancos permitem a execução de expressões regulares para 
busca das chaves. Com isso, poderíamos listar todos os filmes com uma consulta 
do tipo ‘Filmes.*’.
Dessa forma, imaginamos que você está se perguntado para que serve 
este tipo de BD já que não nos possibilita fazer consultas complexas? De fato, 
o uso desse tipo de BD é bem restrito. Normalmente, eles são utilizados para 
realizar algum tipo de cache do sistema. A busca por uma chave neste BD se dá 
em complexidade de O (1) mais rápida do que qualquer índice implementado 
por algum BD relacional. A Oracle utiliza em seu BD relacional um BD chave-
valor (de desenvolvimento próprio) para gerenciar o buffer e otimizar o acesso a 
algumas informações.
TÓPICO 2 | BANCOS CHAVE-VALOR
19
Outra aplicação interessante é a utilização de um BD chave-valor para 
armazenar o carrinho de compras em um e-commerce. Cada acesso de um usuário 
gera um cookie de identificação de seção. Esse identificador pode ser utilizado 
como a chave do par chave-valor. O valor seriam os produtos escolhidos pelo 
cliente, o identificador de cada item e a quantidade de cada item.
A consistência desses BDs é outro ponto que devemos conhecer para ado-
tarmos seu uso. A consistência, como você deve imaginar, é feita de maneira distinta 
de um BD relacional. BDs chave-valor, usualmente, apenas consideram operações 
(inserção, leitura ou exclusão) sobre dados de uma única chave. Cada banco possui 
sua implementação de consistência, mas geralmente estes BDs são conhecidos por 
disponibilizar consistência eventual, ou seja, após a execução de uma determinada 
operação, esta será replicada entre os elementos do cluster, mas essa replicação irá 
demorar um curto espaço de tempo. Em um modelo fortemente consistente (rela-
cional), o usuário esperaria que o dado fosse replicado e então retornaria sucesso. 
Em um BD com consistência eventual não existe essa espera, a operação retorna 
sucesso e eventualmente a replicação seria completa. É importante ressaltar que 
essa janela de inconsistência, enquanto a replicação ocorre, é curta.
Como dito no Tópico 1, BDs NoSQL possuem como uma das suas caracte-
rísticas a escalabilidade horizontal. No caso do BDs chave-valor, a escalabilidade 
se dá baseada em particionamento dos dados, ou seja, cada um dos nós do cluster 
armazena uma partição dos dados. Os dados são particionados baseados no valor 
da chave. Quando novos nós são adicionados ao cluster, eles ficam responsáveis 
por novas partições dos dados, mantendo o balanceamento de carga no sistema 
(SADALAGE; FOWLER, 2019). A fim de atingir alta disponibilidade, os sistemas 
replicam as partições entre os nós, facilitando o acesso aos dados.
Até agora discutimos como os BDs chave-valor armazenam seus valores, 
como funcionam internamente e algumas situações em que podemos utilizar es-
ses BDs. No entanto, quando definitivamente não devemos utilizar esses BDs? 
Uma situação clara em que não podemos utilizar esses BDs é quando ne-
cessitamos modelar qualquer tipo de relacionamento entre os dados já que eles 
não suportam ligações entre diferentes chaves. Outra situação na qual não se 
aconselha seu uso é em situações em que precisamos consultar os dados armaze-
A notação O (1) significa que é uma busca feita em tempo constante. A letra O 
representa uma notação denominada “Big O” (grande O), que é empregada para mensurar a 
complexidade de algoritmos de busca. Para entender melhor sobre o Grande O, leia o artigo 
Notação Big O, disponível em: http://jkolb.com.br/notacao-big-o/.
DICAS
UNIDADE 1 | BANCOS NOSQL
20
nados para uma determinada chave, pois esse tipo de BD não suporta esse tipo de 
consulta, e, por fim, quando necessitamos armazenar múltiplas chaves ao mesmo 
tempo. Como vimos, tais BDs apenas garantem consistência por chave. Assim, se 
for necessário armazenar mais de uma chave por vez em uma transação, não há 
garantias que todas as chaves serão de fato inseridas.
Agora passamos por todas as etapas necessárias: conhecemos o modelo 
de dados chave-valor, sabemos como ele funciona e quando devemos ou não o 
usar. É importante ressaltar que cada BD chave-valor possui suas peculiaridades 
de funcionamento, e quando você optar por um desses produtos deve conhecer 
suas características para melhor usar sua estrutura.
Existem vários BDs chave-valor no mercado, dentre eles:
• Riak, que você poderá acessar através do link: https://riak.com/.
• Redis, que você poderá acessar através do link: https://redis.io/.
• Volrdemort, que você poderá acessar através do link: https://www.project-voldemort.com/.
• Memcached, que você poderá acessar através do link: https://memcached.org/.
INTERESSA
NTE
Então está na hora de “colocarmos a mão na massa” e ver como é a 
linguagem de um destes BDs na realidade. No próximo subtópico, faremos uma 
atividade prática utilizando o Redis.
3 ATIVIDADE PRÁTICA REDIS
O Redis é um dos representantes mais famosos da família dos BDs 
NoSQL chave-valor. É um projeto de código aberto disponibilizado desde 2009 
de maneira gratuita. Como todo BD chave-valor, o Redis possui como principal 
estrutura de armazenamento chaves e seus respectivos valores.
Um ponto interessante sobre o Redis é que ele possui uma arquitetura em 
memória, isto é, seus dados são persistidos apenas na memória principal (RAM). 
Opcionalmente, o usuário pode configurá-lo para persistir periodicamente seus 
dados em disco, mas por padrão seus dados são mantidos apenas na memória 
principal. Através de sua arquitetura em memória, o Redis se diferencia dos 
demais BDs (orientados a disco), evitando a latência gerada pelas leituras e 
escritas no disco. Dessa forma, escritas e leituras nesse BD são muito rápidas já 
que não necessitam buscar informações no disco.
A linguagem de consulta implementada pelo Redis é simples e permite 
apenas consultas baseadas na chave de acesso das informações. Assim, utilizando 
TÓPICO 2 | BANCOS CHAVE-VALOR
21
o Redis não é possível realizar buscas com base nos valores armazenados para 
uma chave. Isso faz com que seu uso seja limitado a buscas em que conhecemos 
os elementos da chave.
Para o nosso exemplo, não será necessária a instalação do Redis em sua 
máquina. Um ponto interessante desse BD é que ele disponibiliza uma interface 
on-line com um tutorial para que os usuários possam conhecer sua linguagem 
e ter o primeiro contato. Caso você tenha interesse de realizar a instalação em 
sua máquina, a instalação é muito simples e rápida. Mais informações sobre a 
instalação podem ser encontradas no link: htt ps://redis.io/download.
Para dar início ao primeiro contato com o Redis, abra o seu navegador de 
internet (não há restrição de navegador) e acesse o link de testes do Redis: htt p://
try.redis.io/. Após acessar o link, você visualizará a interface representada pela 
Figura 5.
 A parte inferior da Figura 5 (retângulo menor – 1) conta com uma entrada 
de dados, na qual digitaremos nossos comandos. O segundo retângulo (retângulo 
maior – 2) demarca a área de resposta, em que serão exibidos os resultados de 
nossas consultas. Perceba que esse é um ambiente muito semelhante ao terminal 
de comandos.
FIGURA 5 – INTERFACE DE ACESSO REDIS
FONTE: O autor
Para começar, digite na área de entrada de dados (retângulo 1) o comando 
“HELP”. Esse comando apresentará todos os comandos que o Redis suporta 
(Figura 6). Perceba que a lista de comandos não é muito grande comparada ao 
número de elementos que a linguagem SQL permite. No entanto, tenha em mente 
que o Redis possui uma linguagem de consulta mais simplista.
UNIDADE 1 | BANCOS NOSQL
22
FIGU RA 6 – RESULTADO COMANDO HELP
FONTE: O autor
O primeiro passo para utilizarmos o Redis foi dado, mas precisamos 
adicionar dados a essa nossa nova base de dados. Para acionar um par chave-
valor ao Redis, basta utilizar o comando SET. O comando SET é usado naforma 
“SET nome_chave valor”. O comando retorna “OK” se a chave foi inserida com 
sucesso (Figura 7, primeira linha). O comando “SET” também aceita a inclusão de 
valores complexos (Figura 7, terceira linha). Outra característica importante do 
comando SET é que é possível criar um timer que fará com que esse par-chave-
valor se apague automaticamente. A última linha da Figura 7 insere um valor que 
será apagado automaticamente após 20 segundos. 
FIGURA 7 – COMANDO SET
FONTE: O autor
Agora que inserimos dados precisamos verifi car se esses dados foram de 
fato armazenados na nossa base de dados. Para isso usaremos o comando GET. 
O comando GET retorna o valor armazenado para uma determinada chave. Para 
buscar o dado basta usar a sintaxe “GET nome_chave”. A primeira linha da Figura 
8 apresenta a busca pela chave “curso”, e a última através da variável “valor_
complexo”. Vale ressaltar que a busca por uma chave é case sensitive, ou seja, faz 
distinção entre caracteres maiúsculos ou minúsculos (segunda linha da Figura 8). 
Perceba, pela Figura 8, que quando uma chave não é encontrada pelo sistema é 
retornado o valor “nil”.
TÓPICO 2 | BANCOS CHAVE-VALOR
23
FIGURA 8 – RESULTADO COMANDO GET
FONTE: O autor
Outra operação muito importante no BD é como excluir uma informação 
que já não serve mais. Para remover um valor no Redis basta utilizar o comando 
“DEL”. O comando DEL irá, com base na chave ou chaves passadas por parâmetro, 
apagar seus respectivos dados retornando o número de registros afetados. A 
sintaxe do comando segue o formato “DEL nome_chave”. A primeira linha da 
Figura 9 apresenta a exclusão do valor armazenado para a chave “curso”. Caso a 
chave passada para o DEL não exista, ele retorna 0 (Figura 9, segundo comando). 
Perceba que você pode passar mais de uma chave para o comando DEL, apagando 
múltiplos registos ao mesmo tempo (Figura 9, quinta linha). 
FIGURA 9 – COMANDO DEL
FONTE: O autor
Nesse momento, você deve estar se perguntando qual será o comando 
para realizar atualizações nos dados, porém sistemas chave-valor geralmente não 
possuem um comando para atualização. Como o valor armazenado para uma 
determinada chave é tratado como atômico, não são permitidas atualizações nele. 
Caso seja necessário realizar uma operação de atualização, é necessário excluir a 
informação e depois inseri-la novamente.
UNIDADE 1 | BANCOS NOSQL
24
Obviamente os comandos do Redis não se limitam a apenas operações 
básicas de CRUD (create, read, update e delete). Um comando muito útil quando 
estamos utilizando esse BD é o comando “KEYS”. O comando KEYS retorna todas 
as chaves armazenadas na base de dados. Como parâmetro podem ser passadas 
expressões regulares para encontrar chaves que sigam certo padrão. A sintaxe do 
comando é simples: para buscar todas as chaves da base você executa “KEYS *”. 
Caso você necessite achar chaves específi cas poderá passar uma expressão 
regular como parâmetro, por exemplo, “KEYS *o” para buscar todas as chaves 
que terminem com a letra “o”. Imagine que inserimos os dados de fi lmes e 
diretores apresentados na modelagem da Figura 4. A Figura 10 apresenta os 
resultados de consulta: (i) todos os registros cadastrados, e (ii) as chaves que 
mapeiam informações de fi lmes. Apesar de muito útil, o uso do comando KEY é 
desaconselhado em ambiente de produção, pois ele iterará sobre todas as chaves 
armazenadas, o que pode mitigar o desempenho.
FIGURA 10 – CONSULTAS UTILIZANDO KEY
FONTE: O autor
O Redis possui muitas outras funções, tais como: manipular documentos 
JSON, suporte a estruturas de lista e pilha, entre outras. 
Espero que essa rápida introdução tenha esclarecido algumas eventuais 
dúvidas no funcionamento prático de um BD chave-valor e que sirva de ponto de partida 
para que você continue explorando diferentes estruturas e consultas que o Redis permite 
utilizar. Você pode encontrar informações detalhadas sobre os comandos do Redis e seu 
funcionamento diretamente no link: https://bit.ly/3gsQRwa.
DICAS
25
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
• Os BDs chave-valor possuem um modelo de dados simples, baseado em chaves 
únicas que apresentam um valor associado. Esse valor pode ter qualquer 
estrutura, sendo tratado pelo modelo como uma caixa-preta.
• Os BDs chave-valor possuem uma linguagem de consulta simples que, 
geralmente, apenas permitem consultas nas chaves. Pesquisas nos valores 
tornariam o sistema mais lento, sendo assim não são permitidas consultas com 
base neles.
• O acesso aos dados armazenados em um BD chave-valor é bastante rápido, 
pois os valores são armazenados de maneira otimizada baseada na chave.
• Esses BDs utilizam particionamento de dados para facilitar o suporte à 
escalabilidade. Além disso, a fim de suportar alta disponibilidade, as partições 
dos dados são replicadas entre os nós do cluster.
• Os BDs chave-valor são indicados para uso em que a busca de dados é sempre 
feita por um identificador único.
26
1 Cite as principais características do modelo NoSQL chave-valor explicando 
como o BD dá suporte a elas.
2 Descreva uma aplicação real para um BD chave-valor. Defina em qual 
problema você usaria esse tipo de BD e argumente sobre o motivo de sua 
decisão.
AUTOATIVIDADE
27
TÓPICO 3
BANCOS ORIENTADOS A DOCUMENTOS
UNIDADE 1
1 INTRODUÇÃO
Até agora conhecemos os BDs NoSQL de maneira geral. Sabemos que es-
ses BDs possuem diferentes modelos de dados e que cada um serve para um tipo 
de aplicação. Além disso, já exploramos o modelo de dados mais simples, o cha-
ve-valor, conhecendo suas estruturas e quando devemos utilizá-lo.
Seguindo nossos estudos pelo paradigma de BDs NoSQL, iremos agora 
conhecer o modelo de dados orientado a documentos. Esse modelo pode ser visto 
como uma especialização do modelo de dados chave-valor. Como dito anterior-
mente, esse modelo de dados pertence à categoria dos BDs NoSQL baseados em 
chave de acesso, já que, assim como o modelo de dados chave-valor, tem seu 
acesso baseado na busca por chaves.
Essa informação deve ter feito você pensar o porquê da existência desse 
modelo já que é semelhante ao chave-valor e também possui acesso via chave ou 
identificador único. Como vimos anteriormente, o modelo chave-valor é muito 
simples e apesar de ser rápido não permite que sejam realizadas pesquisas que 
não estejam relacionadas à chave. Dessa forma, existia a necessidade de BDs que 
tivessem uma linguagem de consulta mais robusta que não se limitasse apenas a 
consultas pela chave.
BDs com modelo de dados orientado a documentos permitem o arma-
zenamento de estruturas mais complexas que o modelo chave-valor, assentindo 
que o usuário possa realizar consultas nos valores armazenados dentro dessas 
estruturas. Além disso, os BDs dessa categoria possuem linguagens de consulta 
mais robustas, com funções de agregação, agrupamento, entre outras.
Neste tópico, veremos como um BD NoSQL orientado a documentos ar-
mazena e manipula seus dados. Exploraremos quais técnicas tais BDs utilizam 
para prover suporte à alta escalabilidade e alta disponibilidade. Ademais, como 
no tópico anterior, realizaremos uma atividade prática utilizando o MongoDB, 
visando ao seu primeiro contato com um BD orientado a documentos.
28
UNIDADE 1 | BANCOS NOSQL
2 MODELO DE DADOS E ARQUITETURA
Como o nome já sugere, os BDs NoSQL orientados a documentos pos-
suem como estrutura central de armazenamento o documento. Sendo assim, 
esses BDs armazenam e manipulam documentos que podem ser JSON, BSON 
(Binary JSON), XML (Extensible Markup Language) ou qualquer outro (SADA-
LAGE; FOWLER, 2012). Tais documentos, geralmente, são autodescritivos com 
estruturas hierárquicas em forma de árvore. 
Podemos pensar neste BD como sendo um BD chave-valor, em que os da-
dos armazenados para o valor podem ser consultados e manipulados (CATTELL, 
2015). Dessa forma, nestes BDs temos uma chave associada a um documento com 
estrutura própria. Os documentos armazenados podem não possuir semelhançaestrutural, ou seja, o usuário é livre para defi nir como os dados serão organiza-
dos no documento. Desse modo, como se trata de documentos, a sintaxe de cada 
modelo deve ser devidamente respeitada. 
BDs orientados a documentos geralmente possuem uma estrutura de 
armazenamento muito semelhante entre eles. A grande maioria possui uma es-
trutura baseada em um conceito geral que representa a base de dados. A base 
é constituída por coleções de documentos defi nidas pelo usuário. Cada coleção 
de documentos possui um nome único e pode ser vista como um diretório que 
agrupa documentos semelhantes. As coleções de documentos são constituídas 
por múltiplos documentos. Cada documento deve possuir um nome/chave que o 
identifi que unicamente dentro da coleção de documentos. Além disso, os docu-
mentos são basicamente constituídos de atributos com seus respectivos valores. 
O valor de um atributo pode ser de diversos tipos, desde um valor inteiro atômi-
co a conjuntos de dados ou mesmo outros documentos. Esta estrutura pode ser 
visualizada na Figura 11.
 FIGURA 11 – EXEMPLO DE UM BD ORIENTADO A DOCUMENTOS
FONTE: O autor
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
29
Como você deve ter percebido, a estrutura de um BD orientado a 
documento é comparável à estrutura de um BD relacional. Claro que os conceitos 
se diferem pela natureza com que são tratados, porém é possível traçar um 
paralelo entre os conceitos. O Quadro 2 apresenta uma forma de mapeamento 
entre os conceitos do modelo relacional para o modelo orientado a documentos. 
Perceba que uma coleção de documentos pode ser vista como uma tabela, já que, 
em essência, ambas agrupam dados relacionados a um mesmo tipo de objeto/
entidade. Cada uma das linhas de uma tabela poderia ser mapeada para um 
documento pertencente à coleção, tendo em vista que representa um registro de 
certo objeto ou entidade. Considerando uma tupla com seus valores, o documento 
mapearia cada uma das colunas como um atributo e seu respectivo valor. Por fim, 
a chave primária ou identificador da tupla, pode ser vista como nome ou chave 
de acesso de um documento.
QUADRO 2 – MAPEAMENTO BD ORIENTADO A DOCUMENTOS PARA RELACIONAL
Banco Relacional NoSQL documento
Base de dados Base de dados
Tabela (relação) Coleção de Documentos
Linha (tupla) Documento
Identificador da tupla Nome/Chave Documento
FONTE: O autor
Esse mapeamento não necessariamente é o correto, tudo depende da for-
ma com que os dados serão acessados. Na verdade, tal mapeamento deve ser 
visto como um guia conceitual para traçar um paralelo entre os dois modelos e 
não como guia definitivo de mapeamento entre modelos. Geralmente, não faz 
muito sentido realizar esse tipo de mapeamento. Veja que se você sempre realizar 
esse mapeamento, você estará atrelando a estrutura de sua aplicação ao modelo 
relacional sem que seu BD seja relacional. Desse modo, isso pode condizer com 
seu problema e suas consultas, mas também pode ocasionar sérios problemas de 
desempenho nas consultas.
Vamos fazer um exemplo simples. Considere novamente o BD Cinema 
apresentado no Tópico 2. Lembre-se que esse BD possui duas tabelas: Filmes e Di-
retor. A Tabela Filmes contém algumas informações básicas de filmes e uma chave 
estrangeira para o diretor responsável pelas gravações. A Tabela Diretor apenas 
possui um identificador único, o nome do diretor e quantos prêmios ele recebeu. A 
Figura 12 apresenta o mapeamento do BD relacional Cinema para o modelo de do-
cumentos baseado nas regras de mapeamento propostas. Perceba que as tabelas fo-
ram mapeadas para coleções de documentos. A coleção de documentos Filmes, por 
exemplo, possui três documentos, cada um mapeando uma tupla da tabela Filmes. 
O documento possui como chave o valor da chave primária de cada tupla (coluna 
id) e é constituído dos atributos que mapeiam as colunas das respectivas tuplas.
30
UNIDADE 1 | BANCOS NOSQL
FIGURA 12 – BD CINEMA MAPEADO PARA O MODELO DOCUMENTO
FONTE: O autor
Considerando isso, imaginamos que você ficou com uma dúvida: no BD 
relacional a coluna diretor da tabela Filmes é uma chave estrangeria para a tabela 
diretores, então, os BDs NoSQL possuem chaves estrangeiras?
Apesar do valor da coluna da Tabela Filmes ter sido mapeado para o atri-
buto ‘diretor’ dos documentos, não existe uma relação de chave estrangeira, ou 
seja, não existe garantia nenhuma de integridade que o valor do atributo exista 
na coleção de documentos Diretores. Este é um ponto importante dos modelos 
NoSQL em geral: a fim de dar melhor desempenho ao acesso aos dados, restri-
ções de integridade referencial são deixadas de lado e esses BDs não suportam 
esse tipo de função. Sendo assim, como sabemos que o valor armazenado no 
atributo diretor no documento “1” da coleção Filmes de fato se refere a um valor 
em outra coleção? A resposta é simples: você deve criar um método via aplicação 
que verifique. No entanto, como você deve imaginar, isso se torna pesado, e não 
é uma boa prática. Nesse sentido, indicamos que se você necessita muito desse 
relacionamento não use esse tipo de mapeamento. 
BDs NoSQL orientados a documentos geralmente não permitem chaves 
estrangeiras. Existem algumas exceções: o MongoDB, por exemplo, permite que 
você crie ligações entre documentos, é como se fosse um atalho para encontrar 
um documento pertencente a outra coleção de documentos. Apesar de se asseme-
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
31
lhar com uma chave estrangeira, a referência a documentos implementada pelo 
MongoDB não deve ser considerada para emular chaves estrangeiras. 
Vamos imaginar então que em nosso BD não precisamos mais nos impor-
tar com a integridade referencial, ou seja, nosso sistema está bem construído e 
para todo Filme cadastrado existe sempre um diretor correspondente. Dessa for-
ma, não precisamos nos importar com a restrição de uma chave estrangeira, e a 
inclusão de registros, por consequência, é mais rápida já que não realiza esse tipo 
de validação. Contudo, uma consulta recorrente em nossa base de dados é buscar 
os filmes e o nome do diretor que o dirigiu. Através do modelo relacional essa 
seria uma consulta simples de realizar, bastaria utilizar uma junção. O problema 
é que BDs NoSQL, em sua grande maioria, não possuem suporte à operação de 
junção. 
Perceba que a operação de junção faz total sentido quando pensamos 
no modelo relacional. Como o modelo é baseado na teoria de conjuntos, basi-
camente, estamos pegando dois conjuntos e executando uma intersecção (SIL-
BERSCHATS; KORTH; SUDARSHAN, 2012). Quando pensamos no modelo de 
dados NoSQL de documentos, isso perde o sentido já que agora temos diretórios 
(coleções) e documentos. Além disso, como vimos no Tópico 1, sistemas NoSQL 
primam pelo desempenho, e operações de junção são pesadas. Então, já que não 
podemos utilizar junções, como poderemos retornar os dados de cada filme com 
seus respectivos diretores? Uma possível solução é implementarmos na aplicação 
nosso próprio algoritmo de junção. Claramente essa não é uma boa opção, pois 
demanda tempo e, considerando que algoritmos de junção são complexos, prova-
velmente acabaríamos perdendo desempenho ao executá-los.
Uma solução interessante para esse problema é a utilização do conceito 
de agregados. BDs NoSQL geralmente utilizam o conceito de agregado para per-
mitir que o usuário possa interagir com estruturas de armazenamento mais com-
plexas. Perceba que quando estamos manipulando informações com o modelo 
relacional, tudo se baseia na execução de operações em tuplas, sendo que tudo 
é executado tupla a tupla. Muitas vezes, como quando utilizamos uma operação 
de junção, precisamos combinar tuplas em um registro mais complexo. O concei-
to de agregação é, basicamente, armazenar esses dados em uma estrutura mais 
complexa com mais subníveis.
Vamos pensar novamente em nosso exemplo, modelamos nosso BD 
orientado a documentos considerando que cada tabela viraria uma coleção de 
documentos, pois os conceitos têm semelhanças.Se utilizarmos o conceito de 
agregados podemos considerar que na verdade algumas tabelas poderiam ser 
mapeadas como um atributo complexo de um documento. Considerando isso, 
poderíamos mudar nosso mapeamento inicial do BD Cinema para mapear as tu-
plas da tabela “Diretores” diretamente para valores complexos em seus pares 
(chaves-estrangeiras) nos documentos da coleção Filmes. A Figura 13 apresenta 
uma representação deste novo modelo de mapeamento.
32
UNIDADE 1 | BANCOS NOSQL
FIGU RA 13 – MAPEAMENTO BD CINEMA BASEADO EM AGREGADOS
FONTE: O autor
Perceba que nessa nova versão de nosso modelo existe apenas uma 
coleção de documentos: a coleção de Filmes. Os dados referentes ao diretor de 
cada um dos fi lmes foram armazenados com o respectivo fi lme. Perceba que 
dessa forma temos apenas um documento que contém todas as informações 
referentes a um fi lme. Assim, não existe mais a necessidade de uma junção para 
obter as informações. Assim, para se obter as informações dos fi lmes com seus 
respectivos diretores, basta buscar todos os fi lmes e exibir apenas as informações 
que precisamos. 
Dessa forma, pode-se perceber que essa solução resolve de fato o problema, 
mas cria alguns possíveis novos problemas. Um desses problemas é que na hora 
de inserir um novo fi lme é possível escrever as informações do diretor erradas e 
deixar a base de dados inconsistente. De fato, isso pode ocorrer, e se você optar 
por uma solução desse tipo deve ter em mente os problemas que ela pode gerar. 
Veja que a solução deste problema é mais simples que implementar um algoritmo 
de junção.
Outro problema que você deve ter notado é que os diretores se repetem 
para os fi lmes, sendo assim serão armazenadas informações redundantes, mas 
isso não é necessariamente um problema. O modelo relacional foi criado em uma 
época em que o armazenamento era muito caro, desse modo, para mitigar esses 
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
33
custos, foram criadas as regras de normalização que evitam dados redundantes 
e outras situações. Atualmente, o custo de armazenamento é muito mais barato, 
computadores pessoais já são equipados com discos rígidos com armazenamento 
na casa dos Terabytes. 
Quando é realizado a modelagem de um banco de dados NoSQL, a partir 
de qualquer modelo de dados, deve esquecer esse tipo de limitação. Não se deve 
pensar em tabelas normalizadas, a estrutura de dados é diferente. Devemos focar 
no desempenho das consultas que iremos executar. No caso de nosso exemplo, 
eliminamos a necessidade de uma junção armazenando os dados juntos.
Para esse problema isso seria uma boa solução, pois o uso de agregados 
é muito difundido e encorajado nos BDs orientados a documentos. No entanto, 
deve ser utilizado com cuidado. Para nosso exemplo, essa é uma solução muito 
elegante, pois o agregado de Diretores é pequeno. Devemos tomar cuidado com 
o tamanho dos agregados utilizados. BDs orientados a documentos permitem a 
inclusão de agregados dentro dos agregados, e isso pode gerar documentos muito 
grandes. Quando você utiliza essa abordagem deve ter em mente que alguns BDs 
limitam o tamanho dos documentos que são armazenados ou mesmo que são 
retornados em uma consulta. Assim, se seu documento for muito grande, o BD 
pode ter que adotar uma técnica que retorne o documento em partes menores, o 
que influenciará diretamente no desempenho do seu sistema.
Sempre que você for planejar a utilização de um BD orientado a documento 
temos que ter em mente as limitações que ele impõe. O modelo é muito flexível e 
permite que o usuário defina a estrutura do documento livremente, mas isso deve 
ser realizado com certo cuidado.
Como você já deve ter imaginado, os BDs orientados a documento são 
livres de um esquema, ficando a critério do utilizador a estrutura que será 
utilizada. Inclusive, não existe uma definição formal de esquema mesmo para 
a coleção de documentos. Assim, é possível colocar documentos de diferentes 
estruturas na mesma coleção. Se quisermos podemos adicionar um novo atributo 
aos filmes que cadastrarmos a partir de agora, por exemplo. Para isso, basta 
adicionar o atributo aos novos documentos e quando realizar uma consulta com 
base nesse novo atributo os documentos que não o possuem não serão exibidos. 
Alguns BDs específicos, como o MongoDB, permitem opcionalmente que 
o usuário defina um esquema para documentos em uma mesma coleção. Assim, 
é possível criar uma série de regras estruturais, utilizando DTD (Document Type 
Definition), para que todos os documentos de uma certa coleção tenham essa 
estrutura. Depois de definida a DTD, todos os documentos da coleção devem 
seguir essa estrutura. Qualquer documento fora da especificação não será 
adicionado. Agora você deve ter pensado: mas como assim um esquema para um 
BD NoSQL? Ser livre de esquema não era uma característica interessante?
34
UNIDADE 1 | BANCOS NOSQL
Ser livre de esquema não significa necessariamente não suportar um 
esquema. Os BDs NoSQL atacam diversas frentes de novas aplicações e, 
eventualmente, um esquema pode ser necessário. Esse esquema possui um 
custo, uma inclusão em uma coleção de documentos livre de esquema é mais 
rápida do que em uma que o possua. Isso é meio óbvio, já que quando existe 
um esquema deve ser feita uma verificação de validade do documento sobre o 
conjunto de regras. Esse é o ônus do uso de um esquema: as inclusões ficam um 
pouco mais lentas. O bônus é que as consultas ficam mais rápidas já que com uma 
estrutura rígida o BD pode otimizar mais as consultas. Dessa forma, podemos nos 
questionar: já que torna as consultas mais rápidas, devemos usar sempre?
A resposta é não! Sempre devemos considerar o problema que se está 
tratando. Devemos ser capazes de medir se irá ou não valer a pena utilizar 
o esquema de dados, ou seja, medir se o ganho em desempenho será tão 
recompensador para valer a pena abrir mão da flexibilidade. Veja que, mesmo 
usando o esquema, ainda assim temos uma inclusão, que tende a ser mais rápida 
que uma realizada no modelo relacional. O modelo relacional deve garantir 
todas as propriedades ACID, enquanto os BDs NoSQL relaxam ou ignoram essas 
propriedades.
Agora que conhecemos o modelo de dados orientado a documentos 
e sabemos como o armazenamento de dados funciona precisamos entender as 
outras características desse modelo. Existem diversos sistemas NoSQL orientados 
a documentos, vejamos alguns exemplos: 
• MongoDB.
• CouchDB.
• RavenDB.
• LotusNotes.
Todos eles possuem suas estruturas de armazenamento e algoritmos de 
manipulação. O MongoDB, por exemplo, utiliza documentos no formato BSON 
para armazenar seus dados, já o CouchDB utiliza JSON. Apesar disso, todos 
compartilham algumas características de funcionamento.
BDs orientados a documento, geralmente, possuem uma arquitetura 
baseada em réplicas através de nós mestre e nós escravos/trabalhadores, ou 
O DTD (Document Type Definition) é uma estratégia para estruturar 
documentos. Para conhecer mais sobre ele, acesse a página do W3Schools que explica esse 
conceito com exemplos. Disponível em: https://www.w3schools.com/xml/xml_dtd.asp.
DICAS
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
35
seja, um nó mestre é responsável por manter a versão mais atual dos dados e é 
responsável por receber e executar as operações de escrita (inserção, atualização e 
exclusão). Esse nó é ligado a nós configurados como trabalhadores que armazenam 
réplicas dos dados. Essas réplicas são utilizadas apenas para leitura. Caso o nó 
mestre pare de funcionar, um dos nós trabalhadores tomará seu lugar. O número 
de réplicas é configurado pelo usuário. 
BDs orientados a documentos suportam diferentes níveis de consistência. 
Por padrão, a fim de maximizar o desempenho na escrita e leitura de registros, 
o sistema suporta consistência eventual, assim como os BDs chave-valor. Deve-
se lembrar que os BDs NoSQL sacrificam as propriedades ACID para obter um 
bom desempenho e serem capazes de lidar com grandes quantidades

Continue navegando