SlideShare uma empresa Scribd logo
Cassandra Thrift e CQL
KEEP
CALM
AND
COME TO THE
DARK SIDE
Thrift API
 Primeira API para comunicação
com o Cassandra
 Mostrava vários detalhes internos do Cassandra,
deixando os comandos verborrágicos e perigosos
 Interface difícil de se trabalhar
 Muitas transformações devem ser feitas via código
Thrift API
Thrift API
COMO RAIOS EU FAÇO UMA
PESQUISA NISSO????
Thrift API
 Por impossibilidade de se usar o CQL quando começamos a
trabalhar com o Cassandra escolhemos um cliente chamado
Astyanax porém a complexidade era alta, daí tivemos que criar
uma camada de abstração, surgiu o Cassandree.
 O uso do Cassandree no Adsever está no
nosso log de impressão e controle de cliques
através do Tracker e Batches
Thrift API
Thrift API
CQL API
 Evolução para uma API mais robusta
 CQL3 (Cassandra Query Language) foi criada para abstrair a
complexidade do Cassandra e permitir que sua utilização seja
muito mais simples, poderosa e segura.
 Até a versão 1.1.X do Cassandra, o CQL3 ainda era beta, com a
versão 1.2.X ele se tornou estável e passou a ser chamado em
muitos lugares apenas por CQL.
 Sintaxe semelhante ao SQL para facilitar aprendizado
CQL API
CQL API
CQL API
 Quando atualizamos o Cassandra para a versão 1.2.1 estávamos
prontos para usar o CQL 3 e o cluster já estava estabilizado
 Utilizamos o cliente Datastax Java Driver para conexão. Esse
cliente se assemelha em muito a JDBC, isso facilita muito
 Utilizamos o Java Driver dentro do
Dashboard para armazenamento do histórico
de ofertas e como base de dados principal
CQL API
CQL API
CQL API
CQL API
CREATE KEYSPACE demodb WITH REPLICATION = {'class' :
'SimpleStrategy', 'replication_factor': 3};
CREATE TABLE users (
user_name varchar,
password varchar,
gender varchar,
session_token varchar,
state varchar,
birth_year bigint,
PRIMARY KEY (user_name));
INSERT INTO emp (empID, deptID, first_name, last_name)
VALUES (104, 15, 'jane', 'smith');
SELECT * FROM emp WHERE empID IN (130,104)
ORDER BY deptID DESC;
Os detalhes maléficos do
Cassandra
 Collections Columns
 TTL
 UUID
 Indexes
 Compound Keys
Collections Columns
 O cassandra é schemaless, ou seja, coluna
existe ou não, pra mim tanto faz
 Mas no CQL é necessário uma formalidade
nas colunas para que eu consiga fazer
buscas.
Collections Columns
CREATE TABLE conta_oferta (
campanha int,
categoria int,
loja bigint,
ofertas map<timestamp,bigint>,
PRIMARY KEY ((campanha,categoria), loja) );
 O CQL trás um novo tipo de coluna, a coluna de
coleção.
 Existem 3 tipos de coleções permitidas:
Set
List
Map
campanha | categoria | loja | ofertas
----------+-----------+------+--------------------------------------------------------------
6637 | 6424 | 50 | {2013-08-27 02:00:00-0300: 30, 2013-08-27 03:00:00-0300: 50}
Collections Columns
 Uma collection column permite guardar
valores dinâmicos, traduzindo a forma
schemaless do cassandra para um mundo
mais schemafull
 Cada item de uma collection column pode ter
um TTL específico
TTL
 Cada coluna na CF pode ter uma data para
expirar ou um Time To Live próprio. Assim
mantemos sempre dados válidos no
servidor, não há a necessidade de criar rotinas
complexas de expurgo ou pedir para a Infra
apagar os destinations =P
 No Dashboard cada item da coluna de ofertas
tem um TTL de 30 dias
UUID
 Em uma base relacional o ID pode ser um número
inteiro com incremento continuo já que a base fica
em apenas em um computador
 Já que o Cassandra é clusterizado, para evitar
choque de ids é necessário uma estratégia mais
avançada e para isso é usado o UUID (universally
unique id). Esse id é tem o formato hexadecimal e é
criado baseado na hora e em outros fatores, como
MAC address
Exemplo: ff63a295-e425-4773-9358-dd717039c1c2
No Java:
java.util.UUID.randomUUID();
Índices
 A busca no cassandra é feita apenas por
chaves, nunca por colunas
 Para fazer buscas por colunas é necessário
transformá-las em chaves, ou seja, criar índices
CREATE TABLE users ( userID uuid, frame text, lname text, state text, zip
int, PRIMARY KEY (userID, zip) );
CREATE INDEX users_state ON users (state)
Chaves
 As chaves em uma CF servem para separar
os dados entre os nós, ordená-los e buscá-los.
 Buscas devem ser feitas respeitando as
chaves e suas prioridades
 Buscas devem ser da “esquerda para a
direita”
Chaves
CREATE TABLE calendario (
dia int,
mes int,
ano int,
compromisso text,
PRIMARY KEY (dia,mes,ano) );
INSERT INTO calendario (dia,mes,ano,compromisso) VALUES
(27,08,2013,'preparando apresentacao');
SELECT * FROM calendario WHERE dia = 27;
dia | mes | ano | compromisso
-----+-----+------+-----------------
27 | 8 | 2013 | preparando aula
Chaves
SELECT * FROM calendario WHERE mes = 8;
Bad Request: Cannot execute this query as it might involve data filtering
and thus may have unpredictable performance. If you want to execute
this query despite the performance unpredictability, use ALLOW
FILTERING
Ordem: dia > mês > ano
 Uma Clustering Key não pode ser
usada sem sua Partition Key
Chaves
 Partition Key
 Chave responsável por espalhar os dados entre os nós do cluster
 É a linha da Colum Family
 Clustering Key
 Ordena os dados dentro de cada
separação feita pela Partition Key
 É o prefixo das colunas
 Compound Key
 Uma chave composta pela
Partition Key e Clustering Key
CREATE TABLE calendario ( dia int, mes int, ano int, compromisso text,
PRIMARY KEY (dia,mes,ano) );
Partition
Key
Clustering Key
Compound Key
Chaves
RowKey: 27
=> (column=8:2013:, value=, timestamp=1377636632488000)
=> (column=8:2013:compromisso,
value=707265706172616e646f2061756c61,
timestamp=1377636632488000)
Chaves
 Mas por que isso existe?
 Para garantir performance.
 Sem isso o Cassandra deve buscar a informação em todos os nós do
cluster
 ALLOW FILTERING
 Caso performance não seja o meu problema, eu posso avisar o
Cassandra disso através da sintax ALLOW FILTERING
SELECT * FROM calendario WHERE mes = 8 ALLOW FILTERING;
dia | mes | ano | compromisso
-----+-----+------+-----------------
27 | 8 | 2013 | preparando aula
Lógica para busca
1) O campo a ser procurado deve ser um índice
1) A ordem dos índices deve ser respeitada
1)Pense na Query antes de criar sua CF
1)Use ao máximo chaves naturais
1)Pense na query antes!
1)Lembre-se que em 95% o seu sistema usará as mesmas queries, então
pense antes na query
Normalização
 Facilita a atualização de dados
 Permite que eu contenha apenas informações
consistentes, sem campos NULL
 Permite informações em lista (com ajuda de
uma tabela de relacionamento), como por
exemplo, múltiplos telefones
Normalização
 Criação mais coerente de
queries complexas
Os publishers beta testers, com
campanhas ativas, da categoria
moda, que sejam do signo de
Virgem e com ascendente em Áries
Novo paradigma
 Mas por que devemos usar apenas esse tipo
de paradigma?
 Quanto de meta informação nós precisamos
para guardar informações normalizadas?
 Quantas primary keys com auto increment
(chaves não naturais), quantas foreign
keys, quantas tabelas de relacionamentos
precisamos para normalizar as informações?
Dashboard
 O Dashboard em 99% do tempo procura
informações, por que eu quero facilidade
para atualizar uma informação se isso vai
prejudicar minha busca?
 Por que eu não posso ter um campo nulo?
Para economizar espaço? Mas e as chaves
primarias e estrangeiras que eu vou
precisar, para ter essa economia?
 Quantas vezes eu vou precisar saber
sobre os publishers de Virgem
com ascendente em Áries?
Dashboard
Dashboard
Dashboard
OBRIGADO!

Mais conteúdo relacionado

Mais procurados

MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
Bianca Caruso da Paixão
 
Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8
Emiliano Barbosa
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
Nécio de Lima Veras
 
Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8
Emiliano Barbosa
 
Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8
Emiliano Barbosa
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Emiliano Barbosa
 
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Gabriel Bugano
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
Igor Alves
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
Leonardo Soares
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysql
binhoetec
 
Aula7 sql basico_6por_pag
Aula7 sql basico_6por_pagAula7 sql basico_6por_pag
Aula7 sql basico_6por_pag
anacri
 
Apostila de sql oracle
Apostila de sql oracleApostila de sql oracle
Apostila de sql oracle
Anderson Mota Dematte
 
apostila de sql - oracle
 apostila de sql - oracle  apostila de sql - oracle
apostila de sql - oracle
Rosete Lima
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
iMasters
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
Alexandre Silva
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
Jorge Ávila Miranda
 

Mais procurados (16)

MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8
 
Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
 
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysql
 
Aula7 sql basico_6por_pag
Aula7 sql basico_6por_pagAula7 sql basico_6por_pag
Aula7 sql basico_6por_pag
 
Apostila de sql oracle
Apostila de sql oracleApostila de sql oracle
Apostila de sql oracle
 
apostila de sql - oracle
 apostila de sql - oracle  apostila de sql - oracle
apostila de sql - oracle
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 

Destaque

Ad server cassandra
Ad server cassandraAd server cassandra
Ad server cassandra
dist_bp
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
dist_bp
 
Apache camel
Apache camelApache camel
Apache camel
dist_bp
 
Tech Talk Buscapé - Redis
Tech Talk Buscapé - RedisTech Talk Buscapé - Redis
Tech Talk Buscapé - Redis
Marcelo Tozzi de Lima
 
Tech Talk Buscapé - Clean Code
Tech Talk Buscapé - Clean CodeTech Talk Buscapé - Clean Code
Tech Talk Buscapé - Clean Code
Marcelo Tozzi de Lima
 
Scalable CSS Architecture
Scalable CSS ArchitectureScalable CSS Architecture
Scalable CSS Architecture
Michał Pierzchała
 

Destaque (6)

Ad server cassandra
Ad server cassandraAd server cassandra
Ad server cassandra
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Apache camel
Apache camelApache camel
Apache camel
 
Tech Talk Buscapé - Redis
Tech Talk Buscapé - RedisTech Talk Buscapé - Redis
Tech Talk Buscapé - Redis
 
Tech Talk Buscapé - Clean Code
Tech Talk Buscapé - Clean CodeTech Talk Buscapé - Clean Code
Tech Talk Buscapé - Clean Code
 
Scalable CSS Architecture
Scalable CSS ArchitectureScalable CSS Architecture
Scalable CSS Architecture
 

Semelhante a Cassandra cql

Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
Richiely Paiva
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04
Rodrigo Kiyoshi Saito
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
Eiti Kimura
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
Gilson Figueredo
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
Thiago Freitas
 
Resumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasilResumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasil
macumbamaranhao19
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
jheyeizah
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
Eiti Kimura
 
Python 04
Python 04Python 04
Python 04
Bruno Catão
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
Luiz Henrique Garetti Rosário
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
Daniel Fernandes Costa
 
2832014 curso plsql
2832014 curso plsql2832014 curso plsql
2832014 curso plsql
Valter Marcondes B. Leite
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
Rodrigo Ribeiro
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra
Otávio Santana
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
Osny Pereira Filho
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
Jorge Ávila Miranda
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
Jorge Ávila Miranda
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
Nécio de Lima Veras
 
Banco II - PostgreSQL - Filtros
Banco II - PostgreSQL - FiltrosBanco II - PostgreSQL - Filtros
Banco II - PostgreSQL - Filtros
Gustavo Sávio
 

Semelhante a Cassandra cql (20)

Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
 
6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Resumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasilResumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasil
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
Python 04
Python 04Python 04
Python 04
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
2832014 curso plsql
2832014 curso plsql2832014 curso plsql
2832014 curso plsql
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Banco II - PostgreSQL - Filtros
Banco II - PostgreSQL - FiltrosBanco II - PostgreSQL - Filtros
Banco II - PostgreSQL - Filtros
 

Último

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (7)

Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

Cassandra cql

  • 1. Cassandra Thrift e CQL KEEP CALM AND COME TO THE DARK SIDE
  • 2. Thrift API  Primeira API para comunicação com o Cassandra  Mostrava vários detalhes internos do Cassandra, deixando os comandos verborrágicos e perigosos  Interface difícil de se trabalhar  Muitas transformações devem ser feitas via código
  • 4. Thrift API COMO RAIOS EU FAÇO UMA PESQUISA NISSO????
  • 5. Thrift API  Por impossibilidade de se usar o CQL quando começamos a trabalhar com o Cassandra escolhemos um cliente chamado Astyanax porém a complexidade era alta, daí tivemos que criar uma camada de abstração, surgiu o Cassandree.  O uso do Cassandree no Adsever está no nosso log de impressão e controle de cliques através do Tracker e Batches
  • 8. CQL API  Evolução para uma API mais robusta  CQL3 (Cassandra Query Language) foi criada para abstrair a complexidade do Cassandra e permitir que sua utilização seja muito mais simples, poderosa e segura.  Até a versão 1.1.X do Cassandra, o CQL3 ainda era beta, com a versão 1.2.X ele se tornou estável e passou a ser chamado em muitos lugares apenas por CQL.  Sintaxe semelhante ao SQL para facilitar aprendizado
  • 11. CQL API  Quando atualizamos o Cassandra para a versão 1.2.1 estávamos prontos para usar o CQL 3 e o cluster já estava estabilizado  Utilizamos o cliente Datastax Java Driver para conexão. Esse cliente se assemelha em muito a JDBC, isso facilita muito  Utilizamos o Java Driver dentro do Dashboard para armazenamento do histórico de ofertas e como base de dados principal
  • 15. CQL API CREATE KEYSPACE demodb WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3}; CREATE TABLE users ( user_name varchar, password varchar, gender varchar, session_token varchar, state varchar, birth_year bigint, PRIMARY KEY (user_name)); INSERT INTO emp (empID, deptID, first_name, last_name) VALUES (104, 15, 'jane', 'smith'); SELECT * FROM emp WHERE empID IN (130,104) ORDER BY deptID DESC;
  • 16. Os detalhes maléficos do Cassandra  Collections Columns  TTL  UUID  Indexes  Compound Keys
  • 17. Collections Columns  O cassandra é schemaless, ou seja, coluna existe ou não, pra mim tanto faz  Mas no CQL é necessário uma formalidade nas colunas para que eu consiga fazer buscas.
  • 18. Collections Columns CREATE TABLE conta_oferta ( campanha int, categoria int, loja bigint, ofertas map<timestamp,bigint>, PRIMARY KEY ((campanha,categoria), loja) );  O CQL trás um novo tipo de coluna, a coluna de coleção.  Existem 3 tipos de coleções permitidas: Set List Map campanha | categoria | loja | ofertas ----------+-----------+------+-------------------------------------------------------------- 6637 | 6424 | 50 | {2013-08-27 02:00:00-0300: 30, 2013-08-27 03:00:00-0300: 50}
  • 19. Collections Columns  Uma collection column permite guardar valores dinâmicos, traduzindo a forma schemaless do cassandra para um mundo mais schemafull  Cada item de uma collection column pode ter um TTL específico
  • 20. TTL  Cada coluna na CF pode ter uma data para expirar ou um Time To Live próprio. Assim mantemos sempre dados válidos no servidor, não há a necessidade de criar rotinas complexas de expurgo ou pedir para a Infra apagar os destinations =P  No Dashboard cada item da coluna de ofertas tem um TTL de 30 dias
  • 21. UUID  Em uma base relacional o ID pode ser um número inteiro com incremento continuo já que a base fica em apenas em um computador  Já que o Cassandra é clusterizado, para evitar choque de ids é necessário uma estratégia mais avançada e para isso é usado o UUID (universally unique id). Esse id é tem o formato hexadecimal e é criado baseado na hora e em outros fatores, como MAC address Exemplo: ff63a295-e425-4773-9358-dd717039c1c2 No Java: java.util.UUID.randomUUID();
  • 22. Índices  A busca no cassandra é feita apenas por chaves, nunca por colunas  Para fazer buscas por colunas é necessário transformá-las em chaves, ou seja, criar índices CREATE TABLE users ( userID uuid, frame text, lname text, state text, zip int, PRIMARY KEY (userID, zip) ); CREATE INDEX users_state ON users (state)
  • 23. Chaves  As chaves em uma CF servem para separar os dados entre os nós, ordená-los e buscá-los.  Buscas devem ser feitas respeitando as chaves e suas prioridades  Buscas devem ser da “esquerda para a direita”
  • 24. Chaves CREATE TABLE calendario ( dia int, mes int, ano int, compromisso text, PRIMARY KEY (dia,mes,ano) ); INSERT INTO calendario (dia,mes,ano,compromisso) VALUES (27,08,2013,'preparando apresentacao'); SELECT * FROM calendario WHERE dia = 27; dia | mes | ano | compromisso -----+-----+------+----------------- 27 | 8 | 2013 | preparando aula
  • 25. Chaves SELECT * FROM calendario WHERE mes = 8; Bad Request: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING Ordem: dia > mês > ano  Uma Clustering Key não pode ser usada sem sua Partition Key
  • 26. Chaves  Partition Key  Chave responsável por espalhar os dados entre os nós do cluster  É a linha da Colum Family  Clustering Key  Ordena os dados dentro de cada separação feita pela Partition Key  É o prefixo das colunas  Compound Key  Uma chave composta pela Partition Key e Clustering Key CREATE TABLE calendario ( dia int, mes int, ano int, compromisso text, PRIMARY KEY (dia,mes,ano) ); Partition Key Clustering Key Compound Key
  • 27. Chaves RowKey: 27 => (column=8:2013:, value=, timestamp=1377636632488000) => (column=8:2013:compromisso, value=707265706172616e646f2061756c61, timestamp=1377636632488000)
  • 28. Chaves  Mas por que isso existe?  Para garantir performance.  Sem isso o Cassandra deve buscar a informação em todos os nós do cluster  ALLOW FILTERING  Caso performance não seja o meu problema, eu posso avisar o Cassandra disso através da sintax ALLOW FILTERING SELECT * FROM calendario WHERE mes = 8 ALLOW FILTERING; dia | mes | ano | compromisso -----+-----+------+----------------- 27 | 8 | 2013 | preparando aula
  • 29. Lógica para busca 1) O campo a ser procurado deve ser um índice 1) A ordem dos índices deve ser respeitada 1)Pense na Query antes de criar sua CF 1)Use ao máximo chaves naturais 1)Pense na query antes! 1)Lembre-se que em 95% o seu sistema usará as mesmas queries, então pense antes na query
  • 30. Normalização  Facilita a atualização de dados  Permite que eu contenha apenas informações consistentes, sem campos NULL  Permite informações em lista (com ajuda de uma tabela de relacionamento), como por exemplo, múltiplos telefones
  • 31. Normalização  Criação mais coerente de queries complexas Os publishers beta testers, com campanhas ativas, da categoria moda, que sejam do signo de Virgem e com ascendente em Áries
  • 32. Novo paradigma  Mas por que devemos usar apenas esse tipo de paradigma?  Quanto de meta informação nós precisamos para guardar informações normalizadas?  Quantas primary keys com auto increment (chaves não naturais), quantas foreign keys, quantas tabelas de relacionamentos precisamos para normalizar as informações?
  • 33. Dashboard  O Dashboard em 99% do tempo procura informações, por que eu quero facilidade para atualizar uma informação se isso vai prejudicar minha busca?  Por que eu não posso ter um campo nulo? Para economizar espaço? Mas e as chaves primarias e estrangeiras que eu vou precisar, para ter essa economia?  Quantas vezes eu vou precisar saber sobre os publishers de Virgem com ascendente em Áries?