A computação em nuvem tem tornado-se uma das tendências dos próximos anos, pois existem várias vantagens na sua adoção. A partir da computação em nuvem, passou a ser possível gerenciar os dados de forma distribuída. Esta técnica requer vários pontos de atenção. Nesse contexto, surge um tipo de serviço importante que é o banco de dados como serviço (DBaaS). O banco de dados Cassandra será estudado no que diz respeito aos bancos de dados considerados NoSQL (Not Only SQL). Os bancos de dados NoSQL são uma nova proposta de tecnologia para suportar grande quantidade de dados e uma grande quantidade de usuários. Cassandra foi desenvolvido pelo Facebook e utiliza um modelo baseado em colunas, o que proporciona alto desempenho e alta disponibilidade. O modelo de dados e sua arquitetura são apresentados, sendo explicitadas as principais diferenças com relação ao modelo relacional. Através de um estudo de caso será possível analisar as implicações da migração de um modelo relacional para um novo paradigma, que é a modelagem em colunas, bem como ressaltar as vantagens e desvantagens da utilização de banco de dados nas nuvens.
Palavras-chave: Computação na nuvem, Gerenciamento de dados distribuídos, banco de dados Cassandra, migração de modelo, NoSQL.
Migração de um Esquema Relacional para o banco de dados Cassandra
1. COMPUTAÇÃO
NA NUVEM
MIGRAÇÃO DE UM ESQUEMA
RELACIONAL PARA O BANCO
DE DADOS CASSANDRA
Especialização em Tecnologia da Informação com Ênfase em Desenvolvimento Web
Jonatan Silva dos Santos
MAR/2012
2. CONTEÚDO
• Motivação
• Objetivos
• Banco de Dados Cassandra
• Migração de um esquema relacional
para o Cassandra
• Conclusão
Migração de um Esquema Relacional para o Cassandra
3. MOTIVAÇÃO
• Área de estudo recente
• Novas tecnologias
• Tendência dos próximos anos
• Possibilidade de processamento de
grande quantidade de dados
• Soluções mais robustas para a
resolução de problemas
Migração de um Esquema Relacional para o Cassandra
4. OBJETIVOS
• Entender o funcionamento do banco
de dados Cassandra
• Analisar questões relacionadas à
migração de um modelo relacional
para o modelo em colunas do
Cassandra
• Avaliar vantagens e desvantagens
Migração de um Esquema Relacional para o Cassandra
5. BANCO DE DADOS
CASSANDRA
• Projeto Apache Foundation
• SGBD livre, open-source
• Escrito em JAVA
• Armazenamento distribuído de dados
• Desenvolvido pelo Facebook em
2007.
• Empresas que utilizam: Facebook,
Twitter, Cisco, etc.
Migração de um Esquema Relacional para o Cassandra
6. BANCO DE DADOS
CASSANDRA
• Características:
– Elasticidade e escalabilidade
– Confiabilidade
– Durabilidade
– Desempenho
• Modelo de dados:
– Orientado a colunas
Migração de um Esquema Relacional para o Cassandra
7. BANCO DE DADOS
CASSANDRA
• Conceitos:
– Keyspace (similar ao database do modelo
relacional)
– Família de colunas (similar a uma tabela do
modelo relacional)
– Super família de colunas
– Chave de linha (chave primária)
• Limitações
– Não há chave estrangeira
– Impossível realizar junções
Migração de um Esquema Relacional para o Cassandra
8. BANCO DE DADOS
CASSANDRA
• Família de colunas dinâmicas:
Migração de um Esquema Relacional para o Cassandra
9. BANCO DE DADOS
CASSANDRA
• Família de colunas estáticas:
Migração de um Esquema Relacional para o Cassandra
10. BANCO DE DADOS
CASSANDRA
• Coluna:
– Nome
– Valor (opcional)
– Timestamp
• Super Coluna
– Forma de agrupamento de dados com
base em um valor de pesquisa comum
Migração de um Esquema Relacional para o Cassandra
11. BANCO DE DADOS
CASSANDRA
• Tipos de dados:
– Validadores (valor de chave de linha e
valor de coluna)
– Comparadores (nome de coluna)
• Blob, Ascii, Text, Varchar, int, bigint,
timestamp, boolean, float, double,
decimal, counter
Migração de um Esquema Relacional para o Cassandra
12. BANCO DE DADOS
CASSANDRA
• Arquitetura:
– Nós independentes participantes de um
cluster
– Não há gestão centralizada
– Nós semeadores: contém informações
do cluster para associação de novos nós
– Protocolo Gossip: descobrir localização e
estado dos outros nós
Migração de um Esquema Relacional para o Cassandra
13. BANCO DE DADOS
CASSANDRA
• Particionamento dos dados:
– Métodos de particionamento
– Representação lógica em forma de anel
– Divisão do anel em intervalos de dados
iguais ao número de nós
– Token determina posição do nó no anel
– Famílias de colunas particionadas no
cluster pelo valor da chave de linha
Migração de um Esquema Relacional para o Cassandra
14. BANCO DE DADOS
CASSANDRA
• Replicação de dados:
– Métodos de replicação
– Cópia dos dados pelos nós do cluster
– Na criação do Keyspace, definir
quantidade de cópias de cada registro
(fator de replicação)
– Requisição de leitura ou escrita é
enviada a qualquer nó
– Registro mais atual com base no
timestamp
Migração de um Esquema Relacional para o Cassandra
15. BANCO DE DADOS
CASSANDRA
• Transações e controle de
concorrência:
– Não oferece completamente ACID
(atomicidade, consistência, isolamento e
durabilidade)
– Não há bloqueio
– Não há dependências transacionais
– Preza pela alta disponibilidade e alto
desempenho na escrita em detrimento
de isolamento e atomicidade
Migração de um Esquema Relacional para o Cassandra
16. BANCO DE DADOS
CASSANDRA
• Consistência dos dados:
– Consistência eventual
– Vários níveis de consistência para leitura (any,
one, quorum, local_quorum, each_quorum, all)
– Vários níveis de consistência para escrita (one,
quorum, local_quorum, each_quorum, all)
• Mecanismos de verificação:
– Read repair
– Anti-entropy
– Hinted handoff
Migração de um Esquema Relacional para o Cassandra
17. BANCO DE DADOS
CASSANDRA
• APIs:
– Thrift (API RPC)
– CLI (interface de linha de comando)
– CQL (Cassandra Query Language)
• Semelhante ao SQL
Migração de um Esquema Relacional para o Cassandra
18. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
CREATE KEYSPACE
• Objetivo: criar um keyspace e realizar a configuração do
mesmo.
• Sintaxe:
CREATE KEYSPACE <NOME> WITH strategy_class =
<ESTRATÉGIA>AND strategy_options.<OPÇÃO> =
<VALOR> [AND strategy_options.<OPÇÃO> = <VALOR>];
• Exemplo:
CREATE KEYSPACE twissandra WITHstrategy_class =
'NetworkTopologyStrategy'AND
strategy_options:replication_factor=3;
Migração de um Esquema Relacional para o Cassandra
19. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
CREATE COLUMNFAMILY
• Objetivo: Utilizado para criar uma família de colunas.
• Sintaxe:
CREATE COLUMNFAMILY <FAMÍLIA DE COLUNAS> (<KEY> <tipo>
PRIMARY KEY [, name1 tipo, name2 tipo, ...]);CREATE COLUMNFAMILY
<FAMÍLIA DE COLUNAS> (<KEY> <tipo> PRIMARY KEY [, name1 tipo,
name2 tipo, ...])[WITH <PARÂMETRO1> = <VALOR1> [AND
<PARÂMETRO2> = <VALOR2> [AND ...]]];
• Exemplo:
CREATE COLUMNFAMILY usuario ( nome_usuario varchar PRIMARY
KEY, senha varchar, sexo varchar, estado_civil varchar,
ano_nascimento int)WITH comment=’família de colunas de usuário’ AND
comparator=UTF8Type;
Migração de um Esquema Relacional para o Cassandra
20. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
SELECT
• Objetivo: Utilizado para consulta de um ou mais registros.
• Sintaxe:
SELECT [FIRST N] [REVERSED] <SELECT EXPR> FROM
<FAMÍLIA DE COLUNAS> [USING <CONSISTÊNCIA>]
[WHERE <Claúsula>] [LIMIT N];
• Exemplo:
SELECT * FROM usuario WHERE nome_usuario='joao';
Migração de um Esquema Relacional para o Cassandra
21. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
ALTER TABLE
• Objetivo: Comando utilizado para manipular colunas. Permite
adicionar novas colunas, alterar colunas e apagar colunas.
• Sintaxe:
ALTER TABLE <FAMÍLIA DE COLUNAS> ADD <COLUNA>
<VALIDADOR>;
ALTER TABLE <FAMÍLIA DE COLUNAS> ALTER <COLUNA> TYPE
<VALIDADOR>;
ALTER TABLE <FAMÍLIA DE COLUNAS> DROP <COLUNA>;
• Exemplo:
ALTER TABLE usuario ADD cep varchar;
ALTER TABLE usuario ALTER cep TYPE int;
ALTER TABLE usuario DROP cep;
Migração de um Esquema Relacional para o Cassandra
22. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
INSERT
• Objetivo: Comando utilizado para inserir um registro ou alterar
colunas. Se o registro não existir, é criado. Se já existir, as
colunas são atualizadas.
• Sintaxe:
INSERT INTO <FAMÍLIA DE COLUNAS> (<KEY>, <col>,
<col>, ...) VALUES (<key>, <val>, <val>, ...) [USING
CONSISTENCY <NÍVEL> [AND TIMESTAMP <timestamp>] [AND
TTL <timeToLive>]];
• Exemplo:
INSERT INTO usuario (nome_usuario, senha) VALUES ('joao',
'i120939');
Migração de um Esquema Relacional para o Cassandra
23. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
UPDATE
• Objetivo: Utilizado para atualizar uma ou mais colunas de
uma família de colunas.
• Sintaxe:
UPDATE <FAMÍLIA DE COLUNAS> [USING
<CONSISTÊNCIA> [AND TIMESTAMP <timestamp>] [AND
TTL <timeToLive>]]SET nome1 = valor1, nome2 = valor2
WHERE <KEY> = <VALOR>;
• Exemplo:
UPDATE usuario USING TTL 432000 SET senha =
'ch@ngem3a' WHERE nome_usuario = 'joao';
Migração de um Esquema Relacional para o Cassandra
24. BANCO DE DADOS
CASSANDRA
• CQL (Cassandra Query Language)
DELETE
• Objetivo: Comando utilizado para apagar uma ou mais colunas de
uma ou mais linhas ou mesmo para apagar todas as colunas de
acordo com a cláusula WHERE.
• Sintaxe:
DELETE [COLUNAS] FROM <FAMÍLIA DE COLUNAS> [USING
<CONSISTÊNCIA>] WHERE KEY = <VALOR>DELETE [COLUNAS]
FROM <FAMÍLIA DE COLUNAS> [USING <CONSISTÊNCIA>]
WHERE KEY IN (<VALOR1, VALOR2);
• Exemplo:
DELETE ano_nascimento FROM usuario where nome_usuario =
'joao';DELETE FROM usuario where nome_usuario = ' joao';
Migração de um Esquema Relacional para o Cassandra
25. MIGRAÇÃO DE ESQUEMA
RELACIONAL PARA CASSANDRA
• Planejamento
– Diferente da modelagem relacional
– Depende de quais funcionalidades a
aplicação cliente necessita
– Identificar as consultas que serão
realizadas (famílias de colunas)
– Otimização: desnormalização dos dados
– Não há violação de integridade
(UPSERT)
Migração de um Esquema Relacional para o Cassandra
26. MIGRAÇÃO DE ESQUEMA
RELACIONAL PARA CASSANDRA
• Estudo de caso
– Exemplo de uma site de venda de CDs
– Apresentar o modelo relacional
Migração de um Esquema Relacional para o Cassandra
27. • Modelo Relacional x Modelo em Coluna
Consultas que serão realizadas:
1) Consultar dados de um CD;
2) Pesquisar CDs por título;
3) Pesquisar CDs por gênero musical;
4) Pesquisar músicas de um CD;
5) Pesquisar CDs por artista;
6) Pesquisar artistas de um CD;
7) Pesquisar fornecedores por cidade.
Migração de um Esquema Relacional para o Cassandra
28. • Modelo em Coluna
Migração de um Esquema Relacional para o Cassandra
29. • Modelo em Coluna
Migração de um Esquema Relacional para o Cassandra
30. • Modelo em Coluna
Migração de um Esquema Relacional para o Cassandra
31. CONCLUSÃO
• Necessidade de evolução da linguagem CQL
• Para cada nova funcionalidade, pode ser
necessária uma família de coluna nova
• Elasticidade dos recursos. Adição de novos
nós
• Alta escalabilidade
• Utilização de Cassandra para dados não
críticos (consistência eventual)
• Utilização por grandes organizações
(Twitter, Facebook, Digg)
• Analisar possibilidade de os dados estarem
parte em SGBD relacional e parte em outro
SGBD como Cassandra
Migração de um Esquema Relacional para o Cassandra
32. TRABALHOS FUTUROS
• Criação de ferramenta CASE para
modelagem de dados para Cassandra
• Realização de benchmark para
comparar SGBDs NoSql.
Migração de um Esquema Relacional para o Cassandra