13 KiB
13 KiB
| theme | title | info | class | transition | mdc | fonts | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| seriph | Ringstats – Zwischenpräsentation | ## Ringstats Zwischenstandspräsentation – Moderne Datenbanken Justin Rost · Michelle Reichelt · Yasin Ergün | text-center | slide-left | true |
|
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::
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::
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
weapon {
id: 213,
item_type: {
id: 1,
name: "Dolch"
},
item_effect: {
id: 4,
name: "Stärke",
value: 5
},
weight: 2,
damage: 70
}
enemy {
id: 1,
region_id: 1,
name: "Tree_Sentinel",
health: 30000,
level: 20,
damage: 70,
items: [ 5, 10 ]
}
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