Delete CASSANDRA.md
This commit is contained in:
135
CASSANDRA.md
135
CASSANDRA.md
@@ -1,135 +0,0 @@
|
|||||||
# 🐘 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*
|
|
||||||
Reference in New Issue
Block a user