5.6 KiB
🐘 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