Pārlūkot izejas kodu

slides added dbs graph

Daniel Garcia Costa 1 mēnesi atpakaļ
vecāks
revīzija
5a422ae228

+ 7 - 1
Slides/SeminarioSpringData_2026.md

@@ -556,7 +556,7 @@ Simulación de un juego de estrategia MMO (multijugador masivo en línea) multim
 - Escalado horizontal de shards
 - Aislamiento del dominio de juego
 - Centralización de analítica
-- Escenario realista para estudiar consultas
+- Escenario realista para estudiar el comportamiento de las capas de persistencia
 
 ---
 
@@ -570,6 +570,12 @@ Simulación de un juego de estrategia MMO (multijugador masivo en línea) multim
 
 ---
 
+
+<img src="esquema_fisico_bds.png" width="95%"/>
+
+
+---
+
 ## Clona los siguientes proyectos
 
 - **Master**

BIN
Slides/SeminarioSpringData_2026.pdf


+ 63 - 0
Slides/esquema_fisico_bds.drawio

@@ -0,0 +1,63 @@
+<mxfile host="app.diagrams.net">
+  <diagram name="Esquema físico de bases de datos" id="HnYMl3Ge32o6pUl2H81z">
+    <mxGraphModel dx="1414" dy="791" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="xlYSylfd2xAS62EDcqBX-1" parent="1" style="swimlane;horizontal=0;startSize=30;fillColor=#E3F2FD;strokeColor=#1565C0;fontSize=16;" value="Shard Database" vertex="1">
+          <mxGeometry height="520" width="370" x="210" y="90" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-29" edge="1" parent="xlYSylfd2xAS62EDcqBX-1" source="xlYSylfd2xAS62EDcqBX-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="xlYSylfd2xAS62EDcqBX-28">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-15" parent="xlYSylfd2xAS62EDcqBX-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;PLAYER&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IX&lt;/td&gt;&lt;td&gt;external_player_id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;created_at&lt;br&gt;score&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="110" width="180" x="115" y="70" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-28" parent="xlYSylfd2xAS62EDcqBX-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;WORLD_EVENTS&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FK&lt;/td&gt;&lt;td&gt;player_id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;event_type&lt;br&gt;action&lt;br&gt;points_delta&lt;br&gt;winner&lt;br&gt;timestamp&lt;br&gt;payload&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="190" width="180" x="115" y="290" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-5" parent="1" style="swimlane;horizontal=0;startSize=30;fillColor=#FFF3E0;strokeColor=#EF6C00;fontSize=16;" value="Master Database" vertex="1">
+          <mxGeometry height="520" width="790" x="620" y="90" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-16" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;PLAYER_GLOBAL&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IX&lt;/td&gt;&lt;td&gt;external_player_id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;first_seen_at&lt;br&gt;last_seen_at&lt;br&gt;global_score&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="130" width="180" x="320" y="30" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-18" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;SHARD&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;external_id&lt;br&gt;name&lt;br&gt;location&lt;br&gt;status&lt;br&gt;created_at&lt;br&gt;started_at&lt;br&gt;last_heartbeat&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="180" width="180" x="320" y="190" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-22" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-16">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="310" y="60" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-23" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-18">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-17" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=14;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;MASTER_EVENTS&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FK&lt;br&gt;FK&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;shard_id&lt;br&gt;player_id&lt;br&gt;timestamp&lt;br&gt;event_type&lt;br&gt;action&lt;br&gt;points_delta&lt;br&gt;winner&lt;br&gt;payload&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="190" width="180" x="60" y="60" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-24" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-16">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-25" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-18">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-20" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;SHARD_PLAYER_STATS&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FK&lt;br&gt;FK&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;shard_id&lt;br&gt;player_id&lt;br&gt;score&lt;br&gt;totalActions&lt;br&gt;explores&lt;br&gt;gathers&lt;br&gt;fights&lt;br&gt;rests&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="200" width="180" x="580" y="100" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-27" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-18">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-21" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;SHARD_WORLD_SNAPSHOTS&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FK&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;id_shard&lt;br&gt;total_players&lt;br&gt;total_events&lt;br&gt;snapshot_at&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="130" width="230" x="70" y="370" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-26" edge="1" parent="xlYSylfd2xAS62EDcqBX-5" source="xlYSylfd2xAS62EDcqBX-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;strokeWidth=2;" target="xlYSylfd2xAS62EDcqBX-18">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="xlYSylfd2xAS62EDcqBX-19" parent="xlYSylfd2xAS62EDcqBX-5" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;fillColor=#f5f5f5;strokeColor=#666666;shadow=0;strokeWidth=2;fontColor=#333333;fontSize=15;" value="&lt;div style=&quot;box-sizing: border-box; width: 100%; background: rgb(228, 228, 228); padding: 2px;&quot;&gt;&lt;b&gt;SHARD_LIFECYCLE_EVENT&lt;/b&gt;&lt;/div&gt;&lt;table style=&quot;width: 100%;&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;id&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FK&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;shard_id&lt;br&gt;event_type&lt;br&gt;timestamp&lt;br&gt;details&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" vertex="1">
+          <mxGeometry height="130" width="210" x="520" y="370" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>

BIN
Slides/esquema_fisico_bds.png