entendendo a arquitetura de armazenamento, parte 1
DESCRIPTION
Conceitos-chave na arquitetura de armazenamento dos data-stores Apache HBase e MongoDB. Sobre o HBase, são apresentados sua arquitetura master-slave e o conceito de regions. Sobre MongoDB apresentamos o formato BSON e a alocação de arquivos.TRANSCRIPT
![Page 1: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/1.jpg)
Entendendo a Arquitetura de
Armazenamento
![Page 2: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/2.jpg)
Tópicos Abordados
T
2
Características arquiteturais dos seguintes data stores:
Apache HBase
MongoDB
![Page 3: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/3.jpg)
Apache HBasee Hadoop
![Page 4: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/4.jpg)
Ecossistema Hadoop
4
Iniciativa open-source baseada na stack Google:
HDFS (Hadoop Distributed File System)
Hadoop YARN/MapReduce
HBase
ZooKeeper
Ambari, Cassandra, Hive, etc.
![Page 5: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/5.jpg)
HBase
RBanco de dados orientados a colunas: Tabelas agrupam famílias de colunas Uma família de colunas possui n colunas Uma linha é um conjunto de valores de colunas
identificado por uma chave única Linhas são ordenadas de acordo com a chave única
5
![Page 6: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/6.jpg)
Armazenamento Distribuído
A
6
Arquitetura HBase:
Padrão master-worker
Master nodes
Range servers
Regions
WAL (Write-Ahead-Logs)
![Page 7: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/7.jpg)
Padrão master-worker
U
7
Arquitetura compostar por: Master: nó central que coordena e configura os
demais nós;
Workers: são submetidos à coordenação e distribuição do master;
Na arquitetura Hbase: Master é o responsável por manter os
metadados e distribuir os nós entre os Region Servers
Por sua vez, os Region Servers armazenam as Regions (regiões de dados)
![Page 8: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/8.jpg)
Master Node
8
Na arquitetura Hbase, o node Master: Mantém e distribui os metadados
Oferece a interface para criação de tabelas, colunas, etc.
Mantém as tabelas -ROOT- e .META.
Executa os seguintes processos: LoadBalancer: realiza o balanceamento de
carga movendo e atribuindo Regions entre os nós
CatalogJanitor: de tempos em tempos faz a limpeza dos metadados
![Page 9: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/9.jpg)
Region Servers
9
São os nós que armazenam cada region de cada tabela
Processos: CompactSplitThread: verifica necessidade splits
e compactações ocasionais MajorCompactionChecker: verifica
compactações maiores MemStoreFlusher: descarrega alterações em
memória para arquivos LogRoller: faz a limpeza de logs antigos
![Page 10: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/10.jpg)
Regions
A
10
São as unidades de dados nas quais são dividas as tabelas (ou seja, as tabelas são divididas em regions)
A cada region corresponde um intervalo de chaves (row-keys) atribuídas pelo master
Cada region é atribuída pelo master a um region-server. As atribuições são mantidas no arquivo .META.
Podem sofrer split (quando ultrapassa um treshold) ou também merge
![Page 11: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/11.jpg)
Region
“
11
Cada region engloba uma ou mais stores
Cada store armazena exatamente uma família de colunas (column family)
Cada store é composta por:
Uma MemStore: armazenamento em memória das operações sobre os dados
Um ou mais Hfiles: arquivos de dados propriamente ditos. Formato inspirado no SSTable (proposto pela Google)
![Page 12: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/12.jpg)
Write-Ahead-Log
E
12
Utilizado para manter a consistências dos dados
Alterações são escritas primeiros no arquivo WAL (podem ser conferidos no diretório hbase/logs)
WALWAL
MemStore
FileStore
![Page 13: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/13.jpg)
MongoDB
![Page 14: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/14.jpg)
MongoDB
S
14
Armazenagem de documentos (BSON)
Arquivos Mapeados em Memória
Coleções e índices
Confiabilidade e durabilidade
Escalabilidade horizontal
![Page 15: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/15.jpg)
Armazenagem de Documentos
O
15
O formato JSON é conveniente para leitura, mas ineficiente para armazenagem e transmissão
O formato BSON (Binary jSON) mantém a semântica dos documentos mas é mais eficiente
Forma serializada do JSON
Especificação completa em: http://bsonspec.org/#/specification
![Page 16: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/16.jpg)
JSON x BSON
M
16
JSON: {hello:”world”}
BSON:
x16 x00 x00 x00 x00
4 bytes: tamanho do documento
1 Byte x00: fim do documento
<conteúdo do documento >
Tamanho variável
x02 hello “world”
Tipo do valor
Chave Valor
![Page 17: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/17.jpg)
BSON
I
17
x68 x65 x6c x6c x6f x00
x02 hello “world”
Tipo do valor
Chave Valor
h e l l o \0
x00
A chave é uma string no estilo C
x06 x00 x00 x00 x77 x6f
w o r l d \0
x72 x6c x64 x00
Tamanho da string
![Page 18: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/18.jpg)
BSON
I
18
01 Ponto-flutuante (double)
02 String em UTF-8
03 Documento aninhado
05 Conteúdo binário
09 Data UTC
0D Código Javascript
10 Inteiro de 32-bit
Principais tipos de conteúdo:
![Page 19: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/19.jpg)
BSON
19
Exemplo final:
JSON:
{hello : “world”}
BSON:
16 00 00 00 02 68 65 6C 6C 6F 00 06 00 00 00 776F 72 6C 64 00 00
![Page 20: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/20.jpg)
Organização dos Arquivos
20
O banco é organizado em 2 tipos de arquivos:
Extends: arquivos de dados
Namespaces: metadados sobre coleções e índices
![Page 21: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/21.jpg)
Extends
C
21
São os arquivos que armazenam os documentos
Documentos são gravados no formato BSON, organizado como lista duplamente encadeada
Índice seguem estrutura de árvore-B
Seguem a nomenclatura <db-name>.0, <db-name>.1, …, <db-name>.n
Tem tamanho pré-fixado 0 → 64MB, 1 → 128MB, …, até o tamanho máximo de 2GB
![Page 22: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/22.jpg)
Namespaces
C
O
22
Segue a forma <db-name>.<collection-name>
Índices contam como namespaces
São gravados em arquivos de metadados
Possuem a nomenclatura <db-name>.ns
Tamanho padrão: 16MB (24.000 nomes)
![Page 23: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/23.jpg)
Referências
S
23
Shashank Tiwari (2011). Professional NoSQL, 361p. Wiley, capítulo 1, “NoSQL: what is it and why you need it”
http://docs.mongodb.org/manual/
http://hbase.apache.org/book/architecture.html
http://bsonspec.org/#/specification
http://www.polyspot.com/en/blog/2012/understanding-mongodb-storage/
![Page 24: Entendendo a Arquitetura de Armazenamento, parte 1](https://reader030.vdocuments.site/reader030/viewer/2022020721/558fc90e1a28ab64198b45b7/html5/thumbnails/24.jpg)
Obrigado!