Files
knowledge-base/CASSANDRA.md
2026-06-03 22:50:00 +02:00

5.6 KiB
Raw Blame History

🐘 Cassandra & ScyllaDB

Přehled

Apache Cassandra je distribuovaná wide-column NoSQL databáze navržená pro vysokou dostupnost a lineární škálovatelnost bez single point of failure. Inspirována Amazon Dynamo paperem (2007) a Google Bigtable. ScyllaDB je C++ reimplementace kompatibilní s Cassandra protokolem, s drasticky nižší latencí a vyšší propustností.

Architektura (Dynamo-inspired)

Consistent hashing

Data rozdělena na hash ringu, každý node zodpovídá za rozsah tokenů:

   0 ─── node A ─── hash(key1)
         │
   90 ─── node B ─── hash(key2)
         │
  180 ─── node C ─── hash(key3)
         │
  270 ─── node D ─── hash(key4)
  • Přidání/odebrání nodu ovlivní jen K/N klíčů (díky virtual nodes)
  • Virtual nodes (vnodes) — každý fyzický node má ~100-200 tokenů na ringu (rovnoměrnější distribuce)

Quorum (N, R, W)

  • N = replication factor (typicky 3)
  • R = read quorum (typicky 2)
  • W = write quorum (typicky 2)
  • Podmínka: R + W > N (pro strong-ish konzistenci)
  • Sloppy quorum — při nedostupnosti nodu, data dočasně uložena na jiném
  • Hinted handoff — dočasný zápis s hintem, při obnově se data přenesou

Gossip protocol

Decentralizované šíření membership informací — každý node periodicky komunikuje s 1-3 náhodnými nodes. Žádný centrální bod selhání.

Vector clocks

Zachycení kauzality verzí objektu. Při konfliktu (partition merge) se vrací obě verze — aplikace merguje.

Merkle trees

Anti-entropy — strom hashů pro detekci divergence mezi replikami. Rychlá detekce, které rozsahy dat jsou rozdílné.

Write path

Client → Coordinator → [1. Write to commit log (disk)]
                       [2. Write to memtable (RAM)]
                       [3. Acknowledge client]
                       → [4. Flush memtable → SSTable (periodicky)]
                       → [5. Compaction (merge SSTables)]

Read path

Client → Coordinator → [1. Check bloom filter]
                       [2. Check row cache / key cache]
                       [3. Read from SSTable (disk)]
                       [4. Merge with memtable]
                       [5. Repair if stale (read repair)]

Cassandra vs ScyllaDB

Vlastnost Cassandra ScyllaDB
Jazyk Java (JVM) C++ (seastar framework)
Architektura Thread-per-connection Shared-nothing, CPU sharding
Latence 5-20 ms (typicky) 1-3 ms (typicky)
Propustnost Dobrá 5-10× vyšší na stejný HW
GC pauzy Ano (JVM) Ne (žádný GC)
NUMA OS-dependent Nativní NUMA aware
Workload Standardní High-throughput, real-time
Cena Open source Open source + Enterprise

Data model

  • Keyspace = namespace (analogie DB)
  • Table = definice sloupců (ne schema-less)
  • Partition key = hash klíč pro distribuci na ringu
  • Clustering columns = řazení v rámci partition
  • Primary key = Partition key + Clustering columns

Doporučení — v čem je Cassandra lepší

Oblast Cassandra Konkurence Proč Cassandra
Zápisová propustnost Lineární škálování, žádný master bottleneck PostgreSQL (master writes) Každý node zapisuje, žádný single point of failure
Dostupnost AP z CAP — vždy zapisovatelná MongoDB (CP, primary down = read-only) "Always-writeable" filozofie
Multi-DC Nativní, režim per DC CockroachDB (komplexní) Jednoduchá konfigurace, latency-tolerant
Time-series Wide-row model, TTL, compaction InfluxDB (specializovaná) Lze kombinovat s dalšími workloady
IoT / sensor data Lineární škálování, žádný master MongoDB (sharding komplexní) Předvídatelný výkon při růstu
Geografická distribuce Nativní multi-DC, hinted handoff Spanner (vendor lock-in) Open source, žádná závislost

Kdy použít Cassandra / ScyllaDB

  • IoT / sensor data ingest — miliony zápisů/s, žádné ztráty
  • Time-series v masivním měřítku — metriky, logy, event data
  • Uživatelské activity history — zápisově těžké workloady
  • Multi-DC aplikace — data dostupná v každé lokalitě
  • Doporučovací systémy — wide-row model pro "co viděl uživatel"
  • Message / event store — high-throughput append s TTL

Kdy použít něco jiného

  • Relace, JOINy, transakce → PostgreSQL (Cassandra nemá JOINy, omezené transakce)
  • Full-text search → Elasticsearch
  • Agregace / OLAP → ClickHouse (Cassandra není analytická DB)
  • Malá data (< 100 GB) → PostgreSQL (Cassandra overhead se nevyplatí)
  • Časté ready podle vedlejších klíčů → DynamoDB (SADA indexy) — Cassandra má omezené secondary indexy

ScyllaDB specific

ScyllaDB je výhodná když:

  • Potřebujete 5-10× vyšší propustnost na stejném HW
  • Máte latency-sensitive workload (real-time scoring, ad-tech)
  • Chcete eliminovat JVM/GC problémy
  • Potřebujete předvídatelný výkon (P99 < 5 ms)

Zdroje

Odkazy, knihy a standardy: sources/databases/sources.md

Doporučená literatura

Paper / Kniha Autoři Popis
Dynamo: Amazon's Highly Available Key-value Store (SOSP 2007) DeCandia et al. Zakladatelský paper pro Cassandra architekturu
Cassandra: The Definitive Guide (3rd ed.) E. Hewitt Komplexní průvodce nasazením a provozem

Poslední revize: 2026-06-03