🎯 ATIVIDADE 09 — ESCALA PLANETÁRIA
Bem-vindo à nona semana (4 aulas) do curso de Banco de Dados. Após explorarmos o MongoDB, vamos subir o nível de escala. Hoje vamos conhecer o Apache Cassandra, o banco de dados utilizado por gigantes como Netflix e Uber para lidar com bilhões de transações por segundo. 🛡️🧩
🎯 Objetivo da Aula
Ao final desta semana, você será capaz de:
- Entender a arquitetura de Colunas de Larga Escala (Wide Column Store).
- Criar e gerenciar Keyspaces e Tabelas no Cassandra.
- Utilizar a linguagem CQL (Cassandra Query Language).
- Compreender a importância da Chave de Partição para a escalabilidade.
🏢 O Cenário Prático (Seu Desafio)
A TecProExpress instalou sensores IoT em toda a sua frota de caminhões. Cada caminhão envia sua posição GPS, velocidade e temperatura da carga a cada 5 segundos. Com milhares de veículos, o volume de dados é gigantesco.
Seu desafio é configurar um ambiente no Cassandra para receber esse fluxo de dados, garantindo que as informações sejam gravadas de forma ultra-rápida e nunca sejam perdidas.
🧠 Fundamentos: A Teoria Traduzida
O Cassandra não organiza dados em uma única máquina; ele os espalha por um Anel (Cluster) de servidores.
1. O Keyspace (O Condomínio)
No SQL temos "Databases". No Cassandra, temos Keyspaces. É aqui que definimos como os dados serão replicados entre as máquinas.
2. A Chave de Partição (O Endereço)
Imagine um grande armazém. Para achar uma caixa rápido, você precisa saber o número da prateleira. No Cassandra, a Partition Key decide em qual servidor do mundo o dado será guardado.
graph TD
subgraph Cluster ["Anel Cassandra"]
N1[Nó 1] --- N2[Nó 2]
N2 --- N3[Nó 3]
N3 --- N1
end
Data[Dado de GPS] -->|Hash da Chave| N2
style Cluster fill:#f3e5f5,stroke:#7b1fa2
📖 Exemplo Guiado: Criando sua Infraestrutura
Veja como o CQL é amigável e parecido com o SQL tradicional.
1. Preparando o Terreno (Keyspace)
-- Criando o Keyspace de Logística
CREATE KEYSPACE tecpro_logistica
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
USE tecpro_logistica;
2. Criando a Tabela de Sensores (DDL)
CREATE TABLE telemetria (
veiculo_id INT,
data_hora TIMESTAMP,
latitude DECIMAL,
longitude DECIMAL,
velocidade FLOAT,
PRIMARY KEY (veiculo_id, data_hora)
);
🔍 Detalhamento do Código:
- SimpleStrategy: Estratégia de replicação para ambientes de teste (um único datacenter).
- PRIMARY KEY (veiculo_id, data_hora):
veiculo_id: Chave de Partição (espalha os caminhões pelo cluster).data_hora: Chave de Agrupamento (ordena os logs de cada caminhão por tempo).
🛠️ Prática Obrigatória 1: Setup e Carga
Cenário: Monitoramento de Frota na TecProExpress.
- Acesse seu ambiente Cassandra (via Docker ou local).
- Crie o Keyspace
tecpro_iot. - Crie a tabela
status_caminhaopara armazenarid,placa,temperaturaetimestamp.
🚀 Script de Seed (CQL)
INSERT INTO status_caminhao (id, placa, temperatura, timestamp)
VALUES (101, 'ABC-1234', 5.5, toTimestamp(now()));
INSERT INTO status_caminhao (id, placa, temperatura, timestamp)
VALUES (101, 'ABC-1234', 5.2, toTimestamp(now()));
🛠️ Prática Obrigatória 2: Consulta de Alta Performance
Cenário: O centro de controle quer ver os logs de um veículo específico.
- Escreva uma consulta para listar todos os registros do caminhão com
id = 101. - Tente filtrar por temperatura acima de 5 graus sem usar o ID do veículo. O que acontece?
📤 Instruções de Entrega (Microsoft Teams)
Após testar suas tabelas e consultas no Cassandra (via cqlsh):
- Salve o script contendo a criação do Keyspace, da tabela com a Primary Key adequada (Chave de Partição + Chave de Agrupamento) e as consultas de teste em um arquivo com a extensão
.cqlou.sqlcontendo comandos CQL. - Adicione comentários no código explicando por que a escolha da Partition Key (
veiculo_id/id) é vital para a distribuição horizontal de dados do cluster. - Envie o arquivo (
Atividade_09_SeuNome.cql) na tarefa correspondente no Microsoft Teams.
💡 Checkpoint de Lógica
[!IMPORTANT] Reflexão Profissional: No Cassandra, nós desenhamos as tabelas com base nas perguntas que vamos fazer (Query-Driven Design). Se você tentar filtrar por algo que não faz parte da chave primária, o Cassandra pode recusar a consulta para não perder performance. 🧠🛡️
🔥 Desafio de Fixação (Opcional)
Nível: Arquiteto de Sistemas 🏆
O que é o Replication Factor (RF)? Se você configurar RF: 3 em um cluster de 5 máquinas, o que acontece se duas máquinas pegarem fogo ao mesmo tempo?
🔑 Gabarito de Código/Fórmulas Completo
Prática 1 (Criação):
CREATE TABLE status_caminhao (
id INT,
placa TEXT,
temperatura FLOAT,
data_leitura TIMESTAMP,
PRIMARY KEY (id, data_leitura)
) WITH CLUSTERING ORDER BY (data_leitura DESC);
Prática 2 (Consulta):
SELECT * FROM status_caminhao WHERE id = 101;
🔍 Explicação do Gabarito:
- WITH CLUSTERING ORDER BY: Faz com que os logs mais recentes apareçam no topo da lista automaticamente, sem precisar de um
ORDER BYlento na hora da consulta. - TEXT: No Cassandra, usamos
TEXTem vez deVARCHARpara a maioria das strings.