feature: fertig
This commit is contained in:
parent
e3dad17446
commit
63c7bb0315
@ -25,23 +25,23 @@
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Übersicht der Schlüsselstrukturen in Redis}}{4}{table.1}\protected@file@percent }
|
||||
\BKM@entry{id=7,dest={73756273656374696F6E2E322E33},srcline={188}}{5C3337365C3337375C303030445C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Dokumentenorientierte Modellierung}{5}{subsection.2.3}\protected@file@percent }
|
||||
\BKM@entry{id=8,dest={73756273656374696F6E2E322E34},srcline={262}}{5C3337365C3337375C303030475C303030725C303030615C303030705C303030685C3030302D5C303030445C303030615C303030745C303030655C3030306E5C303030625C303030615C3030306E5C3030306B5C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=8,dest={73756273656374696F6E2E322E34},srcline={263}}{5C3337365C3337375C303030475C303030725C303030615C303030705C303030685C3030302D5C303030445C303030615C303030745C303030655C3030306E5C303030625C303030615C3030306E5C3030306B5C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Graph-Datenbank-Modellierung}{7}{subsection.2.4}\protected@file@percent }
|
||||
\@writefile{tdo}{\contentsline {todo}{komplett pruefen ob wir das richtig verstanden haben}{7}{section*.1}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid1}{4894785}{49725591}
|
||||
\pgfsyspdfmark {pgfid4}{36720195}{49742517}
|
||||
\pgfsyspdfmark {pgfid5}{38335406}{49471701}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Übersicht der Knoten in Neo4j}}{7}{table.2}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Übersicht der Kanten in Neo4j}}{7}{table.3}\protected@file@percent }
|
||||
\BKM@entry{id=9,dest={73656374696F6E2E33},srcline={313}}{5C3337365C3337375C303030565C303030655C303030725C303030675C3030306C5C303030655C303030695C303030635C303030685C3030305C3034305C303030645C303030655C303030725C3030305C3034305C303030445C303030615C303030745C303030655C3030306E5C3030306D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=10,dest={73756273656374696F6E2E332E31},srcline={314}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C3030304B5C303030655C303030795C3030302D5C303030565C303030615C3030306C5C303030755C303030655C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=11,dest={73756273656374696F6E2E332E32},srcline={320}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030645C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030306E5C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=12,dest={73756273656374696F6E2E332E33},srcline={326}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030475C303030725C303030615C303030705C303030685C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=9,dest={73656374696F6E2E33},srcline={312}}{5C3337365C3337375C303030565C303030655C303030725C303030675C3030306C5C303030655C303030695C303030635C303030685C3030305C3034305C303030645C303030655C303030725C3030305C3034305C303030445C303030615C303030745C303030655C3030306E5C3030306D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=10,dest={73756273656374696F6E2E332E31},srcline={313}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C3030304B5C303030655C303030795C3030302D5C303030565C303030615C3030306C5C303030755C303030655C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=11,dest={73756273656374696F6E2E332E32},srcline={319}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030645C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030306E5C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=12,dest={73756273656374696F6E2E332E33},srcline={325}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030475C303030725C303030615C303030705C303030685C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Vergleich der Datenmodellierung}{8}{section.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Vor- und Nachteile des Key-Value-Modells}{8}{subsection.3.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Vor- und Nachteile des dokumentenorientierten Modells}{8}{subsection.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Vor- und Nachteile des Graph-Modells}{8}{subsection.3.3}\protected@file@percent }
|
||||
\BKM@entry{id=13,dest={73656374696F6E2E34},srcline={341}}{5C3337365C3337375C303030465C303030615C3030307A5C303030695C30303074}
|
||||
\@writefile{tdo}{\contentsline {todo}{Wir koennten Regionen Traversierung Pathfinding einbauen}{8}{section*.1}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid1}{19562756}{23935922}
|
||||
\@writefile{tdo}{\contentsline {todo}{Wir haben keine Beziehungen, die ueber mehrere Knoten hinweg gehen. Keine komlexen beziehungen wo der graph einen hohen nutzen mit sich bringt}{8}{section*.2}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid2}{19562756}{18172368}
|
||||
\BKM@entry{id=13,dest={73656374696F6E2E34},srcline={340}}{5C3337365C3337375C303030465C303030615C3030307A5C303030695C30303074}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Fazit}{9}{section.4}\protected@file@percent }
|
||||
\global\@namedef{scr@dte@section@lastmaxnumwidth}{12.14694pt}
|
||||
\global\@namedef{scr@dte@subsection@lastmaxnumwidth}{19.70898pt}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# Fdb version 4
|
||||
["pdflatex"] 1780228396.12041 "/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" "Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1780228397.43117 0
|
||||
"/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" 1780228396.05977 16384 31f8769ea8848522618cb15632898304 ""
|
||||
["pdflatex"] 1780313071.59521 "/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" "Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1780313072.62514 0
|
||||
"/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" 1780313071.55337 16584 03bd9bb6b9242fada2b5fd161766d7ed ""
|
||||
"/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc" 1775415801 2971 def0b6c1f0b107b3b936def894055589 ""
|
||||
"/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1775415801 3524 cb3e574dea2d1052e39280babc910dc8 ""
|
||||
"/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1200.tfm" 1775415801 3584 402da0b29eafbad07963b1224b222f18 ""
|
||||
@ -162,9 +162,9 @@
|
||||
"/usr/share/texmf-dist/web2c/texmf.cnf" 1775415801 43569 fd570f2fa160877d211e859f687312ba ""
|
||||
"/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1777228096 5385779 47c0c393a77fd4a098bacfd57d66b88a ""
|
||||
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1778762763 3734533 c370cc050c4a9823a1fe1ab265afc57b ""
|
||||
"Ringstats_Dokumentation.aux" 1780228397.3808 8342 614fe975c96718f7f7d764724aa87b20 "pdflatex"
|
||||
"Ringstats_Dokumentation.tex" 1780228396.05977 16384 31f8769ea8848522618cb15632898304 ""
|
||||
"Ringstats_Dokumentation.toc" 1780228397.3818 1305 1401ae3dd1fbee665ef3e10a49daf4b1 "pdflatex"
|
||||
"Ringstats_Dokumentation.aux" 1780313072.58542 8525 dc2f45dff6b0575fd760f48e262e0d7d "pdflatex"
|
||||
"Ringstats_Dokumentation.tex" 1780313071.55337 16584 03bd9bb6b9242fada2b5fd161766d7ed ""
|
||||
"Ringstats_Dokumentation.toc" 1780313072.58642 1305 1401ae3dd1fbee665ef3e10a49daf4b1 "pdflatex"
|
||||
"assets/er-modell.png" 1778764597.46144 805989 0b7323ca4b38e6518c24fd9e5684655b ""
|
||||
(generated)
|
||||
"Ringstats_Dokumentation.aux"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.5.14) 31 MAY 2026 13:53
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.5.14) 1 JUN 2026 13:24
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@ -736,37 +736,37 @@ Overfull \hbox (52.12212pt too wide) in paragraph at lines 146--173
|
||||
[]
|
||||
|
||||
[4] [5] [6]
|
||||
Package hyperref Info: bookmark level for unknown todo defaults to 0 on input l
|
||||
ine 263.
|
||||
|
||||
Overfull \hbox (5.15562pt too wide) in paragraph at lines 263--263
|
||||
[][][]\T1/cmr/m/n/12 komplett
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (5.15562pt too wide) in paragraph at lines 263--263
|
||||
[][][]\T1/cmr/m/n/12 komplett
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (9.63942pt too wide) in paragraph at lines 297--309
|
||||
Overfull \hbox (9.63942pt too wide) in paragraph at lines 296--308
|
||||
[][]
|
||||
[]
|
||||
|
||||
[7] [8] [9] (./Ringstats_Dokumentation.aux)
|
||||
[7]
|
||||
Package hyperref Info: bookmark level for unknown todo defaults to 0 on input l
|
||||
ine 326.
|
||||
|
||||
Overfull \hbox (11.24713pt too wide) in paragraph at lines 326--326
|
||||
[]
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (11.24713pt too wide) in paragraph at lines 331--331
|
||||
[]
|
||||
[]
|
||||
|
||||
[8] [9] (./Ringstats_Dokumentation.aux)
|
||||
***********
|
||||
LaTeX2e <2025-11-01>
|
||||
L3 programming layer <2026-01-19>
|
||||
***********
|
||||
)
|
||||
Here is how much of TeX's memory you used:
|
||||
24579 strings out of 469462
|
||||
480525 string characters out of 5468614
|
||||
1010471 words of memory out of 5000000
|
||||
52862 multiletter control sequences out of 15000+600000
|
||||
24546 strings out of 469462
|
||||
479912 string characters out of 5468614
|
||||
1009471 words of memory out of 5000000
|
||||
52828 multiletter control sequences out of 15000+600000
|
||||
638939 words of font info for 63 fonts, out of 8000000 for 9000
|
||||
14 hyphenation exceptions out of 8191
|
||||
108i,9n,108p,11313b,971s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
108i,8n,108p,11313b,869s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1200.pfb></usr/share/t
|
||||
exmf-dist/fonts/type1/public/cm-super/sfrm1200.pfb></usr/share/texmf-dist/fonts
|
||||
/type1/public/cm-super/sfrm1728.pfb></usr/share/texmf-dist/fonts/type1/public/c
|
||||
@ -774,10 +774,10 @@ m-super/sfsx1200.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx144
|
||||
0.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx1728.pfb></usr/sha
|
||||
re/texmf-dist/fonts/type1/public/cm-super/sfsx2488.pfb></usr/share/texmf-dist/f
|
||||
onts/type1/public/cm-super/sftt1200.pfb>
|
||||
Output written on Ringstats_Dokumentation.pdf (9 pages, 608054 bytes).
|
||||
Output written on Ringstats_Dokumentation.pdf (9 pages, 608048 bytes).
|
||||
PDF statistics:
|
||||
171 PDF objects out of 1000 (max. 8388607)
|
||||
140 compressed objects within 2 object streams
|
||||
28 named destinations out of 1000 (max. 500000)
|
||||
172 PDF objects out of 1000 (max. 8388607)
|
||||
141 compressed objects within 2 object streams
|
||||
29 named destinations out of 1000 (max. 500000)
|
||||
122 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -222,6 +222,7 @@ weapon {
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
\newpage
|
||||
Und so ein Enemy, der seine Item als id behält:
|
||||
|
||||
\begin{verbatim}
|
||||
@ -260,8 +261,6 @@ region {
|
||||
\newpage
|
||||
|
||||
\subsection{Graph-Datenbank-Modellierung}
|
||||
\todo{komplett pruefen ob wir das richtig verstanden haben}
|
||||
% Wie sieht das in z. B. Neo4j aus? Beschreibt (oder zeichnet), wie Knoten (Player, Region) und Kanten (has_equipped, is_in) die Beziehungen darstellen.
|
||||
Graph-Datenbanken legen den Fokus auf die Beziehungen zwischen den Objekten.
|
||||
Wir verwenden in diesem Kapitel Neo4j.
|
||||
|
||||
@ -324,12 +323,12 @@ Ein klarer Vorteil ist, dass das Modell extrem leserlich und einfach zu modellie
|
||||
Ein klarer Nachteil ist bei uns, dass das meiste über ids referenziert wird und nur wenig wirklich verschachtelt ist. Zwar bringt eine Weapon ihren item\_type und item\_effect direkt mit, aber Player, Item, Region und Enemy zeigen größtenteils nur über ids aufeinander. Dadurch nutzen wir die eigentliche Stärke des Modells kaum und haben am Ende vor allem viele einzelne Dokumente, die sich gegenseitig referenzieren.
|
||||
|
||||
\subsection{Vor- und Nachteile des Graph-Modells}
|
||||
% Vorteil: Genial, um Beziehungen abzufragen (z.B. Welcher Spieler trägt welches Item, das von welchem Boss droppt?). Nachteil: Für pures Live-Streaming von Koordinaten eher überdimensioniert.
|
||||
% Siehe Dokumenatation der Datenmodellierung
|
||||
\todo[inline]{Wir koennten Regionen Traversierung Pathfinding einbauen}
|
||||
Ein klarer Vorteil ist, dass sich Beziehungen sehr leicht abfragen lassen.
|
||||
Wir können zum Beispiel direkt verfolgen, welcher Player welche Weapon trägt oder welches Item ein Enemy fallen lässt,
|
||||
ohne die Verbindungen umständlich selbst zusammenzubauen.
|
||||
|
||||
\todo[inline]{Wir haben keine Beziehungen, die ueber mehrere Knoten hinweg gehen. Keine komlexen beziehungen wo der graph einen hohen nutzen mit sich bringt}
|
||||
Ein klarer Nachteil ist, dass Neo4j für unseren Fall überdimensioniert ist.
|
||||
Bei uns geht es vor allem darum, die Daten des Player schnell zu schreiben und wieder auszulesen, und nicht darum, ständig tiefe Beziehungen abzufragen.
|
||||
Für dieses einfache Schreiben und Lesen bringt der Graph mehr Aufwand mit, als er uns am Ende Vorteil bringt.
|
||||
@ -342,8 +341,26 @@ Für dieses einfache Schreiben und Lesen bringt der Graph mehr Aufwand mit, als
|
||||
% Mehr coole sachen die wir gelernt haben.
|
||||
% Warum wir uns fuer dieses Datenbankmodell entschieden haben.
|
||||
Wir haben die gleichen Daten aus unserem ER-Modell in drei Datenbanken abgebildet und dabei gesehen,
|
||||
wie verschieden das aussieht. In Redis haben wir alles über Keys und Hash Maps abgelegt und kommen so direkt an ein einzelnes Objekt. In MongoDB liegt jede Entität als Dokument in ihrer Collection, und die Weapon bringt ihren item\_type und item\_effect gleich mit. In Neo4j ist jede Entität ein Knoten und die Verbindungen aus dem ER-Modell werden zu Kanten, also zum Beispiel has\_equipped oder drops. So konnten wir gut vergleichen, was jedes Modell bei unseren Daten gut kann und was eher umständlich ist.
|
||||
wie verschieden das aussieht. In Redis haben wir alles über Keys und Hash Maps abgelegt und kommen so direkt an ein einzelne Objekte.
|
||||
In MongoDB liegt jede Entität als Dokument in ihrer Collection, und die Weapon bringt ihren item\_type und item\_effect gleich mit.
|
||||
In Neo4j ist jede Entität ein Knoten und die Verbindungen aus dem ER-Modell werden zu Kanten,
|
||||
also zum Beispiel has\_equipped oder drops.
|
||||
|
||||
Aufgefallen ist uns, dass wir bei Redis und MongoDB mehrere Anfragen brauchen,
|
||||
weil vieles nur über ids aufeinander zeigt. Bei Redis ist das allerdings kein Problem,
|
||||
da diese extrem schnell im Vergleich zu den anderen beiden sind.
|
||||
Wollen wir zum Beispiel zu einem Player seine Weapon,
|
||||
holen wir erst den Player, dann das Item und dann die Weapon. So konnten wir gut vergleichen,
|
||||
was jedes Modell bei unseren Daten gut kann und was eher umständlich ist.
|
||||
|
||||
% \todo[inline]{Noch etwas zu Graph, da wir keine Beziehungsketten haben.}
|
||||
|
||||
Für Ringstats fällt unsere Wahl auf das Key-Value-Modell mit Redis.
|
||||
Der Grund ist einfach: Bei uns geht es vor allem darum, die Daten des Player laufend zu schreiben und sofort wieder auszulesen, im Spiel und im Browser. Genau dafür ist Redis gemacht. Über die Keys kommen wir direkt an ein Objekt und müssen nicht lange suchen. Die komplexen Abfragen, bei denen MongoDB oder Neo4j stark wären, brauchen wir kaum, und unsere Daten sind ohnehin nicht tief verschachtelt. Deshalb passt die schnelle und einfache Lösung am besten zu dem, was Ringstats im Kern macht.
|
||||
Der Grund ist einfach: Bei uns geht es vor allem darum,
|
||||
die Daten des Player laufend im Spiel und Browser zu schreiben und sofort wieder auszulesen.
|
||||
Genau dafür ist Redis gemacht.
|
||||
Über die Keys kommen wir direkt an ein Objekt und müssen nicht lange suchen.
|
||||
Die komplexen Abfragen, bei denen MongoDB oder Neo4j stark wären, brauchen wir kaum,
|
||||
und unsere Daten sind ohnehin nicht tief verschachtelt.
|
||||
Deshalb passt die schnelle und einfache Lösung am besten zu dem, was Ringstats braucht.
|
||||
\end{document}
|
||||
|
||||
BIN
Vorlesungen/05 Praktikumsaufgabe-Neo4j.pdf
Normal file
BIN
Vorlesungen/05 Praktikumsaufgabe-Neo4j.pdf
Normal file
Binary file not shown.
@ -25,23 +25,23 @@
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Übersicht der Schlüsselstrukturen in Redis}}{4}{table.1}\protected@file@percent }
|
||||
\BKM@entry{id=7,dest={73756273656374696F6E2E322E33},srcline={188}}{5C3337365C3337375C303030445C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Dokumentenorientierte Modellierung}{5}{subsection.2.3}\protected@file@percent }
|
||||
\BKM@entry{id=8,dest={73756273656374696F6E2E322E34},srcline={262}}{5C3337365C3337375C303030475C303030725C303030615C303030705C303030685C3030302D5C303030445C303030615C303030745C303030655C3030306E5C303030625C303030615C3030306E5C3030306B5C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=8,dest={73756273656374696F6E2E322E34},srcline={263}}{5C3337365C3337375C303030475C303030725C303030615C303030705C303030685C3030302D5C303030445C303030615C303030745C303030655C3030306E5C303030625C303030615C3030306E5C3030306B5C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Graph-Datenbank-Modellierung}{7}{subsection.2.4}\protected@file@percent }
|
||||
\@writefile{tdo}{\contentsline {todo}{komplett pruefen ob wir das richtig verstanden haben}{7}{section*.1}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid1}{4894785}{49725591}
|
||||
\pgfsyspdfmark {pgfid4}{36720195}{49742517}
|
||||
\pgfsyspdfmark {pgfid5}{38335406}{49471701}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Übersicht der Knoten in Neo4j}}{7}{table.2}\protected@file@percent }
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Übersicht der Kanten in Neo4j}}{7}{table.3}\protected@file@percent }
|
||||
\BKM@entry{id=9,dest={73656374696F6E2E33},srcline={313}}{5C3337365C3337375C303030565C303030655C303030725C303030675C3030306C5C303030655C303030695C303030635C303030685C3030305C3034305C303030645C303030655C303030725C3030305C3034305C303030445C303030615C303030745C303030655C3030306E5C3030306D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=10,dest={73756273656374696F6E2E332E31},srcline={314}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C3030304B5C303030655C303030795C3030302D5C303030565C303030615C3030306C5C303030755C303030655C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=11,dest={73756273656374696F6E2E332E32},srcline={320}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030645C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030306E5C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=12,dest={73756273656374696F6E2E332E33},srcline={326}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030475C303030725C303030615C303030705C303030685C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=9,dest={73656374696F6E2E33},srcline={312}}{5C3337365C3337375C303030565C303030655C303030725C303030675C3030306C5C303030655C303030695C303030635C303030685C3030305C3034305C303030645C303030655C303030725C3030305C3034305C303030445C303030615C303030745C303030655C3030306E5C3030306D5C3030306F5C303030645C303030655C3030306C5C3030306C5C303030695C303030655C303030725C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=10,dest={73756273656374696F6E2E332E31},srcline={313}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C3030304B5C303030655C303030795C3030302D5C303030565C303030615C3030306C5C303030755C303030655C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=11,dest={73756273656374696F6E2E332E32},srcline={319}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030645C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C303030655C3030306E5C3030306F5C303030725C303030695C303030655C3030306E5C303030745C303030695C303030655C303030725C303030745C303030655C3030306E5C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\BKM@entry{id=12,dest={73756273656374696F6E2E332E33},srcline={325}}{5C3337365C3337375C303030565C3030306F5C303030725C3030302D5C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C3030304E5C303030615C303030635C303030685C303030745C303030655C303030695C3030306C5C303030655C3030305C3034305C303030645C303030655C303030735C3030305C3034305C303030475C303030725C303030615C303030705C303030685C3030302D5C3030304D5C3030306F5C303030645C303030655C3030306C5C3030306C5C30303073}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Vergleich der Datenmodellierung}{8}{section.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Vor- und Nachteile des Key-Value-Modells}{8}{subsection.3.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Vor- und Nachteile des dokumentenorientierten Modells}{8}{subsection.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Vor- und Nachteile des Graph-Modells}{8}{subsection.3.3}\protected@file@percent }
|
||||
\BKM@entry{id=13,dest={73656374696F6E2E34},srcline={341}}{5C3337365C3337375C303030465C303030615C3030307A5C303030695C30303074}
|
||||
\@writefile{tdo}{\contentsline {todo}{Wir koennten Regionen Traversierung Pathfinding einbauen}{8}{section*.1}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid1}{19562756}{23935922}
|
||||
\@writefile{tdo}{\contentsline {todo}{Wir haben keine Beziehungen, die ueber mehrere Knoten hinweg gehen. Keine komlexen beziehungen wo der graph einen hohen nutzen mit sich bringt}{8}{section*.2}\protected@file@percent }
|
||||
\pgfsyspdfmark {pgfid2}{19562756}{18172368}
|
||||
\BKM@entry{id=13,dest={73656374696F6E2E34},srcline={340}}{5C3337365C3337375C303030465C303030615C3030307A5C303030695C30303074}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Fazit}{9}{section.4}\protected@file@percent }
|
||||
\global\@namedef{scr@dte@section@lastmaxnumwidth}{12.14694pt}
|
||||
\global\@namedef{scr@dte@subsection@lastmaxnumwidth}{19.70898pt}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# Fdb version 4
|
||||
["pdflatex"] 1780228396.07999 "Ringstats_Dokumentation.tex" "build/Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1780228397.37315 0
|
||||
["pdflatex"] 1780313072.59105 "Ringstats_Dokumentation.tex" "build/Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1780313073.65504 0
|
||||
"/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc" 1775415801 2971 def0b6c1f0b107b3b936def894055589 ""
|
||||
"/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1775415801 3524 cb3e574dea2d1052e39280babc910dc8 ""
|
||||
"/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1200.tfm" 1775415801 3584 402da0b29eafbad07963b1224b222f18 ""
|
||||
@ -161,10 +161,10 @@
|
||||
"/usr/share/texmf-dist/web2c/texmf.cnf" 1775415801 43569 fd570f2fa160877d211e859f687312ba ""
|
||||
"/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1777228096 5385779 47c0c393a77fd4a098bacfd57d66b88a ""
|
||||
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1778762763 3734533 c370cc050c4a9823a1fe1ab265afc57b ""
|
||||
"Ringstats_Dokumentation.tex" 1780228396.05977 16384 31f8769ea8848522618cb15632898304 ""
|
||||
"Ringstats_Dokumentation.tex" 1780313071.55337 16584 03bd9bb6b9242fada2b5fd161766d7ed ""
|
||||
"assets/er-modell.png" 1778764597.46144 805989 0b7323ca4b38e6518c24fd9e5684655b ""
|
||||
"build/Ringstats_Dokumentation.aux" 1780228397.3228 8342 614fe975c96718f7f7d764724aa87b20 "pdflatex"
|
||||
"build/Ringstats_Dokumentation.toc" 1780228397.3248 1305 1401ae3dd1fbee665ef3e10a49daf4b1 "pdflatex"
|
||||
"build/Ringstats_Dokumentation.aux" 1780313073.61548 8525 dc2f45dff6b0575fd760f48e262e0d7d "pdflatex"
|
||||
"build/Ringstats_Dokumentation.toc" 1780313073.61648 1305 1401ae3dd1fbee665ef3e10a49daf4b1 "pdflatex"
|
||||
(generated)
|
||||
"build/Ringstats_Dokumentation.aux"
|
||||
"build/Ringstats_Dokumentation.log"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.5.14) 31 MAY 2026 13:53
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.5.14) 1 JUN 2026 13:24
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@ -733,37 +733,37 @@ Overfull \hbox (52.12212pt too wide) in paragraph at lines 146--173
|
||||
[]
|
||||
|
||||
[4] [5] [6]
|
||||
Package hyperref Info: bookmark level for unknown todo defaults to 0 on input l
|
||||
ine 263.
|
||||
|
||||
Overfull \hbox (5.15562pt too wide) in paragraph at lines 263--263
|
||||
[][][]\T1/cmr/m/n/12 komplett
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (5.15562pt too wide) in paragraph at lines 263--263
|
||||
[][][]\T1/cmr/m/n/12 komplett
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (9.63942pt too wide) in paragraph at lines 297--309
|
||||
Overfull \hbox (9.63942pt too wide) in paragraph at lines 296--308
|
||||
[][]
|
||||
[]
|
||||
|
||||
[7] [8] [9] (build/Ringstats_Dokumentation.aux)
|
||||
[7]
|
||||
Package hyperref Info: bookmark level for unknown todo defaults to 0 on input l
|
||||
ine 326.
|
||||
|
||||
Overfull \hbox (11.24713pt too wide) in paragraph at lines 326--326
|
||||
[]
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (11.24713pt too wide) in paragraph at lines 331--331
|
||||
[]
|
||||
[]
|
||||
|
||||
[8] [9] (build/Ringstats_Dokumentation.aux)
|
||||
***********
|
||||
LaTeX2e <2025-11-01>
|
||||
L3 programming layer <2026-01-19>
|
||||
***********
|
||||
)
|
||||
Here is how much of TeX's memory you used:
|
||||
24579 strings out of 469462
|
||||
480399 string characters out of 5468614
|
||||
1010471 words of memory out of 5000000
|
||||
52862 multiletter control sequences out of 15000+600000
|
||||
24546 strings out of 469462
|
||||
479786 string characters out of 5468614
|
||||
1009471 words of memory out of 5000000
|
||||
52828 multiletter control sequences out of 15000+600000
|
||||
638939 words of font info for 63 fonts, out of 8000000 for 9000
|
||||
14 hyphenation exceptions out of 8191
|
||||
108i,9n,108p,11253b,971s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
108i,8n,108p,11253b,869s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1200.pfb></usr/share/t
|
||||
exmf-dist/fonts/type1/public/cm-super/sfrm1200.pfb></usr/share/texmf-dist/fonts
|
||||
/type1/public/cm-super/sfrm1728.pfb></usr/share/texmf-dist/fonts/type1/public/c
|
||||
@ -771,10 +771,10 @@ m-super/sfsx1200.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx144
|
||||
0.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx1728.pfb></usr/sha
|
||||
re/texmf-dist/fonts/type1/public/cm-super/sfsx2488.pfb></usr/share/texmf-dist/f
|
||||
onts/type1/public/cm-super/sftt1200.pfb>
|
||||
Output written on build/Ringstats_Dokumentation.pdf (9 pages, 608054 bytes).
|
||||
Output written on build/Ringstats_Dokumentation.pdf (9 pages, 608048 bytes).
|
||||
PDF statistics:
|
||||
171 PDF objects out of 1000 (max. 8388607)
|
||||
140 compressed objects within 2 object streams
|
||||
28 named destinations out of 1000 (max. 500000)
|
||||
172 PDF objects out of 1000 (max. 8388607)
|
||||
141 compressed objects within 2 object streams
|
||||
29 named destinations out of 1000 (max. 500000)
|
||||
122 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
|
||||
Binary file not shown.
4
build/texput.fls
Normal file
4
build/texput.fls
Normal file
@ -0,0 +1,4 @@
|
||||
PWD /home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken
|
||||
INPUT /usr/share/texmf-dist/web2c/texmf.cnf
|
||||
INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt
|
||||
OUTPUT build/texput.log
|
||||
21
build/texput.log
Normal file
21
build/texput.log
Normal file
@ -0,0 +1,21 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.5.14) 31 MAY 2026 13:27
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**Ringstats_Dokumentation.tex
|
||||
|
||||
! Emergency stop.
|
||||
<*> Ringstats_Dokumentation.tex
|
||||
|
||||
*** (job aborted, file error in nonstop mode)
|
||||
|
||||
|
||||
Here is how much of TeX's memory you used:
|
||||
4 strings out of 469462
|
||||
142 string characters out of 5468614
|
||||
433756 words of memory out of 5000000
|
||||
28774 multiletter control sequences out of 15000+600000
|
||||
627721 words of font info for 40 fonts, out of 8000000 for 9000
|
||||
14 hyphenation exceptions out of 8191
|
||||
0i,0n,0p,1b,6s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
! ==> Fatal error occurred, no output PDF file produced!
|
||||
4
praesentation/.gitignore
vendored
Normal file
4
praesentation/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
dist
|
||||
.slidev
|
||||
*.local
|
||||
101
praesentation/global-bottom.vue
Normal file
101
praesentation/global-bottom.vue
Normal file
@ -0,0 +1,101 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
import { useNav } from '@slidev/client'
|
||||
|
||||
const { isPresenter, currentSlideNo, nextSlide } = useNav()
|
||||
|
||||
const LIMIT = 20
|
||||
const elapsed = ref(0)
|
||||
const hasAdvanced = ref(false)
|
||||
const paused = ref(true)
|
||||
let timer: ReturnType<typeof setInterval> | null = null
|
||||
|
||||
const togglePause = () => {
|
||||
paused.value = !paused.value
|
||||
}
|
||||
|
||||
const advanceSlide = () => {
|
||||
if (hasAdvanced.value || elapsed.value < LIMIT)
|
||||
return
|
||||
|
||||
hasAdvanced.value = true
|
||||
nextSlide()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
timer = setInterval(() => {
|
||||
if (paused.value)
|
||||
return
|
||||
elapsed.value++
|
||||
advanceSlide()
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (timer)
|
||||
clearInterval(timer)
|
||||
timer = null
|
||||
})
|
||||
|
||||
watch(currentSlideNo, () => {
|
||||
elapsed.value = 0
|
||||
hasAdvanced.value = false
|
||||
paused.value = false
|
||||
})
|
||||
|
||||
const remaining = computed(() => LIMIT - elapsed.value)
|
||||
const over = computed(() => remaining.value < 0)
|
||||
const warn = computed(() => !over.value && remaining.value <= 5)
|
||||
const pct = computed(() => Math.min(100, (elapsed.value / LIMIT) * 100))
|
||||
const label = computed(() => `${over.value ? '+' : ''}${Math.abs(remaining.value)}s`)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="isPresenter" class="pk-timer" :class="{ over, warn, paused }" @click="togglePause">
|
||||
<div class="pk-bar" :style="{ width: pct + '%' }" />
|
||||
<span class="pk-label">{{ paused ? '⏸' : label }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.pk-timer {
|
||||
position: fixed;
|
||||
top: 12px;
|
||||
right: 12px;
|
||||
z-index: 9999;
|
||||
width: 130px;
|
||||
height: 38px;
|
||||
border-radius: 10px;
|
||||
background: rgba(20, 20, 25, 0.85);
|
||||
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-family: 'Fira Code', monospace;
|
||||
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
.pk-timer.paused { border-color: rgba(96, 165, 250, 0.8); }
|
||||
.pk-timer.paused .pk-bar { background: rgba(96, 165, 250, 0.35); }
|
||||
.pk-bar {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background: rgba(74, 222, 128, 0.35);
|
||||
transition: width 1s linear;
|
||||
}
|
||||
.pk-timer.warn .pk-bar { background: rgba(251, 191, 36, 0.4); }
|
||||
.pk-timer.over { border-color: rgba(248, 113, 113, 0.8); }
|
||||
.pk-timer.over .pk-bar { width: 100% !important; background: rgba(248, 113, 113, 0.45); }
|
||||
.pk-label {
|
||||
position: relative;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
.pk-timer.over .pk-label { color: #fecaca; }
|
||||
</style>
|
||||
9683
praesentation/package-lock.json
generated
Normal file
9683
praesentation/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
14
praesentation/package.json
Normal file
14
praesentation/package.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "ringstats-zwischenpraesentation",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "slidev --open",
|
||||
"build": "slidev build",
|
||||
"export": "slidev export"
|
||||
},
|
||||
"dependencies": {
|
||||
"@slidev/cli": "^0.50.0",
|
||||
"@slidev/theme-seriph": "^0.25.0"
|
||||
}
|
||||
}
|
||||
BIN
praesentation/public/er-modell.png
Normal file
BIN
praesentation/public/er-modell.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 787 KiB |
681
praesentation/slides.md
Normal file
681
praesentation/slides.md
Normal file
@ -0,0 +1,681 @@
|
||||
---
|
||||
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
|
||||
|
||||
<div class="pt-6 opacity-80 text-lg">
|
||||
Justin Rost · Michelle Reichelt · Yasin Ergün
|
||||
</div>
|
||||
|
||||
<div class="pt-10 opacity-60 text-sm">
|
||||
Zwischenpräsentation · Moderne Datenbanken · 08.06.2026
|
||||
</div>
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# Inhalt
|
||||
|
||||
<div class="flex justify-center items-stretch gap-3 pt-14">
|
||||
|
||||
<div class="w-36 p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">🎯</div>
|
||||
<div class="pt-3 font-semibold text-sm">Szenario</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center text-2xl opacity-40">⮀</div>
|
||||
|
||||
<div class="w-36 p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">🗺️</div>
|
||||
<div class="pt-3 font-semibold text-sm">ER-Modell</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center text-2xl opacity-40">⮀</div>
|
||||
|
||||
<div class="w-36 p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">🧩</div>
|
||||
<div class="pt-3 font-semibold text-sm">Drei Modelle</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center text-2xl opacity-40">→</div>
|
||||
|
||||
<div class="w-36 p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">⚖️</div>
|
||||
<div class="pt-3 font-semibold text-sm">Vergleich</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center text-2xl opacity-40">→</div>
|
||||
|
||||
<div class="w-36 p-5 rounded-xl bg-red-400/10">
|
||||
<div class="text-4xl">✅</div>
|
||||
<div class="pt-3 font-semibold text-sm">Auswahl</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- kurzer Fahrplan durch die Präsentation
|
||||
- erst Szenario, dann ER-Modell als Grundlage
|
||||
- drei NoSQL-Modelle an unseren Daten zeigen
|
||||
- vergleichen und am Ende eine Auswahl treffen
|
||||
-->
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# Die Idee
|
||||
|
||||
<div class="opacity-70 pt-2">Eine Schnittstelle zwischen Spiel und Datenbank</div>
|
||||
|
||||
<div class="flex justify-center items-center gap-6 pt-12">
|
||||
|
||||
<div class="w-44 p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-5xl">🎮</div>
|
||||
<div class="pt-3 font-semibold">Spiel</div>
|
||||
<div class="pt-1 text-xs opacity-70">liest Position, Leben, Ausrüstung live aus</div>
|
||||
</div>
|
||||
|
||||
<div class="text-3xl opacity-40">⇄</div>
|
||||
|
||||
<div class="w-44 p-6 rounded-xl bg-red-400/10">
|
||||
<div class="text-5xl">🗄️</div>
|
||||
<div class="pt-3 font-semibold">Datenbank</div>
|
||||
<div class="pt-1 text-xs opacity-70">speichert und liefert passende Infos</div>
|
||||
</div>
|
||||
|
||||
<div class="text-3xl opacity-40">⇄</div>
|
||||
|
||||
<div class="w-44 p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-5xl">🌐</div>
|
||||
<div class="pt-3 font-semibold">Browser</div>
|
||||
<div class="pt-1 text-xs opacity-70">gleiche Daten parallel abrufbar</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Schnittstelle zwischen Spiel und Datenbank
|
||||
- Im Spiel werden Daten ausgelesen
|
||||
- Daten werden an Server gesendet und in DB verwalten
|
||||
- Programm und Browser lesen Daten aus
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Kernidee: Hilfe für Spieler
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 pt-10 text-center">
|
||||
|
||||
<div class="p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">🎮</div>
|
||||
<div class="pt-3 font-semibold">Im-Spiel Anzeige</div>
|
||||
<div class="pt-2 text-sm opacity-80">zeigt z.B. Bossangriffe live und Checkliste</div>
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-4xl">🖥️</div>
|
||||
<div class="pt-3 font-semibold">Browser App</div>
|
||||
<div class="pt-2 text-sm opacity-80">Generelle Informationen und Analysen</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-8 text-center opacity-70">
|
||||
Es muss extrem schnell gehen, ohne spürbare Verzögerung.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Die Kernidee ist Hilfe für den Spieler
|
||||
- Im Spiel wird Oberfläche angezeigt mit Informationen
|
||||
- Browser App zeigt detaillreicher Infos zum Spieler und Welt
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Anwendungsfälle
|
||||
|
||||
<div class="grid grid-cols-3 gap-6 pt-12 text-center">
|
||||
|
||||
<div class="p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-5xl">⚔️</div>
|
||||
<div class="pt-4 font-semibold">Bosskampf</div>
|
||||
<div class="pt-2 text-sm opacity-70">Fenster mit Resistenzen und Angriffe</div>
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-5xl">📦</div>
|
||||
<div class="pt-4 font-semibold">Live-Standort</div>
|
||||
<div class="pt-2 text-sm opacity-70">Checkliste, Truhen und Objekte in der Nähe</div>
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-gray-400/10">
|
||||
<div class="text-5xl">🌐</div>
|
||||
<div class="pt-4 font-semibold">Website</div>
|
||||
<div class="pt-2 text-sm opacity-70">Builds und Statistiken</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Einige Informationen sind:
|
||||
- Resistenzen und Angriffe von Bossen
|
||||
- Truhen, Objekte und Checklisten in der Nähe
|
||||
- Detaillierte Informationen zu Statistiken und Builds auf Website
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Das ER-Modell
|
||||
|
||||
<div class="flex justify-center pt-2">
|
||||
<img src="/er-modell.png" class="h-100 rounded-lg bg-white p-2" />
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Zentrale Entity ist Player/Spieler
|
||||
- Grear (Inventar) beinhaltet (Weapon, Armor, Shield, Talisman).
|
||||
- Das sind alles Items, werden von Gegnern fallengelassen.
|
||||
- In Regionen sind Player, Enemies und Items
|
||||
-->
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# Drei NoSQL-Modelle
|
||||
|
||||
<div class="grid grid-cols-3 gap-8 pt-10">
|
||||
|
||||
<div class="p-8 rounded-xl bg-red-400/10">
|
||||
<div class="text-3xl font-bold">Key-Value</div>
|
||||
<div class="pt-3 opacity-80">Redis</div>
|
||||
<div class="pt-2 text-sm opacity-70">Alles über Schlüssel</div>
|
||||
</div>
|
||||
|
||||
<div class="p-8 rounded-xl bg-green-400/10">
|
||||
<div class="text-3xl font-bold">Dokument</div>
|
||||
<div class="pt-3 opacity-80">MongoDB</div>
|
||||
<div class="pt-2 text-sm opacity-70">Alles im Dokument</div>
|
||||
</div>
|
||||
|
||||
<div class="p-8 rounded-xl bg-blue-400/10">
|
||||
<div class="text-3xl font-bold">Graph</div>
|
||||
<div class="pt-3 opacity-80">Neo4j</div>
|
||||
<div class="pt-2 text-sm opacity-70">Alles über Kanten</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-10 opacity-70">
|
||||
Wir bilden die gleichen Daten in allen drei ab.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Key-Value mit Redis: alles über Schlüssel
|
||||
- Dokument mit MongoDB: alles im Dokument
|
||||
- Graph mit Neo4j: alles über Kanten
|
||||
- gleiche Daten in allen drei abgebildet
|
||||
-->
|
||||
|
||||
---
|
||||
layout: two-cols
|
||||
layoutClass: gap-10
|
||||
---
|
||||
|
||||
# Key-Value mit Redis
|
||||
|
||||
Eine einfache und schnelle Lösung für unstrukturierte Daten.
|
||||
|
||||
Keys sind Strings und identifizieren ein Objekt eindeutig.
|
||||
|
||||
Aufbau: Name der Entität, Doppelpunkt, ID des Objekts.
|
||||
|
||||
::right::
|
||||
|
||||
<div class="pt-14">
|
||||
|
||||
```text
|
||||
weapon:213
|
||||
player:1
|
||||
region:1:items
|
||||
enemy:1
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-6 opacity-80">
|
||||
|
||||
Die meisten Entitäten liegen als Hash Map. Listen und Mengen als SET.
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Keys sind Strings und identifizieren ein Objekt eindeutig
|
||||
- Aufbau: Name der Entität, Doppelpunkt, ID
|
||||
- meiste Entitäten als Hash Map, Listen und Mengen als SET
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Key-Value: Schlüsselaufbau
|
||||
|
||||
<div class="text-sm pt-4">
|
||||
|
||||
| Datentyp | Key-Struktur | Attribute |
|
||||
|----------|--------------|-----------|
|
||||
| HMAP | `weapon:{id}` | id, item_effect_id, item_type_id, weight, damage |
|
||||
| HMAP | `item:{id}` | id, name, gear_type, gear_id |
|
||||
| HMAP | `player:{id}` | id, name, health, stamina, level, region_id |
|
||||
| SET | `player:{id}:armor` | item_id |
|
||||
| STRING | `player:{id}:shield` | item_id |
|
||||
| HMAP | `region:{id}` | id, name |
|
||||
| SET | `region:{id}:enemies` | enemy_id |
|
||||
| HMAP | `enemy:{id}` | id, name, health, level, damage |
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-4 opacity-70 text-sm">
|
||||
Über den Key kommen wir direkt an ein Objekt, ohne lange zu suchen.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- jede Entität bekommt einen eigenen Key
|
||||
- Ausrüstung des Players über Sub-Keys, z.B. player:1:armor
|
||||
- über den Key direkt ans Objekt, ohne Suchen
|
||||
-->
|
||||
|
||||
---
|
||||
layout: two-cols
|
||||
layoutClass: gap-10
|
||||
---
|
||||
|
||||
# Dokument mit MongoDB
|
||||
|
||||
Alles was zusammengehört, liegt gebündelt in einem Dokument.
|
||||
|
||||
Jede Entität wird zu einem Dokument in einer eigenen Collection.
|
||||
|
||||
Der Player hält von seiner Ausrüstung nur die ids fest, denn Weapon und Co. liegen in eigenen Dokumenten.
|
||||
|
||||
::right::
|
||||
|
||||
<div class="pt-14">
|
||||
|
||||
```js
|
||||
player {
|
||||
id: 1,
|
||||
name: "Jonas",
|
||||
health: 100,
|
||||
stamina: 100,
|
||||
level: 1,
|
||||
region_id: 1,
|
||||
weapon: [ 12 ],
|
||||
shield: 30,
|
||||
armor: [ 41, 42 ],
|
||||
talisman: [ 7 ]
|
||||
}
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- alles Zusammengehörige gebündelt in einem Dokument
|
||||
- jede Entität eigene Collection
|
||||
- Player hält von der Ausrüstung nur die ids fest
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Dokument: Beispiele
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 pt-6 text-sm">
|
||||
|
||||
```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 ]
|
||||
}
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-6 opacity-70 text-sm">
|
||||
Weapon bringt item_type und item_effect direkt mit. Player, Item, Region und Enemy zeigen meist nur über ids.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Weapon bringt item_type und item_effect direkt mit
|
||||
- Enemy und Region verweisen über ids auf ihre Items
|
||||
- bei uns meist nur ids statt tiefer Verschachtelung
|
||||
-->
|
||||
|
||||
---
|
||||
layout: two-cols
|
||||
layoutClass: gap-10
|
||||
---
|
||||
|
||||
# Graph mit Neo4j
|
||||
|
||||
Der Fokus liegt auf den Beziehungen zwischen den Objekten.
|
||||
|
||||
Jede Entität wird zu einem Knoten, der seine Werte direkt mitträgt.
|
||||
|
||||
::right::
|
||||
|
||||
<div class="pt-6 text-sm">
|
||||
|
||||
| Knoten | Attribute |
|
||||
|--------|-----------|
|
||||
| Player | id, name, health, stamina, level |
|
||||
| Weapon | id, weight, damage |
|
||||
| Type | id, name |
|
||||
| item_effect | id, name, value |
|
||||
| Item | id, name |
|
||||
| Region | id, name |
|
||||
| Enemy | id, name, health, level, damage |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Fokus liegt auf den Beziehungen zwischen Objekten
|
||||
- jede Entität wird ein Knoten und trägt seine Werte direkt
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Graph: Kanten
|
||||
|
||||
<div class="text-sm pt-6">
|
||||
|
||||
| Von | Kante | Nach |
|
||||
|-----|-------|------|
|
||||
| Player | has_equipped | Weapon, Armor, Shield, Talisman |
|
||||
| Player | is_in | Region |
|
||||
| Weapon, Armor, Shield | has | Type |
|
||||
| Weapon, Armor, Shield, Talisman | has | item_effect |
|
||||
| Weapon, Armor, Shield, Talisman | is | Item |
|
||||
| Region | has | Item, Enemy |
|
||||
| Enemy | drops | Item |
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-6 opacity-70 text-sm">
|
||||
Die Kanten verbinden die Knoten so, wie es schon das ER-Modell vorgibt.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Kanten sind die Beziehungen aus dem ER-Modell
|
||||
- has_equipped, is_in, has, drops
|
||||
- Beziehungen lassen sich direkt verfolgen
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Vergleich: Key-Value
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 pt-10">
|
||||
|
||||
<div class="p-6 rounded-xl bg-green-500/10">
|
||||
<div class="font-bold text-green-500 pb-3">Vorteil</div>
|
||||
Redis ist extrem schnell. Über die Keys kommen wir direkt an ein Objekt. Genau das brauchen wir für die Live Daten des Players.
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-red-500/10">
|
||||
<div class="font-bold text-red-500 pb-3">Nachteil</div>
|
||||
Komplexe Abfragen sind schwierig. Alle Weapon mit einem bestimmten item_effect müssen wir in der Anwendung selbst zusammenbauen.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Vorteil: extrem schnell, direkter Zugriff über Key, ideal für Live-Daten
|
||||
- Nachteil: komplexe Abfragen müssen wir selbst zusammenbauen
|
||||
- Beispiel: alle Weapon mit bestimmtem item_effect
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Vergleich: Dokument
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 pt-10">
|
||||
|
||||
<div class="p-6 rounded-xl bg-green-500/10">
|
||||
<div class="font-bold text-green-500 pb-3">Vorteil</div>
|
||||
Sehr leserlich und einfach zu modellieren. Jedes Dokument ist für sich verständlich und man sieht direkt, welche Daten zusammengehören.
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-red-500/10">
|
||||
<div class="font-bold text-red-500 pb-3">Nachteil</div>
|
||||
Bei uns wird das meiste über ids referenziert und nur wenig verschachtelt. Wir nutzen die Stärke des Modells kaum.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Vorteil: sehr leserlich und einfach zu modellieren
|
||||
- Nachteil: bei uns meist ids, kaum verschachtelt
|
||||
- die eigentliche Stärke nutzen wir kaum
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Vergleich: Graph
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 pt-10">
|
||||
|
||||
<div class="p-6 rounded-xl bg-green-500/10">
|
||||
<div class="font-bold text-green-500 pb-3">Vorteil</div>
|
||||
Beziehungen lassen sich sehr leicht abfragen. Welcher Player welche Weapon trägt oder welches Item ein Enemy fallen lässt, ohne Umwege.
|
||||
</div>
|
||||
|
||||
<div class="p-6 rounded-xl bg-red-500/10">
|
||||
<div class="font-bold text-red-500 pb-3">Nachteil</div>
|
||||
Neo4j ist für unseren Fall überdimensioniert. Wir schreiben und lesen vor allem schnell, statt ständig tiefe Beziehungen abzufragen.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Vorteil: Beziehungen sehr leicht abfragbar
|
||||
- Beispiel: welcher Player welche Weapon trägt, welches Item ein Enemy droppt
|
||||
- Nachteil: für unseren Fall überdimensioniert
|
||||
- wir brauchen schnelles Schreiben und Lesen, keine tiefen Abfragen
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Gegenüberstellung
|
||||
|
||||
<div class="pt-8 text-lg">
|
||||
|
||||
| | 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 |
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-8 opacity-70">
|
||||
Unsere Daten sind flach und ändern sich ständig. Tiefe Beziehungen brauchen wir kaum.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Tabelle fasst die drei Modelle zusammen
|
||||
- Key-Value vorn bei Tempo und direktem Zugriff
|
||||
- unsere Daten flach und ständig in Bewegung
|
||||
-->
|
||||
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Was uns wichtig ist
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 pt-6 text-sm">
|
||||
|
||||
<div>
|
||||
|
||||
| Kriterium | Muss | Gewicht |
|
||||
|-----------|:----:|:-------:|
|
||||
| Hohe Performanz | ja | 5 |
|
||||
| Keine Lizenzkosten | ja | 5 |
|
||||
| Daten-Streaming | ja | 3 |
|
||||
| Niedrige Latenz | ja | 3 |
|
||||
| Indexing | nein | 2 |
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
| | MariaDB | Redis | MongoDB |
|
||||
|---|:---:|:---:|:---:|
|
||||
| Performanz | 0 | 2 | 1 |
|
||||
| Streaming | 0 | 2 | 0 |
|
||||
| Latenz | 1 | 2 | 0 |
|
||||
| **Summe** | **11** | **30** | **15** |
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pt-6 opacity-70 text-sm">
|
||||
Latenzfrei und performant ist für uns Pflicht. In den Tests gewinnt Redis klar.
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Kriterien aus dem Szenario gewichtet
|
||||
- Performanz und keine Lizenzkosten sind Pflicht
|
||||
- in den Tests gewinnt Redis klar: 30 vs 11 vs 15
|
||||
-->
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# Fazit
|
||||
|
||||
<div class="text-2xl pt-4">
|
||||
Wir wählen <span class="text-red-500 font-bold">Key-Value mit Redis</span>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-3 gap-6 pt-10 text-left text-sm">
|
||||
|
||||
<div class="p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="font-semibold pb-2">Geschwindigkeit</div>
|
||||
Daten des Players live schreiben und genauso live zurücklesen.
|
||||
</div>
|
||||
|
||||
<div class="p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="font-semibold pb-2">Direkter Zugriff</div>
|
||||
Über die Keys sofort an ein Objekt, ohne lange Suche.
|
||||
</div>
|
||||
|
||||
<div class="p-5 rounded-xl bg-gray-400/10">
|
||||
<div class="font-semibold pb-2">Passende Größe</div>
|
||||
Rund 100 Regionen, 500 Gegner, 3.300 Gegenstände. Keine tiefe Verschachtelung nötig.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Wahl fällt auf Key-Value mit Redis
|
||||
- drei Gründe: Geschwindigkeit, direkter Zugriff, passende Größe
|
||||
- komplexe Abfragen brauchen wir kaum
|
||||
-->
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# Danke
|
||||
|
||||
<div class="opacity-80 pt-4 text-lg">
|
||||
Nächste Schritte: Datenbank auf dem Server aufsetzen und Schema umsetzen
|
||||
</div>
|
||||
|
||||
<div class="pt-10 opacity-60">
|
||||
Fragen?
|
||||
</div>
|
||||
|
||||
<div class="pt-8 opacity-50 text-sm">
|
||||
Justin Rost · Michelle Reichelt · Yasin Ergün
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Dank fürs Zuhören
|
||||
- nächste Schritte: Datenbank auf Server aufsetzen, Schema umsetzen
|
||||
- offen für Fragen
|
||||
-->
|
||||
Loading…
x
Reference in New Issue
Block a user