Migração de um Esquema Relacional para o banco de dados Cassandra
description
Transcript of Migração de um Esquema Relacional para o banco de dados Cassandra
COMPUTAÇÃO COMPUTAÇÃO NA NUVEMNA NUVEM
MIGRAÇÃO DE UM ESQUEMA MIGRAÇÃO DE UM ESQUEMA RELACIONAL PARA O BANCO RELACIONAL PARA O BANCO
DE DADOS CASSANDRADE DADOS CASSANDRA
Especialização em Tecnologia da Informação com Ênfase em Desenvolvimento Web
Jonatan Silva dos Santos
MAR/2012
CONTEÚDOCONTEÚ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
MOTIVAÇÃOMOTIVAÇÃ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
OBJETIVOSOBJETIVOS• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• Características:– Elasticidade e escalabilidade– Confiabilidade– Durabilidade– Desempenho
• Modelo de dados:– Orientado a colunas
Migração de um Esquema Relacional para o Cassandra
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• Família de colunas dinâmicas:
Migração de um Esquema Relacional para o Cassandra
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• Família de colunas estáticas:
Migração de um Esquema Relacional para o Cassandra
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
BANCO DE DADOS BANCO DE DADOS CASSANDRACASSANDRA
• 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
MIGRAÇÃO DE ESQUEMA MIGRAÇÃO DE ESQUEMA RELACIONAL PARA CASSANDRARELACIONAL 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
MIGRAÇÃO DE ESQUEMA MIGRAÇÃO DE ESQUEMA RELACIONAL PARA CASSANDRARELACIONAL 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
Migração de um Esquema Relacional para o Cassandra
• 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
• Modelo em Coluna
Migração de um Esquema Relacional para o Cassandra
• Modelo em Coluna
Migração de um Esquema Relacional para o Cassandra
• Modelo em Coluna
CONCLUSÃOCONCLUSÃ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
TRABALHOS FUTUROSTRABALHOS 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
Obrigado!Jonatan Silva