SlideShare a Scribd company logo
1 of 47
Download to read offline
pen4education
Apache Cassandra: Estratégias de
Modelagem de Dados
Eiti Kimura
NoSQL
Coordenador de Desenvolvimento
pen4education
Quem sou eu?
• Arquiteto de software e Coordenador de TI na Movile
• Apache Cassandra Developer 1.1 Certified (2013)
• Apache Cassandra MVP (2014/2015 e 2015/2016)
• Apache Cassandra Contributor (2015)
• Cassandra Summit Speaker (2014 e 2015)
• Cassandra Summit Reviewer (2016)
Eiti Kimura
eitikimura
pen4education
A Movile é a empresa por
trás das apps que fazem
sua vida mais fácil!
pen4education
O Melhor conteúdo para Crianças
pen4education
Líder em delivery de
comida no Brasil
pen4education
Agenda
Linguagem de Manipulação de Dados (CQL)
• Estratégias de Modelagem de Dados
• Direcionada por Consulta (Query Driven)
• Séries Temporais (Time Series)
• Particionamento de Dados (Buckets)
• Considerações Finais
pen4education
Cassandra Query Language
• Linguagem familiar (lembra o SQL)
• Criação de Objetos via DDL (ex.: CREATE, DROP)
• Suporta principais comandos DML
• Consulta com comando: SELECT
SELECT * FROM users;
SELECT * FROM users WHERE login = 'scott';
SELECT * FROM users WHERE birth_date > '1980-01-01';
pen4education
CQL Demo
pen4education
Modelagem (Query-Driven)
● Qual o fluxo de dados da sua aplicação?
● Como você vai acessar os dados?
● Saber as consultas de antemão NÃO é opcional!
● É diferente do banco relacional, pois não é
somente fazer um novo join para ter uma nova
consulta
pen4education
Modelagem (Query-Driven)
pen4education
Modelagem (Query Driven)
Exemplo de uso
http://docs.datastax.com/en/cql/3.1/cql/ddl/dataModelingApproach.html
diagrama de Chebotko
pen4education
Modelagem (Query Driven)
Tome nota!
• Cada consulta (query) tem uma tabela
correspondente
• Tabelas são modeladas para que as consultas
executem corretamente
• Tabelas retornam dados pré-ordenados
pen4education
Desnormalização
Melhor duplicar os dados do que ter que fazer uma junção (join)
Dados podem ser duplicados ao longo de tabelas e partições
Dados desnormalizados são mais escaláveis
pen4education
Atributos do tipo Coleções
Atributos multivalorados
Tipos de atributos multivalorados ou estruturas de dados
complexas:
• List: uma lista encadeada
• Set: um conjunto com garantia de valores únicos
• Map: um dicionário de dados
pen4education
Exemplos: Collections
CREATE TABLE users (
user_id text,
name text,
emails set<text>,
PRIMARY KEY (user_id)
);
INSERT INTO users (user_id, name)
VALUES ('frodo', 'Frodo Bolseiro');
UPDATE users SET emails = {'frodo@movile.com'}
WHERE user_id = 'frodo';
UPDATE users SET emails = emails + {'frodo@gmail.com'}
WHERE user_id = 'frodo';
pen4education
Use coleções com cautela
Atributo multivalorado
Usado para desnormalizar ou armazenar uma pequena
quantidade de dados:
● telefones de um usuário
● labels para um e-mail
● tags de conteúdos em geral (e-mail, música, video)
pen4education
Cuidado com Collections
● Coleções possuem limitação de
tamanho, máximo de 64K
● Coleções grandes geram consultas mais
lentas
● Atualizações de coleções geram Tombstones
pen4education
Estação Metereológica
Modelagem Time Series
pen4education
Time Series
• Modelo de dados vindo do BigTable
• Uma chave (row-key) e um agrupamento de colunas (variáveis)
• Design único no disco
Row Key Column Name
Column Value
...
Column Name
Column Value
Column Name
Column Value
Timestamp Timestamp Timestamp
pen4education
Estação coleta dados ao longo do tempo
Cassandra armazena os dados em forma sequencial
Estação
Metereológica Cluster Cassandra
Aplicação
pen4education
Caso de uso
Consultas Necessárias (pré-modelagem)
• Todos os dados de uma estação
• Dados para uma Data e Hora
• Obter dados por uma faixa de data e hora
Modelo de armazenamento
• Armazenar dados por estação
• Armazenar série temporal ordenada
pen4education
Modelo de Dados (CQL)
INSERT INTO temperature (wstation_id, event_time, temp) VALUES (1, '2016-07-07 15:24', '20C');
INSERT INTO temperature (wstation_id, event_time, temp) VALUES (1, '2016-07-08 15:35', '19C');
INSERT INTO temperature (wstation_id, event_time, temp) VALUES (2, '2016-07-08 12:10', '22C');
INSERT INTO temperature (wstation_id, event_time, temp) VALUES (2, '2016-07-08 12:11', '23C');
CREATE TABLE temperature (
wstation_id int,
event_time timestamp,
temp text,
PRIMARY KEY (wstation_id, event_time)
);
Inserção de dados, granularidade de minutos
Identificador da estação e a data do evento são únicos
pen4education
Modelo de Armazenamento
Visão Lógica
SELECT wstation_id, event_time, temp
FROM temperature
WHERE wstation_id = 1;
wstation_id event_time
2016-07-08 15:20
temp
22C1
2016-07-08 15:21 19C1
2016-07-08 15:22 23C1
2016-07-08 15:23 21C1
pen4education
Modelo de Armazenamento
Layout no disco (armazenamento físico)
SELECT wstation_id, event_time_ temp
FROM temperature
WHERE wstation_id = 1;
22C 19C 23C
1
2016-07-08 15:20 2016-07-08 15:21 2016-07-08 15:22 2016-07-08 15:23
21C
Colunas Dinâmicas
Partition-key
Dados armazenados sequencialmente
Dados já ordenados (event_time)
pen4education
Padrões de Consulta
wstation_id event_time temp
2016-07-08 15:21 19C1
2016-07-08 15:22 23C1
SELECT wstation_id, event_time, temp
FROM temperature
WHERE wstation_id = 1
AND event_time > '2016-07-07 15:20'
AND event_time < '2016-07-07 15:23';
pen4education
Casos de Uso de Time Series
• Log de operações e acesso
• Dados de sensores
• Rastreio de Usuários
• Detecção de Fraude
pen4education
Particionamento de Dados
Modelagem baseada Partição (Buckets)
pen4education
Partições
• Primeira parte da Chave primária é utilizada como Chave
de Partição (Partition-Key)
• Os dados são agrupados por chave de partição
• Os dados de uma partição devem caber em um único nó
pen4education
Limites Físicos de Partição
Cassandra 2.0 ou Anterior
● ~ 100MB ou menos / partição;
● ~ 100k valores (colunas na linha).
Cassandra 2.1+
● Algumas centenas de MB por partição;
● Milhões de valores (colunas por
partição).
pen4education
Número de Valores
Como calcular o número de valores por partição
Onde
Número de valores
Número aproximados de Registros (Estimativa)
Número de Colunas do Modelo
Número de Colunas da Chave Primária
Número de Colunas Estáticas (se existir)
pen4education
Cálculo do Número de Valores
- Aproximadamente 2000
comentários por usuário
= 2000 * ( 7 - 3 - 1) + 1 = 6001
pen4education
Tamanho da Partição
Tamanho físico no disco
Cki
Csj
Crk
Ccl
Número de valores pré-calculado
Número aproximados de Registros (CQL - rows)
Chaves de Partição
Colunas Estáticas
Colunas Regulares
Número de Colunas Clusterizadas
pen4education
Cálculo do Tamanho da
Partição
Usuário gera 2000 comentários
pen4education
Estimativa de Tamanho
Tamanho em bytes das colunas
http://docs.datastax.com/en/cql/3.1/cql/cql_reference/cql_data_types_c.html
pen4education
Tamanho da Partição
Cálculo do Tamanho (Exemplo)
Cki
= total chaves de partição = 16 bytes
Csj
= tamanho coluna(s) estáticas = 30 bytes
Nr
= CQL rows = 2000
Ccl
= tamanho Cluster Columns
16 + 8 = 24 bytes
Crk
= colunas regulares
(300 + 24) + (60 + 24) + (32768 + 24) =
33.200 bytes
Nv
= valores pré calculados = 6001
Resolvendo:
16 + 30 + (2000 * 33.200) + (8 * 6001) =
66.448.054 bytes = ~66,4 MB
pen4education
Checagem dos valores limites
O que acontece se os valores não
forem respeitados?
pen4education
Inconsistências, Exceções
Cluster em estado de falha
pen4education
Solução: Chaves de partição
usar chaves de partição para diminuir o tamanho de uma
linha. Ex: particionar dados por dia/horário
CREATE TABLE temperature (
wstation_id int,
day int,
hour int,
event_time timestamp,
temp text,
PRIMARY KEY ((wstation_id, day, hour), event_time)
);
pen4education
22C 19C 22C
1:08:10
2016-07-08:10:15 2016-07-08:10:12 2016-07-08:10:05 2016-07-08:10:00
21C
22C 19C 22C
1:08:09
2016-07-08:09:15 2016-07-08:09:12 2016-07-08:09:05 2016-07-08:09:00
21C
22C 19C 22C
1:08:08
2016-07-08:08:15 2016-07-08:08:12 2016-07-08:08:05 2016-07-08:08:00
21C
PRIMARY KEY ((wstation_id, day, hour), event_time)
Partition Key Cluster Columns
11C 12C 15C
1:07:23
2016-07-07:23:15 2016-07-07:23:12 2016-07-07:23:05 2016-07-08:23:00
18C
20C 19C 18C
1:07:22
2016-07-07:23:15 2016-07-07:23:12 2016-07-07:23:05 2016-07-08:23:00
17C
...
pen4education
Caso de uso
Criação de Tabela de índice
CREATE TABLE idx_config (
prod_id int,
channel_id varchar,
subs_key varchar,
last_charge timestamp,
status_id int,
origin_id int,
enabled boolean,
PRIMARY KEY ((prod_id, channel_id), subs_key)
);
Partition Key: Agrupamento de assinaturas de usuários por produto e canal de conteúdo
Problema: milhões de assinaturas em um mesmo canal de conteúdo de um mesmo
produto
pen4education
Apache Cassandra v1.2
ERROR [CompactionExecutor:6523] 2015-10-09 12:33:23,551
CassandraDaemon.java (line 191) Exception in thread
Thread[CompactionExecutor:6523,1,main]
java.lang.AssertionError: incorrect row data size3758096384 written to
/movile/cassandra-data/SBSPlatform/idx_config/SBSPlatform-idx_config-tmp-ic-715-Data.db;
at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:162)
at org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java:
162)
at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.
java:48)
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
+3GB em 1 linha
pen4education
Solução: Buckets
Chave de Partição Artificial
CREATE TABLE idx_config (
prod_id int,
channel_id varchar,
subs_key varchar,
last_charge timestamp,
status_id int,
origin_id int,
bucket int,
enabled boolean,
PRIMARY KEY ((prod_id, channel_id, bucket), subs_key)
);
Maior particionamento dos dados, menos colunas por linha!
pen4education
Tamanho das Linhas
$ ./nodetool cfstats <keyspace>
Column Family: idx_config
SSTable count: 3
Space used (live): 2458544492
Space used (total): 2509310274
Number of Keys (estimate): 64896
Memtable Data Size: 125129646
Memtable Switch Count: 32931
Read Count: 1197063
Write Latency: 0,044 ms.
Bloom Filter False Positives: 38
Bloom Filter Space Used: 162928
Compacted row minimum size: 180
Compacted row maximum size: 122381140 (~122MB)
Compacted row mean size: 111813
pen4education
Considerações Finais
Faça validação do Modelo de forma Iterativa
• verifique todas consultas (Access Patterns)
• verifique o comportamento do modelo com a carga
esperada
• dobre a carga de dados sobre o modelo, verifique o
tamanho das partições (Bucket)
• simule ambiente altamente concorrente
pen4education
Considerações Finais
• não execute as validações em ambiente local, crie
um Cluster de máquinas para verificar o
comportamento em rede
• apache-cassandra/tools/bin/cassandra-stress
• simule operações de manutenção (clean up, repair,
compaction)
• sempre verifique os limites físicos e lógicos da
partições
pen4education
Links
Cassandra Internals Job
http://bit.ly/cassandra-internals-job
Cassandra Tester Job
http://bit.ly/cassandra-tester-jobs
Data Modeling Training
http://bit.ly/cassandra-data-model-training
pen4education
MUITO OBRIGADO!
eitikimura eiti-kimura-movile eiti.kimura@movile.com
talentos@movile.com

More Related Content

What's hot

MongoDB Database Replication
MongoDB Database ReplicationMongoDB Database Replication
MongoDB Database ReplicationMehdi Valikhani
 
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Henning Jacobs
 
ClickHouse Mark Cache, by Mik Kocikowski, Cloudflare
ClickHouse Mark Cache, by Mik Kocikowski, CloudflareClickHouse Mark Cache, by Mik Kocikowski, Cloudflare
ClickHouse Mark Cache, by Mik Kocikowski, CloudflareAltinity Ltd
 
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db   tópico avançado - modelagem de dados e boas práticas para escalarDynamo db   tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalarAmazon Web Services LATAM
 
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...DataStax Academy
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaJiangjie Qin
 
Bulk Loading into Cassandra
Bulk Loading into CassandraBulk Loading into Cassandra
Bulk Loading into CassandraBrian Hess
 
C* Summit 2013: The World's Next Top Data Model by Patrick McFadin
C* Summit 2013: The World's Next Top Data Model by Patrick McFadinC* Summit 2013: The World's Next Top Data Model by Patrick McFadin
C* Summit 2013: The World's Next Top Data Model by Patrick McFadinDataStax Academy
 
Keep me in the Loop: INotify in HDFS
Keep me in the Loop: INotify in HDFSKeep me in the Loop: INotify in HDFS
Keep me in the Loop: INotify in HDFSDataWorks Summit
 
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion Records
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion RecordsScylla Summit 2022: How to Migrate a Counter Table for 68 Billion Records
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion RecordsScyllaDB
 
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...confluent
 
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxGrafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxRomanKhavronenko
 
ClickHouse Deep Dive, by Aleksei Milovidov
ClickHouse Deep Dive, by Aleksei MilovidovClickHouse Deep Dive, by Aleksei Milovidov
ClickHouse Deep Dive, by Aleksei MilovidovAltinity Ltd
 
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...DataStax
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to CassandraGokhan Atil
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Clickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaClickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaAltinity Ltd
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorImply
 
Introduction à Cassandra - campus plex
Introduction à Cassandra - campus plexIntroduction à Cassandra - campus plex
Introduction à Cassandra - campus plexjaxio
 
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...HostedbyConfluent
 

What's hot (20)

MongoDB Database Replication
MongoDB Database ReplicationMongoDB Database Replication
MongoDB Database Replication
 
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
 
ClickHouse Mark Cache, by Mik Kocikowski, Cloudflare
ClickHouse Mark Cache, by Mik Kocikowski, CloudflareClickHouse Mark Cache, by Mik Kocikowski, Cloudflare
ClickHouse Mark Cache, by Mik Kocikowski, Cloudflare
 
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db   tópico avançado - modelagem de dados e boas práticas para escalarDynamo db   tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
 
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
Bulk Loading into Cassandra
Bulk Loading into CassandraBulk Loading into Cassandra
Bulk Loading into Cassandra
 
C* Summit 2013: The World's Next Top Data Model by Patrick McFadin
C* Summit 2013: The World's Next Top Data Model by Patrick McFadinC* Summit 2013: The World's Next Top Data Model by Patrick McFadin
C* Summit 2013: The World's Next Top Data Model by Patrick McFadin
 
Keep me in the Loop: INotify in HDFS
Keep me in the Loop: INotify in HDFSKeep me in the Loop: INotify in HDFS
Keep me in the Loop: INotify in HDFS
 
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion Records
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion RecordsScylla Summit 2022: How to Migrate a Counter Table for 68 Billion Records
Scylla Summit 2022: How to Migrate a Counter Table for 68 Billion Records
 
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
 
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxGrafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
 
ClickHouse Deep Dive, by Aleksei Milovidov
ClickHouse Deep Dive, by Aleksei MilovidovClickHouse Deep Dive, by Aleksei Milovidov
ClickHouse Deep Dive, by Aleksei Milovidov
 
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
The Missing Manual for Leveled Compaction Strategy (Wei Deng & Ryan Svihla, D...
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Clickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek VavrusaClickhouse at Cloudflare. By Marek Vavrusa
Clickhouse at Cloudflare. By Marek Vavrusa
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operator
 
Introduction à Cassandra - campus plex
Introduction à Cassandra - campus plexIntroduction à Cassandra - campus plex
Introduction à Cassandra - campus plex
 
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...
Real-time Data Ingestion from Kafka to ClickHouse with Deterministic Re-tries...
 

Similar to [TDC2016] Apache Cassandra Estratégias de Modelagem de Dados

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ídosEiti Kimura
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012Fabrício Catae
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLRaul Oliveira
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Otávio Carvalho
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Fabrício Catae
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFBianca Caruso da Paixão
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisJefferson Martins de Andrade
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Arquitetando com buzzwords
Arquitetando com buzzwordsArquitetando com buzzwords
Arquitetando com buzzwordsFabiano Modos
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016Fernando Santiago
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...Fabrício Catae
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoFabrício Catae
 
Como funciona um banco de dados? (Prudente TechDay 2010)
Como funciona um banco de dados? (Prudente TechDay 2010)Como funciona um banco de dados? (Prudente TechDay 2010)
Como funciona um banco de dados? (Prudente TechDay 2010)Fabrício Catae
 
BD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelasBD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelasRodrigo Kiyoshi Saito
 

Similar to [TDC2016] Apache Cassandra Estratégias de Modelagem de Dados (20)

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
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012Indo para o proximo nivel:  MCSM e MCA em SQL Server 2012
Indo para o proximo nivel: MCSM e MCA em SQL Server 2012
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
Stream Processing: Uma visão geral - TDC Porto Alegre / FISL 17
 
FLISOL 2017 - SQL Server no Linux
FLISOL 2017 - SQL Server no LinuxFLISOL 2017 - SQL Server no Linux
FLISOL 2017 - SQL Server no Linux
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFF
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Arquitetando com buzzwords
Arquitetando com buzzwordsArquitetando com buzzwords
Arquitetando com buzzwords
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 
Deep dive de Amazon Redshift
Deep dive de Amazon RedshiftDeep dive de Amazon Redshift
Deep dive de Amazon Redshift
 
Como funciona um banco de dados? (Prudente TechDay 2010)
Como funciona um banco de dados? (Prudente TechDay 2010)Como funciona um banco de dados? (Prudente TechDay 2010)
Como funciona um banco de dados? (Prudente TechDay 2010)
 
BD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelasBD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelas
 

More from Eiti Kimura

[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...Eiti Kimura
 
[Redis conf18] The Versatility of Redis
[Redis conf18] The Versatility of Redis[Redis conf18] The Versatility of Redis
[Redis conf18] The Versatility of RedisEiti Kimura
 
[DEVFEST] Apache Spark Casos de Uso e Escalabilidade
[DEVFEST] Apache Spark  Casos de Uso e Escalabilidade[DEVFEST] Apache Spark  Casos de Uso e Escalabilidade
[DEVFEST] Apache Spark Casos de Uso e EscalabilidadeEiti Kimura
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto DesempenhoEiti Kimura
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na PráticaEiti Kimura
 
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileEiti Kimura
 
Cassandra Summit 2015 - A Change of Seasons
Cassandra Summit 2015 - A Change of SeasonsCassandra Summit 2015 - A Change of Seasons
Cassandra Summit 2015 - A Change of SeasonsEiti Kimura
 
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoTDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoEiti Kimura
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso PráticoEiti Kimura
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisEiti Kimura
 

More from Eiti Kimura (10)

[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
[Datafest 2018] Apache Spark Structured Stream - Moedor de dados em tempo qua...
 
[Redis conf18] The Versatility of Redis
[Redis conf18] The Versatility of Redis[Redis conf18] The Versatility of Redis
[Redis conf18] The Versatility of Redis
 
[DEVFEST] Apache Spark Casos de Uso e Escalabilidade
[DEVFEST] Apache Spark  Casos de Uso e Escalabilidade[DEVFEST] Apache Spark  Casos de Uso e Escalabilidade
[DEVFEST] Apache Spark Casos de Uso e Escalabilidade
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
 
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
 
Cassandra Summit 2015 - A Change of Seasons
Cassandra Summit 2015 - A Change of SeasonsCassandra Summit 2015 - A Change of Seasons
Cassandra Summit 2015 - A Change of Seasons
 
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoTDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso Prático
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 

[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados

  • 1. pen4education Apache Cassandra: Estratégias de Modelagem de Dados Eiti Kimura NoSQL Coordenador de Desenvolvimento
  • 2. pen4education Quem sou eu? • Arquiteto de software e Coordenador de TI na Movile • Apache Cassandra Developer 1.1 Certified (2013) • Apache Cassandra MVP (2014/2015 e 2015/2016) • Apache Cassandra Contributor (2015) • Cassandra Summit Speaker (2014 e 2015) • Cassandra Summit Reviewer (2016) Eiti Kimura eitikimura
  • 3. pen4education A Movile é a empresa por trás das apps que fazem sua vida mais fácil!
  • 5. pen4education Líder em delivery de comida no Brasil
  • 6. pen4education Agenda Linguagem de Manipulação de Dados (CQL) • Estratégias de Modelagem de Dados • Direcionada por Consulta (Query Driven) • Séries Temporais (Time Series) • Particionamento de Dados (Buckets) • Considerações Finais
  • 7. pen4education Cassandra Query Language • Linguagem familiar (lembra o SQL) • Criação de Objetos via DDL (ex.: CREATE, DROP) • Suporta principais comandos DML • Consulta com comando: SELECT SELECT * FROM users; SELECT * FROM users WHERE login = 'scott'; SELECT * FROM users WHERE birth_date > '1980-01-01';
  • 9. pen4education Modelagem (Query-Driven) ● Qual o fluxo de dados da sua aplicação? ● Como você vai acessar os dados? ● Saber as consultas de antemão NÃO é opcional! ● É diferente do banco relacional, pois não é somente fazer um novo join para ter uma nova consulta
  • 11. pen4education Modelagem (Query Driven) Exemplo de uso http://docs.datastax.com/en/cql/3.1/cql/ddl/dataModelingApproach.html diagrama de Chebotko
  • 12. pen4education Modelagem (Query Driven) Tome nota! • Cada consulta (query) tem uma tabela correspondente • Tabelas são modeladas para que as consultas executem corretamente • Tabelas retornam dados pré-ordenados
  • 13. pen4education Desnormalização Melhor duplicar os dados do que ter que fazer uma junção (join) Dados podem ser duplicados ao longo de tabelas e partições Dados desnormalizados são mais escaláveis
  • 14. pen4education Atributos do tipo Coleções Atributos multivalorados Tipos de atributos multivalorados ou estruturas de dados complexas: • List: uma lista encadeada • Set: um conjunto com garantia de valores únicos • Map: um dicionário de dados
  • 15. pen4education Exemplos: Collections CREATE TABLE users ( user_id text, name text, emails set<text>, PRIMARY KEY (user_id) ); INSERT INTO users (user_id, name) VALUES ('frodo', 'Frodo Bolseiro'); UPDATE users SET emails = {'frodo@movile.com'} WHERE user_id = 'frodo'; UPDATE users SET emails = emails + {'frodo@gmail.com'} WHERE user_id = 'frodo';
  • 16. pen4education Use coleções com cautela Atributo multivalorado Usado para desnormalizar ou armazenar uma pequena quantidade de dados: ● telefones de um usuário ● labels para um e-mail ● tags de conteúdos em geral (e-mail, música, video)
  • 17. pen4education Cuidado com Collections ● Coleções possuem limitação de tamanho, máximo de 64K ● Coleções grandes geram consultas mais lentas ● Atualizações de coleções geram Tombstones
  • 19. pen4education Time Series • Modelo de dados vindo do BigTable • Uma chave (row-key) e um agrupamento de colunas (variáveis) • Design único no disco Row Key Column Name Column Value ... Column Name Column Value Column Name Column Value Timestamp Timestamp Timestamp
  • 20. pen4education Estação coleta dados ao longo do tempo Cassandra armazena os dados em forma sequencial Estação Metereológica Cluster Cassandra Aplicação
  • 21. pen4education Caso de uso Consultas Necessárias (pré-modelagem) • Todos os dados de uma estação • Dados para uma Data e Hora • Obter dados por uma faixa de data e hora Modelo de armazenamento • Armazenar dados por estação • Armazenar série temporal ordenada
  • 22. pen4education Modelo de Dados (CQL) INSERT INTO temperature (wstation_id, event_time, temp) VALUES (1, '2016-07-07 15:24', '20C'); INSERT INTO temperature (wstation_id, event_time, temp) VALUES (1, '2016-07-08 15:35', '19C'); INSERT INTO temperature (wstation_id, event_time, temp) VALUES (2, '2016-07-08 12:10', '22C'); INSERT INTO temperature (wstation_id, event_time, temp) VALUES (2, '2016-07-08 12:11', '23C'); CREATE TABLE temperature ( wstation_id int, event_time timestamp, temp text, PRIMARY KEY (wstation_id, event_time) ); Inserção de dados, granularidade de minutos Identificador da estação e a data do evento são únicos
  • 23. pen4education Modelo de Armazenamento Visão Lógica SELECT wstation_id, event_time, temp FROM temperature WHERE wstation_id = 1; wstation_id event_time 2016-07-08 15:20 temp 22C1 2016-07-08 15:21 19C1 2016-07-08 15:22 23C1 2016-07-08 15:23 21C1
  • 24. pen4education Modelo de Armazenamento Layout no disco (armazenamento físico) SELECT wstation_id, event_time_ temp FROM temperature WHERE wstation_id = 1; 22C 19C 23C 1 2016-07-08 15:20 2016-07-08 15:21 2016-07-08 15:22 2016-07-08 15:23 21C Colunas Dinâmicas Partition-key Dados armazenados sequencialmente Dados já ordenados (event_time)
  • 25. pen4education Padrões de Consulta wstation_id event_time temp 2016-07-08 15:21 19C1 2016-07-08 15:22 23C1 SELECT wstation_id, event_time, temp FROM temperature WHERE wstation_id = 1 AND event_time > '2016-07-07 15:20' AND event_time < '2016-07-07 15:23';
  • 26. pen4education Casos de Uso de Time Series • Log de operações e acesso • Dados de sensores • Rastreio de Usuários • Detecção de Fraude
  • 27. pen4education Particionamento de Dados Modelagem baseada Partição (Buckets)
  • 28. pen4education Partições • Primeira parte da Chave primária é utilizada como Chave de Partição (Partition-Key) • Os dados são agrupados por chave de partição • Os dados de uma partição devem caber em um único nó
  • 29. pen4education Limites Físicos de Partição Cassandra 2.0 ou Anterior ● ~ 100MB ou menos / partição; ● ~ 100k valores (colunas na linha). Cassandra 2.1+ ● Algumas centenas de MB por partição; ● Milhões de valores (colunas por partição).
  • 30. pen4education Número de Valores Como calcular o número de valores por partição Onde Número de valores Número aproximados de Registros (Estimativa) Número de Colunas do Modelo Número de Colunas da Chave Primária Número de Colunas Estáticas (se existir)
  • 31. pen4education Cálculo do Número de Valores - Aproximadamente 2000 comentários por usuário = 2000 * ( 7 - 3 - 1) + 1 = 6001
  • 32. pen4education Tamanho da Partição Tamanho físico no disco Cki Csj Crk Ccl Número de valores pré-calculado Número aproximados de Registros (CQL - rows) Chaves de Partição Colunas Estáticas Colunas Regulares Número de Colunas Clusterizadas
  • 33. pen4education Cálculo do Tamanho da Partição Usuário gera 2000 comentários
  • 34. pen4education Estimativa de Tamanho Tamanho em bytes das colunas http://docs.datastax.com/en/cql/3.1/cql/cql_reference/cql_data_types_c.html
  • 35. pen4education Tamanho da Partição Cálculo do Tamanho (Exemplo) Cki = total chaves de partição = 16 bytes Csj = tamanho coluna(s) estáticas = 30 bytes Nr = CQL rows = 2000 Ccl = tamanho Cluster Columns 16 + 8 = 24 bytes Crk = colunas regulares (300 + 24) + (60 + 24) + (32768 + 24) = 33.200 bytes Nv = valores pré calculados = 6001 Resolvendo: 16 + 30 + (2000 * 33.200) + (8 * 6001) = 66.448.054 bytes = ~66,4 MB
  • 36. pen4education Checagem dos valores limites O que acontece se os valores não forem respeitados?
  • 38. pen4education Solução: Chaves de partição usar chaves de partição para diminuir o tamanho de uma linha. Ex: particionar dados por dia/horário CREATE TABLE temperature ( wstation_id int, day int, hour int, event_time timestamp, temp text, PRIMARY KEY ((wstation_id, day, hour), event_time) );
  • 39. pen4education 22C 19C 22C 1:08:10 2016-07-08:10:15 2016-07-08:10:12 2016-07-08:10:05 2016-07-08:10:00 21C 22C 19C 22C 1:08:09 2016-07-08:09:15 2016-07-08:09:12 2016-07-08:09:05 2016-07-08:09:00 21C 22C 19C 22C 1:08:08 2016-07-08:08:15 2016-07-08:08:12 2016-07-08:08:05 2016-07-08:08:00 21C PRIMARY KEY ((wstation_id, day, hour), event_time) Partition Key Cluster Columns 11C 12C 15C 1:07:23 2016-07-07:23:15 2016-07-07:23:12 2016-07-07:23:05 2016-07-08:23:00 18C 20C 19C 18C 1:07:22 2016-07-07:23:15 2016-07-07:23:12 2016-07-07:23:05 2016-07-08:23:00 17C ...
  • 40. pen4education Caso de uso Criação de Tabela de índice CREATE TABLE idx_config ( prod_id int, channel_id varchar, subs_key varchar, last_charge timestamp, status_id int, origin_id int, enabled boolean, PRIMARY KEY ((prod_id, channel_id), subs_key) ); Partition Key: Agrupamento de assinaturas de usuários por produto e canal de conteúdo Problema: milhões de assinaturas em um mesmo canal de conteúdo de um mesmo produto
  • 41. pen4education Apache Cassandra v1.2 ERROR [CompactionExecutor:6523] 2015-10-09 12:33:23,551 CassandraDaemon.java (line 191) Exception in thread Thread[CompactionExecutor:6523,1,main] java.lang.AssertionError: incorrect row data size3758096384 written to /movile/cassandra-data/SBSPlatform/idx_config/SBSPlatform-idx_config-tmp-ic-715-Data.db; at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:162) at org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java: 162) at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable. java:48) at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) +3GB em 1 linha
  • 42. pen4education Solução: Buckets Chave de Partição Artificial CREATE TABLE idx_config ( prod_id int, channel_id varchar, subs_key varchar, last_charge timestamp, status_id int, origin_id int, bucket int, enabled boolean, PRIMARY KEY ((prod_id, channel_id, bucket), subs_key) ); Maior particionamento dos dados, menos colunas por linha!
  • 43. pen4education Tamanho das Linhas $ ./nodetool cfstats <keyspace> Column Family: idx_config SSTable count: 3 Space used (live): 2458544492 Space used (total): 2509310274 Number of Keys (estimate): 64896 Memtable Data Size: 125129646 Memtable Switch Count: 32931 Read Count: 1197063 Write Latency: 0,044 ms. Bloom Filter False Positives: 38 Bloom Filter Space Used: 162928 Compacted row minimum size: 180 Compacted row maximum size: 122381140 (~122MB) Compacted row mean size: 111813
  • 44. pen4education Considerações Finais Faça validação do Modelo de forma Iterativa • verifique todas consultas (Access Patterns) • verifique o comportamento do modelo com a carga esperada • dobre a carga de dados sobre o modelo, verifique o tamanho das partições (Bucket) • simule ambiente altamente concorrente
  • 45. pen4education Considerações Finais • não execute as validações em ambiente local, crie um Cluster de máquinas para verificar o comportamento em rede • apache-cassandra/tools/bin/cassandra-stress • simule operações de manutenção (clean up, repair, compaction) • sempre verifique os limites físicos e lógicos da partições
  • 46. pen4education Links Cassandra Internals Job http://bit.ly/cassandra-internals-job Cassandra Tester Job http://bit.ly/cassandra-tester-jobs Data Modeling Training http://bit.ly/cassandra-data-model-training
  • 47. pen4education MUITO OBRIGADO! eitikimura eiti-kimura-movile eiti.kimura@movile.com talentos@movile.com