Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🎯 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.

  1. Acesse seu ambiente Cassandra (via Docker ou local).
  2. Crie o Keyspace tecpro_iot.
  3. Crie a tabela status_caminhao para armazenar id, placa, temperatura e timestamp.

🚀 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.

  1. Escreva uma consulta para listar todos os registros do caminhão com id = 101.
  2. 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):

  1. 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 .cql ou .sql contendo comandos CQL.
  2. 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.
  3. 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 BY lento na hora da consulta.
  • TEXT: No Cassandra, usamos TEXT em vez de VARCHAR para a maioria das strings.