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
Entendendo a Arquitetura de
Armazenamento
Tópicos Abordados
T
2
Características arquiteturais dos seguintes data stores:
Apache HBase
MongoDB
Apache HBasee Hadoop
Ecossistema Hadoop
4
Iniciativa open-source baseada na stack Google:
HDFS (Hadoop Distributed File System)
Hadoop YARN/MapReduce
HBase
ZooKeeper
Ambari, Cassandra, Hive, etc.
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
Armazenamento Distribuído
A
6
Arquitetura HBase:
Padrão master-worker
Master nodes
Range servers
Regions
WAL (Write-Ahead-Logs)
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)
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
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
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
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)
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
MongoDB
MongoDB
S
14
Armazenagem de documentos (BSON)
Arquivos Mapeados em Memória
Coleções e índices
Confiabilidade e durabilidade
Escalabilidade horizontal
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
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
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
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:
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
Organização dos Arquivos
20
O banco é organizado em 2 tipos de arquivos:
Extends: arquivos de dados
Namespaces: metadados sobre coleções e índices
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
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)
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/
Obrigado!