--- theme: seriph title: Ringstats – Zwischenpräsentation info: | ## Ringstats Zwischenstandspräsentation – Moderne Datenbanken Justin Rost · Michelle Reichelt · Yasin Ergün class: text-center transition: slide-left mdc: true fonts: sans: Inter mono: Fira Code --- # Ringstats Eine Live Datenbank für Elden Ring
Justin Rost · Michelle Reichelt · Yasin Ergün
Zwischenpräsentation · Moderne Datenbanken · 08.06.2026
--- layout: center class: text-center --- # Inhalt
🎯
Szenario
🗺️
ER-Modell
🧩
Drei Modelle
⚖️
Vergleich
Auswahl
--- layout: center class: text-center --- # Die Idee
Eine Schnittstelle zwischen Spiel und Datenbank
🎮
Spiel
liest Position, Leben, Ausrüstung live aus
🗄️
Datenbank
speichert und liefert passende Infos
🌐
Browser
gleiche Daten parallel abrufbar
--- layout: default --- # Kernidee: Hilfe für Spieler
🎮
Im-Spiel Anzeige
zeigt z.B. Bossangriffe live und Checkliste
🖥️
Browser App
Generelle Informationen und Analysen
Es muss extrem schnell gehen, ohne spürbare Verzögerung.
--- layout: default --- # Anwendungsfälle
⚔️
Bosskampf
Fenster mit Resistenzen und Angriffe
📦
Live-Standort
Checkliste, Truhen und Objekte in der Nähe
🌐
Website
Builds und Statistiken
--- layout: default --- # Das ER-Modell
--- layout: center class: text-center --- # Drei NoSQL-Modelle
Key-Value
Redis
Alles über Schlüssel
Dokument
MongoDB
Alles im Dokument
Graph
Neo4j
Alles über Kanten
Wir bilden die gleichen Daten in allen drei ab.
--- layout: two-cols layoutClass: gap-10 --- # Key-Value mit Redis
Keys sind Strings, eindeutig pro Objekt. Aufbau: Entität : ID
::right::
```text weapon:213 player:1 region:1:items enemy:1 ```
--- layout: default --- # Key-Value: Schlüsselaufbau
| Datentyp | Key-Struktur | Attribute | |----------|--------------|-----------| | HMAP | `player:{id}` | id, name, health, level, region_id | | SET | `player:{id}:armor` | item_id | | HMAP | `enemy:{id}` | id, name, health, damage |
Über den Key direkt ans Objekt.
--- layout: two-cols layoutClass: gap-10 --- # Dokument mit MongoDB
Zusammengehöriges in einem Dokument. Jede Entität eine Collection. Ausrüstung nur als ids.
::right::
```js player { id: 1, name: "Jonas", health: 100, stamina: 100, level: 1, region_id: 1, weapon: [ 12 ], shield: 30, armor: [ 41, 42 ], talisman: [ 7 ] } ```
--- layout: default --- # Dokument: Beispiele
```js weapon { id: 213, item_type: { id: 1, name: "Dolch" }, item_effect: { id: 4, name: "Stärke", value: 5 }, weight: 2, damage: 70 } ``` ```js enemy { id: 1, region_id: 1, name: "Tree_Sentinel", health: 30000, level: 20, damage: 70, items: [ 5, 10 ] } ``` ```js region { id: 1, name: "Limgrave", items: [ 12, 19, 248 ], enemies: [ 1, 245 ] } ```
Weapon trägt item_type und item_effect direkt. Sonst meist nur ids.
--- layout: two-cols layoutClass: gap-10 --- # Graph mit Neo4j
Fokus auf den Beziehungen. Jede Entität ein Knoten mit eigenen Werten.
::right::
| Knoten | Attribute | |--------|-----------| | Player | id, name, health, level | | Weapon | id, weight, damage | | Enemy | id, name, health, damage |
--- layout: default --- # Graph: Kanten
| Von | Kante | Nach | |-----|-------|------| | Player | has_equipped | Weapon | | Player | is_in | Region | | Region | has | Enemy | | Enemy | drops | Item |
Kanten wie im ER-Modell.
--- layout: default --- # Vergleich: Key-Value
Vorteil
Extrem schnell, direkter Zugriff über Key. Ideal für Live Daten.
Nachteil
Komplexe Abfragen müssen wir selbst zusammenbauen.
--- layout: default --- # Vergleich: Dokument
Vorteil
Leserlich und einfach zu modellieren.
Nachteil
Bei uns meist nur ids. Stärke kaum genutzt.
--- layout: default --- # Vergleich: Graph
Vorteil
Beziehungen sehr leicht abfragbar, ohne Umwege.
Nachteil
Für uns überdimensioniert. Wir brauchen vor allem Tempo.
--- layout: default --- # Gegenüberstellung
| | Key-Value | Dokument | Graph | |---|:---:|:---:|:---:| | Schreiben und Lesen | ✅ sehr schnell | 🟡 gut | 🟡 mehr Aufwand | | Direkter Objektzugriff | ✅ über Key | ✅ über Collection | 🟡 über Knoten | | Komplexe Abfragen | 🔴 schwierig | 🟡 mittel | ✅ stark | | Passt zu Live Daten | ✅ ideal | 🟡 ok | 🔴 überdimensioniert |
Unsere Daten sind flach und ständig in Bewegung.
--- layout: default --- # Was uns wichtig ist
| | Redis | MongoDB | Neo4j | |---|:---:|:---:|:---:| | Performanz | 2 | 1 | 1 | | Streaming | 2 | 0 | 0 | | Latenz | 2 | 0 | 1 | | **Summe** | **30** | **15** | **13** |
Redis gewinnt klar.
--- layout: center class: text-center --- # Fazit
Wir wählen Key-Value mit Redis
Geschwindigkeit
Live schreiben und lesen.
Direkter Zugriff
Über den Key sofort ans Objekt.
Passende Größe
Flache Daten, keine tiefe Verschachtelung.
--- layout: center class: text-center --- # Danke
Nächste Schritte: Datenbank auf dem Server aufsetzen und Schema umsetzen
Fragen?
Justin Rost · Michelle Reichelt · Yasin Ergün