Apache Cassandra — NoSQL dla dużej skali: instalacja i konfiguracja
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Bazy danych
Apache Cassandra to rozproszona baza NoSQL stworzona przez Facebooka (2008), od 2010 roku projekt Apache. Projektowana pod kątem ogromnej skali zapisu i odczytu: Instagram używał jej do przechowywania miliardów zdjęć i danych aktywności, Netflix obsługuje przez nią biliony operacji dziennie. Nie ma single point of failure — każdy węzeł pełni tę samą rolę (architektura peer-to-peer). Dane są replikowane między węzłami z konfigurowalnym replication factor. Ten artykuł przeprowadzi Cię przez instalację, konfigurację i podstawy CQL (Cassandra Query Language).
Instalacja — Java i Cassandra przez apt
# Cassandra wymaga Java 11 lub 17 sudo apt update sudo apt install -y openjdk-17-jdk # Weryfikacja java -version # openjdk version "17.0.x" # Dodaj repozytorium Apache Cassandra echo "deb https://debian.cassandra.apache.org 41x main" | \ sudo tee /etc/apt/sources.list.d/cassandra.sources.list curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - sudo apt update && sudo apt install -y cassandra # Sprawdz status sudo systemctl status cassandra nodetool status # UN = Up Normal (wlaczony i normalny) # DC = DataCenter, Rack = rack (topologia fizyczna) # Logowanie Cassandra sudo journalctl -u cassandra -f # lub: tail -f /var/log/cassandra/system.log # Polaczenie z baza cqlsh # lub z autentykacja: # cqlsh -u cassandra -p cassandra
cassandra.yaml — kluczowe ustawienia
# /etc/cassandra/cassandra.yaml - najwazniejsze parametry
cluster_name: 'MyCluster' # Unikalna nazwa klastra
# Dane kontaktowe - lista seed nodes
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "10.0.0.1,10.0.0.2" # Min 1 seed per DC
listen_address: 10.0.0.1 # IP tego wezla (nie 0.0.0.0!)
rpc_address: 0.0.0.0 # Adres dla klientow CQL
# Katalogi danych
data_file_directories:
- /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog # SSD!
hints_directory: /var/lib/cassandra/hints
saved_caches_directory: /var/lib/cassandra/saved_caches
# Pamiéc (JVM)
# Edytuj /etc/cassandra/jvm.options:
# -Xms4G # Min heap - minimum polowa RAM
# -Xmx4G # Max heap - maksimum polowa RAM (reszta = OS cache)
# Szyfrowanie (producja)
authenticator: PasswordAuthenticator # domyslnie: AllowAllAuthenticator
authorizer: CassandraAuthorizer
# Topologia
endpoint_snitch: GossipingPropertyFileSnitch # Dla multi-DC
# Edytuj /etc/cassandra/cassandra-rackdc.properties:
# dc=datacenter1
# rack=rack1 CQL — tworzenie keyspace i tabel
-- Keyspace to odpowiednik bazy danych
-- replication_factor: ile kopii danych na ilu wezlach
CREATE KEYSPACE myapp
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3 -- 3 kopie w datacenter1
}
AND durable_writes = true;
USE myapp;
-- Tabela: dane aktywnosci uzytkownikow (time series pattern)
-- KLUCZOWE: partition key + clustering key = PRIMARY KEY
CREATE TABLE user_events (
user_id UUID,
event_time TIMESTAMP,
event_type TEXT,
page_url TEXT,
data MAP<TEXT, TEXT>, -- Mapa klucz-wartosc
tags SET<TEXT>, -- Zbior
PRIMARY KEY ((user_id), event_time) -- user_id = partition key
) WITH CLUSTERING ORDER BY (event_time DESC) -- Najnowsze pierwsze
AND gc_grace_seconds = 864000
AND compaction = {
'class': 'TimeWindowCompactionStrategy',
'compaction_window_unit': 'DAYS',
'compaction_window_size': 1
};
-- INSERT - zawsze z TTL dla time series!
INSERT INTO user_events (user_id, event_time, event_type, page_url)
VALUES (uuid(), toTimestamp(now()), 'pageview', '/pricing')
USING TTL 2592000; -- 30 dni TTL
-- SELECT MUSI zawierac partition key!
SELECT * FROM user_events
WHERE user_id = 550e8400-e29b-41d4-a716-446655440000
ORDER BY event_time DESC
LIMIT 10;
-- Nie mozna robic full-table scan bez ALLOW FILTERING
-- (wolne i niezalecane w produkcji)
SELECT * FROM user_events WHERE event_type = 'click' ALLOW FILTERING; Replication Factor i Consistency Level
Cassandra pozwala konfigurować "ile węzłów musi potwierdzić zapis/odczyt". To tzw. Consistency Level (CL). Im wyższy CL, tym silniejsza spójność, ale większy koszt wydajności. Kluczowa formuła: CL_write + CL_read > RF zapewnia spójność.
| Consistency Level | Ile węzłów odpowiada | Kiedy używać |
|---|---|---|
| ONE | 1 węzeł | IoT logi, gdzie drobna utrata danych OK |
| QUORUM | RF/2 + 1 węzłów | Rekomendowane dla danych biznesowych |
| ALL | Wszystkie węzły | Krytyczne dane, ale brak tolerancji awarii |
| LOCAL_QUORUM | Quorum w lokalnym DC | Multi-datacenter, zapis lokalny |
| EACH_QUORUM | Quorum w każdym DC | Silna spójność global |
Cassandra vs ScyllaDB
| Cecha | Apache Cassandra | ScyllaDB |
|---|---|---|
| Język implementacji | Java | C++ |
| Wydajność (ops/node) | Bazowa | 5-10x szybszy |
| RAM overhead | Duży (JVM heap) | Mniejszy (bez JVM) |
| GC pauses | Tak (Java GC) | Brak |
| CQL kompatybilność | Native | Pełna (drop-in) |
| Licencja | Apache 2.0 | AGPL (CE) / Enterprise |
| Dojrzałość ekosystemu | Bardzo wysoka | Wysoka i rosnąca |