# RocksDB Storage – Layout & Betrieb **Stand:** 5. Dezember 2025 **Version:** 1.0.0 **Kategorie:** Storage --- Dieser Leitfaden beschreibt das physische Storage-Verhalten der ThemisDB-Engine auf Basis von RocksDB: Schlüsselpräfixe, WAL, Snapshots und Compaction. ## Schlüsselräume & Präfixe Themis nutzt ein Präfix-Schema zur logischen Trennung von Datenbereichen: - Entities (Primärdaten): `entity::` → Blob (BaseEntity-Serialisierung) - Secondary Index: `idx:
:::` - Range Index: `ridx:
:::` - Sparse/TTL/Fulltext: `sidx:`/`ttlidx:`/`ftidx:` entsprechend der Funktion - Graph Adjazenz: `graph:out::` → ``, `graph:in::` → `` - Vector Index (Metadaten/Mapping): `vector:
:` → Vektorinfo (Embedding out-of-store in Index-Struktur) - Changefeed (Audit): `changefeed:` → Event JSON - Time-Series (TSStore): `ts:::` → Wert(e) Siehe auch: `docs/indexes.md`, `docs/temporal_time_range_queries.md`, `docs/change_data_capture.md`, `docs/time_series.md`. ## Column Families (CF) - Standardbetrieb: Default Column Family (CF) - Optional (für große Workloads): Trennung in CFs (z. B. `cf_entities`, `cf_indexes`, `cf_graph`, `cf_changefeed`, `cf_ts`) kann LSM-Compactions separieren. - Hinweis: Aktuell verwendet Themis standardmäßig die Default CF; CF-Trennung ist als Betriebsoptimierung möglich und sollte konsistent in Engine-Config & Backups berücksichtigt werden. ## Write-Ahead Log (WAL) - WAL stellt Durability sicher und dient für Recovery nach Abstürzen. - Empfohlen: - `wal_bytes_per_sync` und `bytes_per_sync` passend zur Hardware - `max_total_wal_size` dimensionieren (Spitzen abfangen, aber Platte nicht vollschreiben) - Sync-Strategie nach Latenzanforderungen (`disableWAL=false`, fsync je nach Durability-Ziel) ## Snapshots & MVCC - Snapshots fixieren ein Sichtfenster für Reads (Snapshot-Isolation) - Transaktionen verwenden Snapshots, um Repeatable Reads zu ermöglichen - Long-running Snapshots erhöhen Read Amplification: Überwachung und Begrenzung empfehlenswert ## Compaction & Performance - Trennung heißer/cold Daten (optional via CF) kann Write Amplification reduzieren - Kompressions-Strategie (z. B. LZ4 für L0/L1, ZSTD für tiefere Ebenen) je nach Profil - Bloom Filter für Punktabfragen (Secondary Index) aktivieren - Prefix-Extractor gemäß Key-Schema (z. B. bis zum `:value:`-Teil bei `idx:`) beschleunigt Prefix-Scans ## Backups & Restore - RocksDB Backups (SST + MANIFEST + OPTIONS + ggf. WAL) regelmäßig erstellen - Konsistenz über alle CFs sicherstellen (falls eingesetzt) - Vor Restore: Version/Options-Kompatibilität prüfen ## Monitoring - Wichtige Kennzahlen: L0 File Count, Compaction Pending, Stall Time, WAL Größe, Read-/Write-Amp - Prometheus-Export aus Themis (`/metrics`) ergänzen um Storage-Kennzahlen (Roadmap) ## Troubleshooting (Kurz) - Hohe Latenzen bei Scans: Prefix-Extractor/Bloom prüfen; CF-Trennung für Indizes erwägen - Speicherverbrauch stark: Kompression/Block-Cache-Tuning; Retention (Changefeed/TS) aktivieren - Lange Snapshots: Transaktionslaufzeiten begrenzen; `cleanupOldTransactions` nutzen Weiterlesen: - `docs/mvcc_design.md` - `docs/transactions.md` - RocksDB Tuning Guides (Block Cache, MemTables, Compaction)