Banco de Dados para Big Data
Banco de Dados para Big Data
Banco de Dados para Big Data
Indaial – 2020
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
S378b
CDD 004
Impresso por:
Apresentação
Caro acadêmico!
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.
Bons estudos!
III
NOTA
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.
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.
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.
IV
V
LEMBRETE
Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo.
VI
Sumário
UNIDADE 1 - BANCOS NOSQL............................................................................................................1
VII
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
VIII
TÓPICO 2 - SHARDING.......................................................................................................................147
1 INTRODUÇÃO....................................................................................................................................147
2 O QUE É SHARDING?.......................................................................................................................147
3 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
IX
X
UNIDADE 1
BANCOS NOSQL
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
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.
CHAMADA
1
2
UNIDADE 1
TÓPICO 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).
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.
3
UNIDADE 1 | BANCOS NOSQL
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).
4
TÓPICO 1 | BANCOS NOSQL
E
IMPORTANT
5
UNIDADE 1 | BANCOS NOSQL
NOTA
6
TÓPICO 1 | BANCOS NOSQL
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.
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.
7
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
DICAS
Para entender um pouco mais sobre o conceito de API REST confira o artigo O
que é API? REST e RESTful? Conheça as definições e diferenças! que está disponível em:
https://becode.com.br/o-que-e-api-rest-e-restful/.
8
TÓPICO 1 | BANCOS NOSQL
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.
9
UNIDADE 1 | BANCOS NOSQL
10
TÓPICO 1 | BANCOS NOSQL
11
RESUMO DO TÓPICO 1
Neste tópico, você aprendeu que:
• Os BDs NoSQL não vão acabar com o uso de BDs relacionais, eles tratam de
problemas diferentes e são complementares.
12
AUTOATIVIDADE
a) ( ) I, apenas.
b) ( ) III e IV, apenas.
c) ( ) II e I, apenas.
d) ( ) I, II e IV, apenas.
13
14
UNIDADE 1
TÓPICO 2
BANCOS CHAVE-VALOR
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.
E
IMPORTANT
FONTE: O autor
16
TÓPICO 2 | BANCOS CHAVE-VALOR
FIGURA 3 – DB CINEMA
FONTE: O autor
17
UNIDADE 1 | BANCOS NOSQL
um valor inteiro (que é o valor para o id). Como valor podemos criar um JSON
com todas as informações da tupla.
FONTE: O autor
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.
18
TÓPICO 2 | BANCOS CHAVE-VALOR
DICAS
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/.
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.
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-
19
UNIDADE 1 | BANCOS NOSQL
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.
NTE
INTERESSA
20
TÓPICO 2 | BANCOS CHAVE-VALOR
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 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: http://
try.redis.io/. Após acessar o link, você visualizará a interface representada pela
Figura 5.
FONTE: O autor
21
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
FONTE: O autor
22
TÓPICO 2 | BANCOS CHAVE-VALOR
FONTE: O autor
FONTE: O autor
23
UNIDADE 1 | BANCOS NOSQL
Caso você necessite achar chaves específicas 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 filmes 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 filmes. 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.
FONTE: O autor
DICAS
24
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
• Os BDs chave-valor são indicados para uso em que a busca de dados é sempre
feita por um identificador único.
25
AUTOATIVIDADE
26
UNIDADE 1
TÓPICO 3
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.
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.
27
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
28
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
29
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
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.
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.
31
UNIDADE 1 | BANCOS NOSQL
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 filmes foram armazenados com o respectivo filme. Perceba que
dessa forma temos apenas um documento que contém todas as informações
referentes a um filme. Assim, não existe mais a necessidade de uma junção para
obter as informações. Assim, para se obter as informações dos filmes com seus
respectivos diretores, basta buscar todos os filmes 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 filme é 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 filmes, 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
32
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
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.
33
UNIDADE 1 | BANCOS NOSQL
DICAS
• MongoDB.
• CouchDB.
• RavenDB.
• LotusNotes.
34
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
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.
35
UNIDADE 1 | BANCOS NOSQL
36
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
Para este exemplo não necessitamos da versão mais atual. Assim, para o
usuário do Ubuntu basta rodar o comando “sudo apt install mongodb” e todos
os pacotes serão baixados e instalados. Após a instalação basta rodar o comando
“mongo” e você será direcionado para o “MongoShell”. Se você quiser dispor da
versão mais atual do Mongo no Ubuntu deve seguir as instruções de instalação
disponíveis em: https://docs.mongodb.com/manual/tutorial/install-mongodb-
-on-ubuntu/.
37
UNIDADE 1 | BANCOS NOSQL
Neste ponto, a instalação foi concluída e você deve ter aberto o Mon-
goShell. Sendo assim, você deve estar com uma tela semelhante à apresentada
na Figura 15. Nesta interface, executaremos as consultas que envolvam as opera-
ções de CRUD (Create, Read, Update and Delete – Criar, Ler, Atualizar e Excluir).
Conforme dito anteriormente, este ambiente se assemelha muito a um shell de
JavaScript, assim iremos executar alguns métodos.
FONTE: O autor
FONTE: O autor
38
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
Como você já sabe, esse comando não retornaria nada já que ainda não
adicionamos nenhum documento a essa coleção. Sendo assim, vamos utilizar o
comando “insert” para adicionar um documento a nossa coleção. Para inserir
basta utilizar o comando “db.colecao.insert({atributo1: ‘valor’, atributo2: 2})”,
em que o parâmetro passado para o procedimento insert é um documento. Veja
pela Figura 17 (primeira linha) como ficará a inserção de um dos filmes. Perceba
que o diretor está como um agregado no documento principal do filme. Perceba
que o insert possui como retorno o número de linhas afetadas pela operação. Na
segunda linha vemos a busca pelos documentos da coleção de filmes.
FONTE: O autor
Já foi visto como realizar uma busca simples nesse modelo de dados,
porém, como dito anteriormente, a linguagem de consulta dos BDs orientados
a documentos é mais robusta e permite buscas mais refinadas no interior dos
documentos.
39
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
FONTE: O autor
Agora que já foi realizado algumas consultas, é possível que haja a necessi-
dade de remover alguns documentos armazenados na base de dados. O procedi-
mento utilizado para remover informações é o “remove”. O remove recebe como
parâmetro um documento que filtra os dados que serão removidos. A sintaxe para
o comando é “db.colection.remove({ atributo: valor})”. O documento passado como
parâmetro tem a mesma sintaxe que o documento passado para o método find.
40
TÓPICO 3 | BANCOS ORIENTADOS A DOCUMENTOS
41
RESUMO DO TÓPICO 3
Neste tópico, você aprendeu que:
42
AUTOATIVIDADE
3 Imagine que estamos montando uma aplicação que envolve dados oriundos de
diferentes tipos de sensores. Alguns sensores retornam informações referentes
à temperatura, outros à umidade do ar, outros à intensidade do vento, mas
todos consideram local, data e hora da coleta das informações. Justifique se
você considera ou não essa uma aplicação em que deve ser utilizado o modelo
orientado a documentos para persistência dos dados.
43
44
UNIDADE 1
TÓPICO 4
1 INTRODUÇÃO
Já foram vistos dois dos quatros modelos de dados dos BDs NoSQL.
Conhecemos os modelos de dados e como funcionam suas linguagens de
consulta. Além disso, discutimos como cada um deles trabalha internamente e
quais os possíveis casos de uso.
45
UNIDADE 1 | BANCOS NOSQL
Assim como nos tópicos anteriores, vale ressaltar que cada BD NoSQL
orientado a colunas tem sua forma peculiar de organização. Vamos ver neste
tópico a estrutura básica de um BD orientado a colunas, no entanto, os conceitos
podem variar de nome entres os produtos.
FONTE: O autor
46
TÓPICO 4 | BANCOS ORIENTADOS A COLUNAS
Vale ressaltar que essa é uma proposta de mapeamento que pode ou não
ser a melhor. Sempre quando modelamos uma abordagem devemos considerar
como esses dados serão acessados.
47
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
Por exemplo, o usuário realiza a busca dos filmes que foram lançados em
1970. Para que essa consulta tenha um ótimo desempenho é necessário adicionar
o ano ao identificador de cada uma das linhas. De maneira geral, é como se fosse
criada uma chave primária composta pelo id do filme e seu ano. Isso fará com que
a base de dados armazene filmes que possuam o mesmo ano de lançamento em
locais próximos. Assim, quando a busca pelos filmes de um determinado ano for
executada, a consulta terá ótimo desempenho.
48
TÓPICO 4 | BANCOS ORIENTADOS A COLUNAS
Imaginamos que você deve ter pensado que isso se assemelha muito a
um índice em um banco relacional. De fato, o armazenamento de chaves em um
BD orientado a colunas é semelhante a um valor indexado. A diferença é que
no BD orientado a colunas os dados são fisicamente armazenados considerando
os valores de chave, o que torna a busca de dados muito rápida. Sabemos que
a busca de uma chave no modelo chave-valor é O (1), a busca de uma chave no
modelo orientado a colunas não é tão rápida, mas atinge um patamar semelhante,
com a vantagem que para esse modelo as chaves são construídas por colunas, o
que facilita a busca dos dados e permite consultas mais complexas.
49
UNIDADE 1 | BANCOS NOSQL
50
TÓPICO 4 | BANCOS ORIENTADOS A COLUNAS
(CATTELL, 2011). No entanto, como dito anteriormente, esses BDs, por padrão,
trabalham com consistência eventual primando pelo suporte à alta disponibilidade.
51
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
FONTE: O autor
52
TÓPICO 4 | BANCOS ORIENTADOS A COLUNAS
FONTE: O autor
FONTE: O autor
Uma keyspace pode ser vista com uma base de dados. O comando para
criar uma keyspace é o “CREATE KEYSPACE”. Como você pode ver na Figura
26, este comando precisa de alguns parâmetros específicos. Um dos parâmetros
é o nome, no caso do exemplo, foi criada a keyspace “Cinema”. Repare que junto
aos parâmetros estão sendo passados a estratégia de replicação e qual o fator de
replicação utilizado. Isso é utilizado para configurar os níveis de consistência do
keyspace, quanto maior o fator de replicação, maior o nível de consistência (limitado
ao número de nós participantes do cluster). Após a criação, basta utilizar o comando
“USE nome_keyspace” para selecionar a keyspace em que os dados serão inseridos.
FIGURA 26 – KEYSPACE
FONTE: O autor
53
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
FONTE: O autor
54
TÓPICO 4 | BANCOS ORIENTADOS A COLUNAS
FONTE: O autor
FONTE: O autor
55
RESUMO DO TÓPICO 4
Neste tópico, você aprendeu que:
• A chave de acesso das colunas deve ser criada com base nas colunas que são
mais frequentemente acessadas pelas consultas.
• Esses BDs não são bons para aplicações que possuem mudanças constantes nas
colunas consultadas, pois os dados são armazenados baseados nos valores das
colunas que compõem a chave de acesso.
56
AUTOATIVIDADE
57
58
UNIDADE 1
TÓPICO 5
1 INTRODUÇÃO
Estamos nos encaminhando para o fim do conteúdo relacionado aos BDs
NoSQL. Até agora aprendemos que BDs NoSQL, de maneira geral, são BDs não
relacionas que possuem como premissas a alta disponibilidade e a escalabilidade
horizontal. Além disso, esses BDs não seguem o modelo relacional de dados e
possuem suas próprias linguagens de consulta.
59
UNIDADE 1 | BANCOS NOSQL
desse modelo e como é sua arquitetura. Por fim, realizaremos uma atividade
prática visando a um primeiro contato com essa tecnologia. Para a atividade será
utilizado o BD NoSQL Neo4J.
60
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
representam relações entre dois nós distintos. Segundo Sadalage (2012), o modelo
orientado a grafos, assim como um grafo tradicional, possui uma estrutura baseada
em nós e arestas. Cada nó possui um identificador e conjunto de atributos. As
arestas conectam dois nós e também possuem um nome (não necessariamente
único) e um conjunto de atributos e valores. Além disso, geralmente, em BDs
orientados a grafo, as arestas possuem uma direção, ou seja, cada aresta possui
uma origem e um destino definidos. A Figura 31 apresenta uma visão da
organização dos dados armazenados em um BD orientado a grafos.
61
UNIDADE 1 | BANCOS NOSQL
Como vimos nos tópicos anteriores, todos os modelos de dados que es-
tudamos possuem uma forma de organizar seus dados fisicamente baseados em
uma chave de acesso. Então, seria natural pensarmos que o modelo orientado
a grafos também realiza alguma otimização nesse formato. Essa afirmação está
parcialmente correta. Lembre-se, primeiramente, que o modelo orientado a gra-
fos não possui o conceito de chave de acesso como os demais representantes dos
BDs NoSQL. No entanto, esses BDs otimizam seu armazenamento baseado nos
relacionamentos entre os nós.
62
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
Você já deve estar imaginando que como estes BDs possuem suporte às
propriedades ACID também devem possuir suporte a transações. E isso é exata-
mente o que ocorre. BDs orientados a grafos geralmente suportam transações que
operam sobre diversos nós. Durante uma transação podem ser realizadas quais-
quer operações sobre o grafo. De maneira geral, toda operação que envolve algu-
ma operação de escrita deve ser declarada explicitamente como uma transação.
Assim como as transações do modelo relacional, caso estejamos executando uma
transação com dez operações, e a última delas falhar, o BD realizará o rollback e
voltará para o estado anterior à execução da transação.
Outra característica que deve ser explorada para estes BDs é a capaci-
dade de consulta. Ao contrário das demais categorias de BDs NoSQL, os BDs
orientados a grafos possuem linguagens de consulta muito semelhantes entre
si. Geralmente, os BDs orientados a grafos utilizam uma linguagem baseada em
63
UNIDADE 1 | BANCOS NOSQL
Esse modelo de dados deve ser empregado sempre que possuímos uma
aplicação que lide com dados conectados de alguma forma. Por exemplo, você
pode utilizar grafos para representar empregados, seus conhecimentos, quais os
projetos em que trabalharam e com quais outros empregados trabalharam. Dessa
forma, posso realizar consultas para selecionar equipes efetivas e com conheci-
mento específico para realização de novos projetos.
64
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
Após acessar o link do console, você verá que já existe um exemplo rodando
nesta aba. Usaremos este mesmo exemplo, porém vamos executá-los passo a
passo para que você consiga entender o funcionamento deste BD. Assim, quando
acessar link do console, será observado uma tela semelhante à Figura 32. Na parte
superior da tela (número 1), são apresentados os dados que estão armazenados
para o exemplo. Na parte superior direita (número 2), é apresentado um menu
com algumas facilidades de acesso. Inferiormente, à direita na imagem, número
3, é apresentada uma visão do grafo armazenado na base de dados. Perceba que
são exibidos os nomes de cada nó e aresta. Por fim, a última parte na imagem,
número 4, é o console em que podemos realizar nossas consultas.
65
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
66
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
FONTE: O autor
FONTE: O autor
67
UNIDADE 1 | BANCOS NOSQL
FONTE: O autor
Uma consulta interessante seria ver a quem o Neo ama (Loves). Essa é
uma consulta simples: basta buscar um nó do “Crew”, chamado Neo, e verificar
quem possui um relacionamento do tipo “Love” com ele. A resposta para essa
consulta é representada pela primeira linha da Figura 37. Perceba que nesta
consulta é utilizado o relacionamento dos dois nós. A consulta retorna o nome
do nó “m” que se liga ao nó “n” por um relacionamento do tipo “LOVES”. A
segunda consulta apresenta os nomes dos nós, que são conhecidos dos conhecidos
do nó “Neo”. Veja que a consulta está considerando os nós que possuem
relacionamento do tipo “KNOWS” ([:KNOWS]-(m)), com quaisquer nós (“-()-
”) que possuam o relacionamento do tipo KNOWS com um nó do tipo Crew
(“(n:Crew)-[:KNOWS]”).
FONTE: O autor
Agora, só nos faltar saber excluir nós de nossa base de dados. É importante
ressaltar que nós que possuem algum tipo de relacionamento não podem ser
excluídos. Nós que não possuem relacionamentos só devem ser buscados pela
consulta MATCH e deletados através do comando DELETE. Por exemplo, caso
68
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
“Neo” não possuísse relacionamentos com outros nós, ele poderia ser excluído
pela consulta “match (n:Crew) where n.name='Neo' DELETE n”. No entanto, se for
necessário excluir um nó que possui relacionamento, como procedemos? Temos
que criar uma consulta que primeiro apague o relacionamento para então apagar
o nó propriamente dito. A consulta apresentada pela Figura 38 apaga o nó “The
Architect” e seus respectivos relacionamentos.
FIGURA 38 – DELETE
FONTE: O autor
69
UNIDADE 1 | BANCOS NOSQL
LEITURA COMPLEMENTAR
Mauricio de Diana
Marco Aurélio Gerosa
1 INDRODUÇÃO
O mundo nunca lidou com volumes de dados tão grandes, em parte graças
à Web 2.0. No artigo em que define Web 2.0, Tim O’Reilly fala sobre a necessidade
de se aproveitar a Inteligência Coletiva e sobre dados como diferencial competitivo
(O’REILLY, 2005). Não por acaso, muitas inovações na área de gerenciamento de
dados vieram de algumas empresas pioneiras da Web 2.0, que encontrando limites
nas técnicas e ferramentas disponíveis naquele momento, criaram suas próprias
soluções, em sua maioria não relacionais. Boa parte da motivação por trás dessas
soluções estava ligada a novos requisitos de escalabilidade e disponibilidade, que
fizeram com que outros requisitos tidos como indiscutíveis fossem revistos, como
a consistência dos dados, por exemplo (VOGELS, 2009) (PRITCHETT, 2008).
70
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
larga escala, mas sem usar ainda o nome NOSQL. O nome só surgiu alguns anos
depois, em 2009, quando algumas novas empresas da Web 2.0 e a comunidade de
software livre e código aberto começaram a desenvolver novas opções de bancos
de dados, inspiradas nas ideias que apareceram naqueles artigos.
Assim como o termo não relacional, o termo NOSQL não ajuda a definir o
que esses bancos são de fato. Além do problema da falta de precisão, esse termo
também tem contribuído para uma grande confusão em torno dessa categoria de
bancos de dados, já que a princípio a linguagem SQL não é sinônimo de bancos
de dados relacionais, nem representa as limitações desses bancos de dados.
Devido a isso, o termo NOSQL tem sido usado com o significado de “não apenas
SQL” numa tentativa da comunidade de reconhecer a utilidade dos modelos
tradicionais e não divergir as discussões. No fim, NOSQL não define precisamente
esses bancos de dados, mas no geral cada um deles apresenta a maioria das
seguintes características: não relacional, distribuído, de código aberto e escalável
horizontalmente, ausência de esquema ou esquema flexível, suporte à replicação
nativo e acesso via APIs simples (NOSQL, 2010). Entre os principais fatores que
favoreceram seu surgimento estão a natureza dos dados da Web, a importância
de se atingir altos graus de paralelismo no processamento dos grandes volumes
de dados e a distribuição de sistemas em escala global.
Natureza dos dados da web. A Web é composta por uma grande quantidade
de dados semiestruturados e crus, como as páginas Web (cuja estrutura descrita
no documento HTML expressa muito pouco sobre o significado do conteúdo do
documento) e conteúdo multimídia (imagens, sons e vídeos). Ao reconhecer a
natureza particular dos dados, é possível criar soluções otimizadas para eles, ao
invés de se tentar estruturá-los, como proposto por alguns autores (ATZENI et
al., 1997). A constatação de que os dados na Web não são estruturados é um dos
fatores que favoreceram o surgimento de tecnologias de gerenciamento de dados
diferentes das tradicionais.
71
UNIDADE 1 | BANCOS NOSQL
O teorema CAP fala sobre esse tipo de situação. As três letras de CAP se
referem à consistência, disponibilidade e tolerância à partição. Consistência nesse
72
TÓPICO 5 | BANCOS ORIENTADOS A GRAFOS
CHAMADA
73
RESUMO DO TÓPICO 5
Neste tópico, você aprendeu que:
• Esses BDs possuem uma estrutura composta por nós e arestas. Os nós
representam objetos e possuem atributos. As arestas representam relações entre
objetos, sendo que elas possuem direção (origem e destino) e opcionalmente
possuem uma série de atributos.
• Esses BDs são muito indicados para uso em aplicações que possuem dados
conectados de alguma forma, porém é desencorajado seu uso em aplicações que
necessitem realizar consultas que busque nós baseado em suas propriedades
(consultas transversais).
74
AUTOATIVIDADE
75
76
UNIDADE 2
PARTICIONAMENTO DE BANCO
DE DADOS
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
Esta unidade está dividida em quatro tópicos. No decorrer da unidade
você encontrará autoatividades com o objetivo de reforçar o conteúdo
apresentado.
CHAMADA
77
78
UNIDADE 2
TÓPICO 1
PARTICIONAMENTO DE DADOS
1 INTRODUÇÃO
Big data pode ser considerada como a eletricidade do século XXI, com
um alto poder de transformar muitos aspectos em relação aos negócios e quanto
à vida pública e privada. No entanto, não são os dados brutos que permitem a
mudança e levam a melhores resultados, mas os insights derivados deles. Atual-
mente, as empresas buscam organizar seus dados pensando na modelagem de
negócios e em como isso pode ajudar a administrar os processos. Ou seja, big data
é a descoberta de informação baseada nos dados de instituições e empresas, o que
pode revelar outros novos fatores. Portanto, o uso de dados pode ajudar a mudar
definitivamente o cenário de empreendimentos, sejam privados ou públicos.
Os dados estão em todo lugar, pois são trocadas informações a todo ins-
tante, como e-mails, consultas em ferramentas de busca, trocas de mensagens por
aplicativos, acesso a sistemas de gestão nos locais de trabalho e assim por diante.
Isso ocorre até mesmo no controle de tráfego aéreo durante a comunicação entre
as aeronaves e a torre de comando, no trânsito com radares eletrônicos e nas mi-
lhares de câmeras captando imagens pelas cidades. Assim, são gerados dados de
vários tipos, que, em algum momento, são armazenados para análise em tempo
real ou posterior.
Big data são grandes conjuntos de dados coletados, que precisam de fer-
ramentas e tecnologias próprias para lidar com seu grande volume. Independen-
temente de os dados serem de tipos diferentes, hoje, há sistemas que permitem
que os dados sejam compilados e agrupados a fim de que se transformem em
informação, uma vez que dado e informação não são a mesma coisa. Dados são
parte da informação que, em conjunto, formam o conhecimento sobre determi-
nado assunto. Logo, um dado sozinho pode não fazer muito sentido, enquanto
o conjunto de dados pode gerar uma informação. Com informações, se alcança o
conhecimento, seja dentro de um único contexto em uma área específica, seja em
uma área mais vasta, que está inserida em vários contextos diferentes.
80
TÓPICO 1 | PARTICIONAMENTO DE DADOS
contrário dos dados corporativos tradicionais que podem ser modelados e arma-
zenados em tabelas relacionais, os dados atuais vêm de muitas fontes diferentes e
aparecem de várias formas, como em páginas da internet, redes sociais, e-mails,
ferramentas de pesquisas, sensores de equipamentos e todos os tipos de arquivos
multimídia e hipermídia, incluindo áudio, vídeo e figuras.
NOTA
• volume;
• velocidade;
• variedade.
• veracidade;
• variabilidade;
• valor.
81
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
82
TÓPICO 1 | PARTICIONAMENTO DE DADOS
● melhorar a escalabilidade;
● melhorar o desempenho do acesso aos dados;
● melhorar a segurança dos dados;
● fornecer flexibilidade operacional;
● fazer correspondência de diferentes repositórios de dados a um padrão;
● melhorar a disponibilidade dos dados em uma organização.
5 GERENCIAMENTO DE PARTICIONAMENTO
Ao particionar tabelas e índices em unidades menores e mais gerenciá-
veis, os administradores de bancos de dados podem usar uma abordagem de
dividir para conquistar no gerenciamento de dados. Bancos de dados distribuí-
dos fornecem um conjunto abrangente de comandos SQL para gerenciar tabelas
de particionamento. Isso inclui comandos para adicionar novas partições, soltar,
dividir, mover, mesclar, truncar e trocar partições. Com o particionamento, as
operações de manutenção podem se concentrar em partes específicas das tabelas.
NOTA
85
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
discos (HDs) de 1 TB cada um, sem o particionamento, o maior arquivo que poderá ser
armazenado terá o tamanho máximo de 1 TB. Usando o particionamento, o arquivo será
dividido em várias partes e distribuído pelos discos do cluster. Assim, quando for preciso
recuperá-lo, não haverá perda de informação.
86
TÓPICO 1 | PARTICIONAMENTO DE DADOS
7 ESTRATÉGIA DE PARTIÇÃO
Por mais vantajosa que seja a partição de dados, isso requer certos cuidados.
Um banco de dados distribuído deve fornecer o conjunto mais abrangente de
estratégias de particionamento, permitindo que os usuários do banco alinhem
da melhor maneira a subdivisão de dados com os requisitos de negócios reais.
É preciso, então, ter uma estratégia para lidar com o particionamento e o
planejamento de como as consultas e transações com os dados deverão acontecer.
87
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
ATENCAO
89
AUTOATIVIDADE
a) ( ) Sistemas distribuídos.
b) ( ) Sistema particionado.
c) ( ) Sistema gerenciador de banco de dados.
d) ( ) Sistemas computacionais.
e) ( ) Sistema de gestão de servidores.
90
que o processamento em servidores de bancos de dados de maneira paralela:
scaleup e speedup. Sobre essas duas palavras, analise as afirmações a seguir:
91
92
UNIDADE 2 TÓPICO 2
1 INTRODUÇÃO
O termo big data é cada vez mais utilizado tanto por profissionais de TI
quanto por empresários, alguns buscando especialização em áreas mais avan-
çadas em tecnologia e outros buscando obter vantagens competitivas para suas
empresas com a ajuda de profissionais de TI, por poderem oferecer possibilidade
de diminuição de custos, mais informação e conhecimento adequado para uma
melhor tomada de decisão, aumento na lucratividade e possibilidade de cresci-
mento do negócio ou, em alguns casos, por serem os profissionais que podem
garantir a sobrevivência da empresa.
2 FUNCIONAMENTO DO MAPREDUCE
Conforme apresentado no artigo da Google, por Dean e Ghemawat (2004),
o MapReduce é um modelo de programação e implementação associada a esse
modelo, que permite o processamento e a geração de grandes conjuntos de da-
dos. Nele, os usuários especificam uma função de mapeamento para processar
um par chave-valor, o que gera um conjunto de pares chave-valor intermediários,
e uma função de redução para mesclar os valores intermediários associados à
mesma chave intermediária. Além disso, muitas das tarefas do mundo real são
expressáveis nesse modelo.
quantidade de dados em paralelo, com conjuntos que podem chegar a vários te-
rabytes, em clusters que podem chegar a milhares de nós, compostos por máqui-
nas comuns, de maneira confiável e com tolerância a falhas.
Com o MapReduce, esses desafios são superados, tendo em vista que ele
permite computação paralela e distribuída sem a necessidade de cuidar de pro-
blemas como confiabilidade, tolerância a falhas e demais problemas citados ante-
riormente, o que gera flexibilidade aos desenvolvedores para criarem as aplicações
de big data focando apenas na abstração do problema que a aplicação se propõe a
resolver, sem a preocupação com o paralelismo ou a distribuição dos dados.
94
TÓPICO 2 | APLICAÇÕES SIMPLES UTILIZANDO FRAMEWORKS DE BIG DATA
95
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
96
TÓPICO 2 | APLICAÇÕES SIMPLES UTILIZANDO FRAMEWORKS DE BIG DATA
97
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
98
TÓPICO 2 | APLICAÇÕES SIMPLES UTILIZANDO FRAMEWORKS DE BIG DATA
Esta classe inicia a variável soma com o valor 0, para, então, executar o
loop, que soma cada valor do vetor valores na variável soma. Quando o loop
termina, escrito no contexto o valor da variável chave e a soma dos valores da
chave. A terceira classe, que engloba as duas anteriores e contém o método main
para executar o código delas, pode ser observada a seguir:
<dependency>
<groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</
artifactId> <version>1.4.0</version>
</dependency>
<mainClass>com.sagah.exemplospark.ContadorPalavras</mainClass>
100
TÓPICO 2 | APLICAÇÕES SIMPLES UTILIZANDO FRAMEWORKS DE BIG DATA
package com.sagah.exemplospark
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD; import org.apache.
spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext; import scala.
Tuple2;
import java.util.Arrays;
public class ContadorPalavras {
private static void contaPalavras(String nomeArquivo) { SparkConf
configuracao = new SparkConf().setMaster("local").
setAppName("Meu Contador de Palavras");
JavaSparkContext contexto = new JavaSparkContext(configuracao);
JavaRDD<String> arquivoEntrada = contexto.
textFile(nomeArquivo);
JavaRDD<String> palavrasArquivo = arquivoEntrada. flatMap(conteudo ->
Arrays.asList(conteudo.split(" ")));
JavaPairRDD dadosContados = palavrasArquivo.mapToPair(t -> new
Tuple2(t, 1)).reduceByKey((x, y) -> (int) x + (int) y);
dadosContados.saveAsTextFile("DadosContados");}
public static void main(String[] args) { contaPalavras(args[0]);}}
101
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
102
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
103
AUTOATIVIDADE
104
UNIDADE 2
TÓPICO 3
OVERVIEW DE FRAMEWORKS DE
STREAM DE BIG DATA
1 INTRODUÇÃO
Existem cenários com características específicas de streaming de big
data, como no caso de uma instituição financeira que rastreia em tempo real as
mudanças de mercado para ajustar as operações das carteiras de investimento
com base em limites máximos e mínimos, ou no caso de soluções de Internet
das Coisas que crescem a cada dia, e sensores de monitoramento que fazem o
envio constante das suas leituras para uma ou mais estações. Para lidar com esses
cenários, é necessário utilizar tecnologias que possam tratar séries temporais e
realizar o processamento à medida que os dados chegam, ao invés de esperar
o final da mensagem para realizar o processamento, pois, nesses casos, as
mensagens não contêm um sinal de fim de arquivo por serem um fluxo constante
de dados, que em teoria não tem fim.
Neste tópico, você vai conhecer uma visão geral de frameworks de stream
de big data, saber mais sobre o Spark Streaming, por meio da descrição de suas
características e da comparação com outras tecnologias utilizadas para stream de
big data, bem como pela ingestão de um stream de dados simples.
105
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
Os dados das aplicações que tratam esses fluxos podem ser ingeridos por
diversas fontes distintas, como plataformas de código aberto, e proprietário, como
o Apache Kafka, o Apache Flume e o Amazon Kinesis, ou de sockets TCP. Esses
dados podem ser processados com algoritmos complexos por meio das funções
de alto nível, como map, reduce, join e window.
Caso o tempo seja muito baixo, os microlotes não irão conter dados
suficientes para que os resultados da análise sejam significativos, e caso seja
muito alto, podem faltar recursos para o processamento dos microlotes.
106
TÓPICO 3 | OVERVIEW DE FRAMEWORKS DE STREAM DE BIG DATA
107
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
108
TÓPICO 3 | OVERVIEW DE FRAMEWORKS DE STREAM DE BIG DATA
Uma das diferenças entre eles é a forma como tratam os fluxos de dados
em tempo real. Enquanto o Spark Streaming utiliza o conceito de divisão em
microlotes e cada lote pertence a um lote do DStream, representado por diferentes
RDDs, o Structured Streaming processa cada linha do fluxo de dados e o resultado
é a atualização de uma tabela de resultados. Além disso, com o Structured
Streaming é possível que a tabela resultante seja composta por uma atualização
dos dados, apenas novos resultados ou todos os resultados, dependendo do
modo das operações utilizadas.
De acordo com Gorasiya (2019), apesar de esse controle ser mais custoso,
o Flink também utiliza pontos de verificação para a sua recuperação de falhas. No
entanto, o Storm não fornece gerenciamento de estados, o que força o reinício do
processo inteiro em diferentes nós, gerando, assim, a garantia de processamento
“ao menos uma vez”, diferentemente dos dois anteriores, que têm a garantia de
processamento de “exatamente uma vez”.
<dependency>
<groupId>org.apache.spark</groupId> <artifactId>spark-
streaming_2.12</artifactId> <version>2.4.5</version>
</dependency>
112
TÓPICO 3 | OVERVIEW DE FRAMEWORKS DE STREAM DE BIG DATA
import org.apache.spark.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.streaming.*;
import org.apache.spark.streaming.api.java.*;
import scala.Tuple2;
113
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
Para que essa linha seja processada e seja realizada a sua separação em
palavras, com o espaço em branco sendo o separador entre elas, é necessário
utilizar a operação flatMap, que recebe uma lista como parâmetro, que deve ser
separada na variável x, por meio dos métodos split e iterator, para que, então,
cada uma das palavras possa ser atribuída à variável palavras do tipo DStream,
conforme é possível observar no seguinte trecho de código:
jssc.start();
jssc.awaitTermination();
import org.apache.spark.*;
import org.apache.spark.api.java.function.*; import org.apache.
spark.streaming.*;
import org.apache.spark.streaming.api.java.*; import scala.Tuple2;
114
TÓPICO 3 | OVERVIEW DE FRAMEWORKS DE STREAM DE BIG DATA
FONTE: O Autor
115
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
./bin/run-example ContadorPalavrasStreaming
FONTE: O Autor
Com isso, é possível conhecer uma visão geral sobre o Apache Spark
Streaming, observar suas características e diferenças entre ele e outros frameworks,
como o Apache Structured Streaming, o Apache Flink e o Apache Storm, bem
como entender como seria a programação em Java de uma aplicação simples de
ingestão de dados em streaming.
116
RESUMO DO TÓPICO 3
Neste tópico, você aprendeu que:
● Assim como é feito nos RDDs, o Spark Streaming permite que os desenvolvedores
realizem a persistência dos dados em memória por meio da operação persist
() nos DStreams, que acontece por padrão no caso de operações que tratam
janelas, como a reduceByWindow e a reduceByKeyAndWindow.
117
AUTOATIVIDADE
a) ( ) DStream.
b) ( ) RDD.
c) ( ) Flatmap.
d) ( ) Receiver.
e) ( ) Reduce.
a) ( ) JavaStreamingContext.
b) ( ) SparkConf.
c) ( ) JavaReceiverInputDStream.
d) ( ) JavaDStream.
e) ( ) JavaPairDStream.
118
UNIDADE 2
TÓPICO 4
FRAMEWORKS DE ARMAZENAMENTO
NÃO ESTRUTURADOS
1 INTRODUÇÃO
Os dados não estruturados representam mais de 80% dos dados existentes
no mundo. Com tanta informação em potencial, foi necessário desenvolver novas
soluções de armazenamento que não apenas pudessem guardar esses dados, mas
que fossem capazes de assegurar que eles ficassem íntegros e com fácil acesso.
Além disso, como as fontes dos dados são crescentes, as novas soluções devem
ser capazes de escalar o armazenamento o quanto for necessário, sem perder
tempo de execução enquanto isso é realizado.
Neste tópico, você vai aprender o que é o Hadoop Distributed File System
(HDFS) e quais são as suas principais vantagens e utilizações. Você conhecerá
também como o armazenamento em nuvem de grandes empresas — como
Amazon, Microsoft, Google e IBM — superou as limitações que existiam quanto
a custo e escalonamento. Por fim, você compreenderá quais são as principais
operações realizadas em dados não estruturados.
119
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
3 ARQUITETURA
Nesse sistema, os dados e metadados são armazenados separadamente. Os
metadados são armazenados em um servidor intitulado NameNode e, enquanto
os dados são armazenados em DataNodes, ambos ficam conectados entre si, com
comunicação constante. Dentro dos NameNodes, ficam registrados diferentes
atributos, que incluem tempo de modificação, permissão, acesso do arquivo e
espaço em disco. O conteúdo de cada arquivo é dividido em blocos de tamanho
definido e replicado em diferentes DataNodes para garantir a integridade e
durabilidade dos dados, conforme ilustra a Figura 10.
120
TÓPICO 4 | FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS
4 TOLERÂNCIA A FALHAS
Um sistema é tolerante a falhas quando continua funcionando correta-
mente mesmo que um dos seus componentes tenha parado de funcionar ade-
quadamente, ou seja, falhado. O objetivo principal do HDFS é armazenar dados
de maneira confiável mesmo na presença de falhas. Os dois métodos principais
que possibilitam a sua alta tolerância a falhas são: replicação de dados e ponto de
verificação e recuperação.
Sempre que é solicitado o acesso aos dados pelo usuário, o NameNode pro-
cura por todos os DataNodes onde esses dados estão contidos e fornece o primeiro
que está em funcionamento. Esse funcionamento é monitorado através de pulsos
enviados a partir dos DataNodes. Quando o NameNode para de receber a pulsação
de um DataNode, assume que ele não está funcionando. Nesse caso, é realizada a
verificação dos dados que estavam ali contidos e, após, é criada uma réplica deles.
No caso da identificação de um DataNode “morto” durante a solicitação de um
usuário, o NameNode busca o próximo nó em funcionamento para fornecer os da-
dos enquanto a replicação do nó morto realizada paralelamente, sem interrupção
do acesso aos dados. Portanto, no caso de falha de um dos nós, os dados continuam
altamente disponíveis para o usuário (SHVACHKO et al., 2010).
121
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
5 ARMAZENAMENTO EM NUVEM
O armazenamento em nuvem é um serviço que surgiu em conjunto com
a chamada computação em nuvem, que corresponde a uma gama de recursos da
tecnologia da informação que podem ser utilizados sob demanda, sem a necessi-
dade de uma estrutura física local robusta. Além do armazenamento, esses recur-
sos incluem ambientes pré-configurados para a criação de data lakes, plataformas
de análises de dados, aprendizado de máquina, dentre outros (AWS, 2020). Essa
utilização sob demanda pode reduzir os custos físicos e operacionais das empre-
sas, além de poder apresentar maior segurança em relação a alguns sistemas de
armazenamento físico.
122
TÓPICO 4 | FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS
5.1. AMAZON S3
Amazon Web Services (AWS) é a plataforma de nuvem da empresa
transnacional Amazon. É a mais utilizada e abrangente do mundo, com mais de
175 serviços completos em nuvem disponíveis para o usuário. Além do maior
número de serviços, a AWS também possui a infraestrutura global mais extensa,
com 69 zonas de disponibilidade, em mais de 20 regiões geográficas, que são
conectadas por redes de baixa latência, alta taxa de transferência e redundância.
123
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
● Amazon EMR: é uma plataforma de big data nativa da nuvem, que oferece
suporte a 19 projetos de código aberto, como Apache Spark, Hive, HBase,
Flink, dentre outros. Esses projetos podem ser combinados à escalabilidade
dinâmica do Amazon EC2 e ao armazenamento escalável do Amazon S3.
124
TÓPICO 4 | FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS
O Azure pode ter redes virtuais e também pode ser conectado à rede
corporativa. Os requisitos de armazenamento podem ser tratados na categoria
padrão e também na categoria premium. A Microsoft possui 20 regiões
diferentes para o Azure em vários locais, como Ásia, Austrália, Europa e Brasil
(MICROSOFT AZURE, 2020b). Além do serviço de armazenamento em nuvem, a
plataforma também disponibiliza outros serviços para a construção de aplicações
distribuídas, como o SQL Azure Database, Azure AppFabric Platform e uma API
de gerenciamento e monitoração para aplicações colocadas na nuvem. Assim
como a Amazon, o Azure também oferece um serviço de data lake na nuvem. O
Azure Data Lake é baseado em Hadoop e em outras ferramentas do ecossistema
(MICROSOFT AZURE, 2020b).
125
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
DICAS
126
TÓPICO 4 | FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS
custo total é a soma de investimentos necessários para que a solução seja ad-
quirida e mantida, incluindo custo de trabalho humano e estrutura. De acordo
com o relatório da IDC liberado pela Amazon, utilizar o armazenamento do AWS
resulta em uma economia de 64,3% em comparação à implantação dos mesmos
recursos em ambientes locais. Já a alteração do armazenamento ativo do HDFS
para o Google Cloud Storage, geralmente, tem um custo total de propriedade
57% menor.
FONTE: O Autor
127
UNIDADE 2 | PARTICIONAMENTO DE BANCO DE DADOS
128
TÓPICO 4 | FRAMEWORKS DE ARMAZENAMENTO NÃO ESTRUTURADOS
cliente. Agora, o cliente começa a ler os blocos usando uma API e os dados são
transmitidos continuamente para o cliente. Após atingir o final de um bloco, a
conexão é fechada. Confira o passo a passo a seguir.
CHAMADA
129
RESUMO DO TÓPICO 4
Neste tópico, você aprendeu que:
• Embora o HDFS tenha sido, por muito tempo, “a menina dos olhos” do
universo do Big Data, a computação em nuvem vem conquistando cada vez
mais adeptos.
FONTE: O Autor
130
AUTOATIVIDADE
a) ( ) Preço.
b) ( ) Elasticidade.
c) ( ) Abordagem de armazenamento.
d) ( ) Quantidade de disponibilidade.
e) ( ) Durabilidade.
131
132
UNIDADE 3
DADOS SEMI-ESTRUTURADOS
E SHARDING
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
Esta unidade está dividida em três tópicos. No decorrer da unidade você
encontrará autoatividades com o objetivo de reforçar o conteúdo apresentado.
TÓPICO 2 – SHARDING
CHAMADA
133
134
UNIDADE 3
TÓPICO 1
FRAMEWORKS DE ARMAZENAMENTO
SEMIESTRUTURADOS
1 INTRODUÇÃO
Dados semiestruturados estão presentes em toda a web e representam
uma parcela dos dados que formam o big data. Esse tipo de dado necessita de
formas específicas de armazenamento e manipulação para que seja aproveitado
da melhor maneira. Por isso, é importante saber quais são os principais bancos
que comportam esses dados.
Neste tópico, você vai conhecer os bancos de dados NoSQL mais utiliza-
dos voltados para dados não estruturados, principalmente, os que são orientados
a documentos e grafos. Além disso, aprenderá sobre a capacidade de particiona-
mento e replicação deles, conhecendo as suas características e entendendo o que
possibilita que eles lidem com uma grande quantidade de dados. Por fim, você
será apresentado às operações de manipulação de gerenciadores de bancos de
dados CRUD (create, read, update e delete) e como elas são utilizadas no processo
de armazenamento.
SQL NoSQL
Sistema de dados relacionais Sistema de dados não relacionais
Escalável verticalmente Escalável horizontalmente
Estrutura estática Estrutura dinâmica
Downtime para aumentar a Aumento automático de
capacidade processamento
FONTE: O Autor
136
TÓPICO 1 | FRAMEWORKS DE ARMAZENAMENTO SEMIESTRUTURADOS
• MongoDB
• DynamoDB
Cada uma das partições do DynamoDB possui três nós, com cópias iguais
da partição. Cada nó possui duas estruturas: um log de replicação, que registra
138
TÓPICO 1 | FRAMEWORKS DE ARMAZENAMENTO SEMIESTRUTURADOS
todas as alterações realizadas, e uma árvore utilizada para consultar itens ali con-
tidos. Um dos nós é sempre nomeado como líder, no qual as operações de grava-
ção ocorrem efetivamente. Caso haja alguma modificação, o que está armazenado
ali é replicado para os outros dois nós. Como um produto da AWS, uma caracte-
rística interessante desse sistema é a possibilidade de programar uma exclusão
automática de documentos em um determinado tempo, ajudando a reduzir o
espaço de uso e armazenamento, que é cobrado sob demanda.
• Neo4j
NOTA
139
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
• CouchDB
Por conta disso, ter documentos em formato JSON facilita a troca de da-
dos entre diferentes sistemas, sendo necessário realizar apenas a tradução dessa
codificação para a mais adequada à situação. Outra vantagem é que JSON nativo
da programação web, de forma que a sua compactação é simples e rápida, sendo
uma escolha excelente para aplicativos móveis.
140
TÓPICO 1 | FRAMEWORKS DE ARMAZENAMENTO SEMIESTRUTURADOS
DICAS
https://qrgo.page.link/8wFXn
Para saber mais sobre os conceitos básicos do Dynamo realizando tutoriais, visite o site da
Amazon DynamoDB (AWS, 2020d).
https://qrgo.page.link/uBKbo
O Neo4j fornece livros gratuitos, em inglês, para explicar o que são grafos, como o Neo4j
funciona e outros assuntos relacionados a bancos de dados. Acesse os livros no link a
seguir (NEO4J, 2020b).
https://qrgo.page.link/LCCjP
https://qrgo.page.link/WM3xP
141
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
E
IMPORTANT
“Cliente”: {
“id”: 457
“nome”: Maria
“telefone”: 123456789
142
TÓPICO 1 | FRAMEWORKS DE ARMAZENAMENTO SEMIESTRUTURADOS
“Cliente”: {
“id”: 457
“nome”: Maria
“telefone”: 789456123
143
RESUMO DO TÓPICO 1
144
AUTOATIVIDADE
145
4 MongoDb é o banco de dados NoSQL mais utilizado do mundo. Sobre ele,
é possível afirmar que:
5 Para que um banco de dados seja mantido, é necessário que seja possível
realizar quatro funções básicas. Quais são elas?
146
UNIDADE 3
TÓPICO 2
SHARDING
1 INTRODUÇÃO
Com o avanço das tecnologias de informação e comunicação, surge um
grande aumento do fluxo de dados que trafegam nas redes de computadores.
Lidar com dados tem obrigado instituições e empresas (públicas ou privadas e em
diferentes setores da sociedade) a redobrarem seus cuidados quanto a tratamento,
armazenamento e manutenção da informação contida em servidores. Por terem
se tornado um dos maiores bens que uma empresa pode ter, os dados precisam
estar em segurança e devem ter sua estrutura planejada para uma expansão.
Um dos maiores desafios quando se trata de big data é a escalabilidade, isto é,
a capacidade de crescimento de maneira escalar. Isso é um dos problemas mais
comuns e importantes que toda empresa enfrenta, ou seja, lidar com negócios em
crescimento, o que traz a necessidade de armazenamento exponencial de dados e
grande demanda de disponibilidade deles.
2 O QUE É SHARDING?
Sharding é uma arquitetura de big data relativamente nova. Considerada
revolucionária por profissionais da área, tem sido adotada por desenvolvedores
e equipes responsáveis por projetos que lidam com dados em variados tipos
de organizações. Redes sociais como Facebook, Twitter, Friendster e o Flickr já
usam há algum tempo. O conceito define uma abordagem acessível para a escala
horizontal dos dados sem comprometer nada. O sharding é, portanto, um padrão
de arquitetura para sistemas distribuídos, relacionado ao particionamento
147
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
148
TÓPICO 2 | SHARDING
NOTA
149
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
150
TÓPICO 2 | SHARDING
151
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
deve poder se conectar a todos os outros membros no cluster. Isso inclui todos
os shards e servidores de configuração. É preciso verificar se os sistemas de rede
e segurança, incluindo todas as interfaces e firewalls, permitem essas conexões.
DICAS
Uma ferramenta que utiliza o sharding para distribuição dos dados em cluster é
o ElasticSearch. Ele é comumente considerado um banco de dados não relacional (NoSQL),
mas foi criado para gerenciar e funcionar como um motor de busca, como os que são
utilizados pela Google, Yahoo, entre outros. A Elastic, empresa por trás do ElasticSearch, é
especializada em ferramentas de controle de tráfego em servidores, como o Logstash e o
Beats, que facilitam a coleta, agregação e enriquecimento de dados, armazenando-os no
ElasticSearch. Com o Kibana, toda a stack da Elastic permite explorar, visualizar e compartilhar
informações de maneira interativa sobre seus dados, além de gerenciar e monitorar a pilha.
No ElasticSearch, acontecem todas as operações de indexação, fragmentação, pesquisa e
análise. Acesse a ferramenta no link a seguir (ELASTIC, 2020): https://qrgo.page.link/whqHE.
153
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
ATENCAO
154
TÓPICO 2 | SHARDING
possível criar índices para consultar dados, como um somatório dos salários de
funcionários de uma empresa. Para bancos de dados relacionais, índices podem
ser primários ou secundários. Em índices primários, os registros devem incluir a
chave primária, enquanto os demais registros sem a chave primária irão compor
os índices secundários (RAMAKRISHNAN; GEHRKE, 2011).
• booleano;
• de hashing;
• bitmap;
• de várias tabelas;
• em árvore B (B-tree);
• funcional.
156
TÓPICO 2 | SHARDING
157
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
• Bancos de dados para big data têm como característica a adaptação dos
processos de armazenamento e leitura de dados, uma vez que lidam com
altíssima quantidade deles.
• O Big Table permite conexão direta com serviços e banco de dados, como
Cassandra, HBase e MongoDB.
158
AUTOATIVIDADE
a) ( ) Chave primária.
b) ( ) Chave estrangeira.
c) ( ) Índices.
d) ( ) NoSQL.
e) ( ) Shard keys.
5 Cluster é um termo na língua inglesa que pode ser traduzido como “aglo-
merar” ou “aglomeração”. Em computação, é o termo que pode definir um
sistema que junta vários computadores em comum, a fim de transformar seu
conjunto em uma única máquina com a soma de todas as capacidades reuni-
das. Sobre clusters, avalie as afirmações a seguir:
160
UNIDADE 3
TÓPICO 3
1 INTRODUÇÃO
O sharding é uma forma de particionamento que possibilita o crescimento
do banco de dados de forma horizontal e praticamente infinita. Assim, caso a
demanda de armazenamento e processamento aumente de forma rápida, é
possível manter as funcionalidades e a disponibilidade de dados presentes nesse
banco sem que seja necessário aumentar o número de máquinas. Atualmente, o
sharding já é incorporado em alguns bancos de dados distribuídos.
2 ARQUITETURA DO SHARDING
Naturalmente, a tendência de um banco de dados é sempre crescer.
Em alguns casos, esse crescimento pode chegar ao ponto em que a estrutura
inicial das máquinas já não é capaz de atender à demanda, sendo necessário
realizar melhorias. Uma das opções é realizar um redimensionamento vertical,
melhorando as máquinas em si de forma que possuam mais memória RAM e
espaço em disco, por exemplo. O problema é que essa alternativa, além de
trabalhosa, pode se tornar muito cara se for realizada localmente e, mesmo em
casos de armazenamento em nuvem, essa solução não é infinita. Por conta dessas
questões, é interessante recorrer a opções de bancos de dados que possibilitem
um dimensionamento horizontal, no qual, ao invés de melhorar as máquinas
existentes, mais máquinas são adicionadas e o conjunto de dados é particionado
e redistribuído. Esse particionamento também é conhecido como sharding.
FONTE: O Autor
163
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
NOTA
164
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
166
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
Nesse sistema, cada servidor é um shard com seus dados replicados por
meio de outros servidores e, geralmente, a estrutura do sharding utilizada chave/
hash, que, nesse caso, é chamado de token. A partir dos tokens, os objetos são
atribuídos a cada shard em partes iguais e distribuídos uniformemente no cluster
principal. O Cassandra também replica os shards para outros nós no cluster, de
acordo com as configurações de replicação predefinidas.
167
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
7 HASH CONSISTENTE
No Cassandra, o processo de hash é um pouco diferente que o usual. Nes-
se sistema, há hashing consistente, que se distingue do hash comum porque, ao
invés de alocar as chaves em “baldes” (buckets), o Cassandra armazena as chaves
em uma estrutura anel contínuo. Isso permite que, ao invés de ter que mapear
todos os hashes a cada acréscimo de objeto, o hash simplesmente seja movido
para a próxima posição. O hash consistente é um processo de hash mais sofistica-
do, em que um grande número de intervalos de tokens é distribuído igualmente
entre os servidores. Cada linha armazena um pedaço de registros, com base em
um hash de valores-chave que se encaixam no intervalo de um determinado ser-
vidor. Quando servidores são adicionados, fragmentos de registros podem ser
migrados lentamente, reduzindo a quantidade de movimentação de dados no
sistema. O hash consistente também minimiza os movimentos das teclas durante
os procedimentos de adição ou decréscimo de nós no cluster.
FONTE: O Autor
168
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
1. identificação dos nós que possuem os dados cujas chaves correspondem à busca;
2. encaminhamento das solicitações para os nós, seguido da espera pela resposta;
3. caso não haja retorno em um determinado valor de tempo limite pré-configu-
rado, retorno de “falhar na solicitação” para o aplicativo cliente;
4. caso haja retorno, determinação da resposta mais recente de acordo com os
registros de data e hora;
5. agendamento do reparo dos dados nas réplicas, caso haja modificações.
8 FRAGMENTAÇÃO NO MONGODB
O MongoDB, segundo os próprios desenvolvedores, é “um banco de dados
distribuído, baseado em documentos e de propósito geral, desenvolvido para
desenvolvedores de aplicativos modernos e para a era da nuvem” (MONGODB,
2020a, s.p., tradução nossa).
170
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
FONTE: O Autor
172
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
173
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
LEITURA COMPLEMENTAR
Apache Cassandra
1 INTRODUÇÃO
Muitos dos aplicativos on-line de hoje têm requisitos de banco de dados que
excedem as capacidades dos bancos de dados relacionais tradicionais. A necessidade
de baixa latência, os níveis desconhecidos de escalabilidade, tempo de atividade con-
tínua, distribuição global de dados, capacidade tanto de escrita e leitura de dados em
qualquer lugar, reduzindo o software e os custos operacionais, deu à luz a categoria
de banco de dados não relacional (PEREIRA, 2012). Esse tipo de banco de dados faz
uso de novos e desconhecidos modelos de arquiteturas e de dados. Para satisfazer as
exigências da moderna linha de aplicações, estes novos bancos de dados devem fazer
trocas com regras ditadas pelo teorema CAP (SOUSA, 2010).
2 APACHE CASSANDRA
174
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
● Internet das coisas – perfeito para ser utilizado quando se precisa de escritas
rápidas vindas de dispositivos, sensores e mecanismos similares existentes em
diferentes localidades.
● Monitoramento de atividades de usuários – muitas companhias de entreteni-
mento fazem uso do Cassandra para acompanhar e coletar as interações dos
usuários com seus filmes, músicas, sites e aplicações.
● Serviços de mensagens e redes sociais – Cassandra atua como servidor de ba-
ckbone para vários provedores de serviços de telefonia.
175
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
176
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
177
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
que réplicas são cópias de uma linha e quando esta é escrita pela primeira vez, isto
também é considerado como uma réplica. Durante a configuração de um cluster
é preciso definir um grupo de replicação, também chamado de snitch. Todos os
snicthes usam uma camada snitch dinâmica, a qual monitora a performance do
grupo e escolhe a melhor réplica para leitura.
178
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
escritas perdidas por este são armazenadas pelo coordenador daquela operação
em tabela local chamada system.hints por um período de tempo que é configurado
na variável max_hint_window_in_ms. No entanto, para que isso ocorra o recurso
hinted handoff precisa estar habilitado. Ao habilitar esse recurso o administrador
está configurando Cassandra para executar plano de ação a fim de contornar
casos de nós indisponíveis.
● ALL – quanto ao nível de escrita, o dado deve ser replicado para todos nós do
cluster para aquela chave de partição. Quanto ao nível de leitura, todos os nós
devem responder à operação de leitura. Provê o maior nível de consistência
dos dados e o menor nível de disponibilidade.
● ANY – quanto ao nível de escrita, o dado precisa ser escrito pelo menos em um
nó. Provê o maior nível de disponibilidade e o menor nível de consistência.
● LOCAL_QUORUM – Usado para múltiplos centros de dados. O dado precisa
ser escrito em um quórum de nós no mesmo centro de dados que possui o
coordenador da operação, o qual funcionará como coordenador para o quórum
local bem como para o quórum remoto. Provê um nível de consistência forte,
bem como evitar latência na comunicação entre os centros de dados. Segue
uma imagem como exemplo.
179
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
180
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
181
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
182
TÓPICO 3 | FRAMEWORKS QUE UTILIZAM SHARDING COMO FORMA DE DISTRIBUIÇÃO
183
UNIDADE 3 | DADOS SEMI-ESTRUTURADOS E SHARDING
3 CONCLUSÃO
FONTE: LUZ, K. S.; ALMEIDA, T. V. M. Apache Cassandra. Brasília: CIC UNB, 2016. Disponível em:
https://cic.unb.br/~alchieri/disciplinas/posgraduacao/sd/artigoG2.pdf. Acesso em: 13 abr. 2020.
184
RESUMO DO TÓPICO 3
CHAMADA
185
AUTOATIVIDADE
FONTE: O Autor
a) ( ) Apenas o conceito está associado, mas na prática não há ligação entre eles.
b) ( ) Apesar de terem nomes distintos, significam a mesma coisa.
186
c) ( ) Se a replicação não ocorrer, não há nenhum prejuízo para o sistema.
d) ( ) A integração do sharding com a replicação promove a alta
disponibilidade.
e) ( ) A utilização do sharding torna o processo de replicação desnecessário.
187
188
REFERÊNCIAS
ABADI, D. J. Data management in the cloud: limitations and
opportunities. IEEE Data Eng. Bull., New Haven, v. 32, p. 3-12. 2009. Disponível
em: http://www.cs.umd.edu/~abadi/papers/abadi-cloud-ieee09.pdf. Acesso em:
4 abr. 2020.
189
ASF INFRABOT. Powered by. Confluence, [s.l.], 9 jul. 2019. Disponível em:
https://cwiki.apache.org/confluence/display/HADOOP2/PoweredBy. Acesso em:
15 fev. 2020.
AWS - AMAZON WEB SERVICE. Data lakes e análises na AWS. AWS, [s.l.],
c2020a. Disponível em: https://aws.amazon.com/pt/big-data/datalakes-and-
analytics/. Acesso em: 16 fev. 2020.
AWS - AMAZON WEB SERVICE. AWS. Amazon Web Service, [s.l.], c2020e.
Disponível em: https://aws.amazon.com/pt/?nc2=h_lg. Acesso em: 10 abr. 2020.
190
BOAGLIO, F. MongoDB: construa novas aplicações com novas tecnologias. São
Paulo: Casa do Código, 2015.
CATTELL, R. Scalable SQL and NoSQL data stores. Acm sigmod record, [s.l.], v.
39, n. 4, p. 12-25, maio 2011. DOI: http://dx.doi.org/10.1145/1978915.1978919.
COYNE, L. et al. IBM private, public, and hybrid cloud storage solutions. 5.
ed. [s.l.]: Red-books, 2018. Disponível em: http://www.redbooks.ibm.com/
redpapers/pdfs/redp4873.pdf. Acesso em: 16 fev. 2020.
191
ELASTIC. O coração do Elastic Stack gratuito e aberto. Elasticsearch, [s.l.],
c2020. Disponível em: https://www.elastic.co/pt/elasticsearch. Acesso em: 21 fev.
2020.
GOOGLE CLOUD. Cloud Storage. Google Cloud, [s.l.], c2020a. Disponível em:
https://cloud.google.com/storage. Acesso em: 16 fev. 2020.
GOOGLE CLOUD. Cloud Bigtable. Google Cloud, [s.l.], c2020c. Disponível em:
https://cloud.google.com/bigtable. Acesso em: 10 abr. 2020.
IBM CLOUD. IBM websphere application server. IBM Cloud, [s.l.], c2020a.
Disponível em: https://www.ibm.com/cloud/websphere-application-server.
Acesso em: 21 fev. 2020.
IBM CLOUD. Apache CouchDB. IBM Cloud, [s.l.], 6 ago. 2019b. Disponível em:
https://www.ibm.com/cloud/learn/couchdb. Acesso em: 7 fev. 2020.
192
IBM CLOUD. Cloud object storage. IBM Cloud, [s.l.], 2019. Disponível em:
https://cloud.ibm.com/catalog/services/cloud-object-storage. Acesso em: 16 fev.
2020.
IDG. Worldwide external disk storage systems factory revenue increased [...].
IDG, Framingham, 3 Mar. 2013. Disponível em: https://www.idg.com/news/
worldwide--external-disk-storage-systems-factory-revenue-increased-2-3-
during-the-fourth--quarter-of-2012-and-4-7-for-the-full-year-according-to-idc/.
Acesso em: 13 fev. 2020.
193
MONGODB. Sharding reference. MongoDB, [s.l.], c2020b. Disponível em:
https://docs.mongodb.com/manual/reference/sharding/. Acesso em: 10 abr. 2020.
NEO4J. Introduction. In: NEO4J. The Neo4j Cypher Manual v4.0. [s.l.]: Neo4j,
Inc., c2020a. (capítulo 1). Disponível em: https://neo4j.com/docs/cypher-
manual/4.0/introduction/. Acesso em: 7 fev. 2020.
OPENJPA for distributed object persistence. Slice, c2020. Disponível em: http://
people.apache.org/~ppoddar/slice/site/index.html. Acesso em: 21 fev. 2020.
PENCHIKALA, S. Big Data com Apache Spark Part 3: Spark streaming. Info
Q, [s.l.], 5 dez. 2016. Disponível em: https://www.infoq.com/br/articles/apache-
spark-streaming/. Acesso em: 30 mar. 2020.
194
PETERSON, N. Get started guide for Azure IT operators. [s.l.]: Microsoft, 2016.
Disponível em: https://docsmsftpdfs.blob.core.windows.net/guides/azure/azure-
ops-guide.pdf. Acesso em: 16 fev. 2020.
RIGHT SCALE. RightScale 2018 state of the cloud report: data to navigate your
multi-cloudstrategy. Santa Bárbara: Right Scale, 2018. Disponível em: https://
www.suse.com/media/report/rightscale_2018_state_of_the_cloud_report.pdf.
Acesso em: 16 fev. 2020.
195
STONEBRAKER, M. New opportunities for New SQL. Communications of the
Acm, [s.l.], v. 55, n. 11, p. 10-18, nov. 2012. Disponível em: https://www.cs.cmu.
edu/~pavlo/courses/fall2013/static/papers/p10-stonebraker.pdf. Acesso em: 4
abr. 2020.
WHITE, T. Hadoop: the definitive guide. 3. ed. Sebastopol: O'Reilly Media, Inc.,
2012.
XIN, R.; ROSEN, J.; PISTOR, K. Top 5 reasons for choosing S3 over HDFS.
Databricks, [s.l.], maio 2017. Disponível em: https://databricks.com/
blog/2017/05/31/top-5-reasons--for-choosing-s3-over-hdfs.html. Acesso em: 16
fev. 2020.
196