Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

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

Najczęstsze pytania

Do czego nadaje się Apache Cassandra i kiedy NIE używać? +
Cassandra jest idealna dla: write-heavy workloads (bardzo szybkie zapisywanie dużych ilości danych — np. IoT sensors, metryki, logi, timeseries, activity tracking), systemów gdzie read/write działa po znanych kluczach (wysoce selektywne zapytania po partition key), aplikacji globalnych wymagających multi-datacenter replikacji bez single master, dużej skali (petabajty danych, tysiące węzłów). Cassandra NIE nadaje się dla: ad-hoc zapytań z wieloma filtrami (brak elastycznych JOIN-ów), transakcji ACID na wielu rekordach (ma lightweight transactions ale są wolne), małych projektów (overhead konfiguracji jest duży), aplikacji wymagających częstych UPDATE/DELETE (Cassandra używa append-only log — stare wersje są "tombstone" i czyszczone przez compaction). Używają jej Netflix, Apple, Instagram, Discord.
Co to jest consistent hashing i vnodes w Cassandra? +
Cassandra używa consistent hashing do rozdzielania danych między węzły. Partition key każdego wiersza jest haszowany na token (liczba na "pierścieniu" tokenów). Każdy węzeł odpowiada za określony zakres tokenów. Vnodes (virtual nodes) to rozwiązanie problemu nierównomiernego rozłożenia: zamiast jednego zakresu tokenów per węzeł, każdy węzeł ma wiele małych zakresów (domyślnie 256 tokenów). Dzięki temu dodawanie nowego węzła i rebalancing danych jest płynniejszy — nowy węzeł "kradnie" małe zakresy z wielu istniejących węzłów zamiast jednego dużego. W praktyce: vnodes są domyślnie włączone i nie trzeba ich ręcznie zarządzać, ale warto rozumieć dlaczego "wyglądają" jak wiele węzłów logicznych w nodetool ring.
Czym różni się Cassandra od ScyllaDB? +
ScyllaDB to reimplementacja Cassandra w C++ (zamiast Java). Kluczowe różnice: ScyllaDB jest szybsza — benchmarki pokazują 5-10x więcej operacji per node, bo nie ma Java GC pauses i lepiej wykorzystuje CPU per-core architekturą shard-per-core. ScyllaDB zużywa mniej RAM (brak JVM overhead). ScyllaDB jest w pełni kompatybilna z protokołem Cassandra i CQL — sterowniki działają bez zmian. Cassandra jest bardziej dojrzała, ma większą społeczność i szerszy ekosystem narzędzi. ScyllaDB jest lepszym wyborem dla nowych projektów jeśli zależy Ci na wydajności. Cassandra jeśli masz istniejącą infrastrukturę Cassandra lub potrzebujesz zaawansowanych funkcji (np. SAI — Storage-Attached Indexes w Cassandra 4.x).

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.