# 🐘 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ů: ```text 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 ```text 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 ```text 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](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*