\section{Adatbázis replikáció}

\begin{frame}{Mi az adatbázis replikáció?}
  \begin{block}{Definíció}
    Az adatok \textbf{több adatbázis példány között} vannak másolva annak érdekében,
    hogy növekedjen a \textbf{rendelkezésre állás}, \textbf{skálázhatóság} és
    \textbf{hibatűrés}.
  \end{block}
  \begin{itemize}
    \item Primary–Replica (master–slave) felépítés a leggyakoribb
    \item A replikáció lehet \textbf{szinkron} vagy \textbf{aszinkron}
    \item Read-heavy alkalmazásoknál különösen hasznos
  \end{itemize}
\end{frame}

\begin{frame}{Miért jó a replikáció?}
  \begin{block}{Főbb előnyök}
    \begin{itemize}
      \item \textbf{Nagyobb rendelkezésre állás}: hiba esetén átváltás (failover)
      \item \textbf{Skálázás olvasásra}: több replica olvasási terhelést visz el
      \item \textbf{Biztonsági másolat}: adatvesztés kockázatának csökkentése
      \item \textbf{Földrajzi közelség}: alacsonyabb késleltetés regionális replikákkal
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}{Replikációs topológiák}
  \begin{itemize}
    \item \textbf{Primary–Replica}: egy írható csomópont, több olvasó
    \item \textbf{Multi-primary}: több írható csomópont (konfliktuskezelés szükséges)
    \item \textbf{Chain/Cascade}: láncolt replikák nagy földrajzi területre
  \end{itemize}
  \begin{alertblock}{Gyakorlatban}
    A legtöbb backend szolgáltatásnál a Primary–Replica modell az alapértelmezett.
  \end{alertblock}
\end{frame}

\begin{frame}{Szinkron replikáció}
  \begin{block}{Hogyan működik?}
    \begin{itemize}
      \item Az írás \textbf{csak akkor sikeres}, ha a replika is visszaigazolta
      \item Erős \textbf{konzisztencia} (nincs adatvesztés írás után)
      \item A primary \textbf{vár} a replikákra → nagyobb latency
    \end{itemize}
  \end{block}
  \begin{exampleblock}{Mikor jó?}
    Pénzügyi, tranzakciós rendszerek, ahol az adatvesztés nem elfogadható.
  \end{exampleblock}
\end{frame}

\begin{frame}{Szinkron replikáció előnyök / hátrányok}
  \begin{columns}
    \begin{column}{0.48\textwidth}
      \begin{block}{Előnyök}
        \begin{itemize}
          \item Erős konzisztencia
          \item Minimális adatvesztés
          \item Egyszerűbb olvasási modell
        \end{itemize}
      \end{block}
    \end{column}
    \begin{column}{0.48\textwidth}
      \begin{alertblock}{Hátrányok}
        \begin{itemize}
          \item Nagyobb válaszidő írásnál
          \item Érzékenyebb hálózati késleltetésre
          \item Replikák kiesése lassítja az írást
        \end{itemize}
      \end{alertblock}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}{Aszinkron replikáció}
  \begin{block}{Hogyan működik?}
    \begin{itemize}
      \item Az írás \textbf{azonnal sikeres}, a replika később frissül
      \item Jobb \textbf{teljesítmény} és alacsonyabb latency
      \item \textbf{Időbeli eltérés} lehetséges (eventual consistency)
    \end{itemize}
  \end{block}
  \begin{exampleblock}{Mikor jó?}
    Nagy forgalmú rendszerek, ahol az olvasási skálázás fontosabb, mint a tökéletes
    konzisztencia (pl. hírportál, analytics).
  \end{exampleblock}
\end{frame}

\begin{frame}{Aszinkron replikáció előnyök / hátrányok}
  \begin{columns}
    \begin{column}{0.48\textwidth}
      \begin{block}{Előnyök}
        \begin{itemize}
          \item Alacsonyabb írási késleltetés
          \item Jobb skálázhatóság
          \item Replikák nem lassítják az írást
        \end{itemize}
      \end{block}
    \end{column}
    \begin{column}{0.48\textwidth}
      \begin{alertblock}{Hátrányok}
        \begin{itemize}
          \item Ideiglenes inkonzisztencia
          \item Failover esetén adatvesztés kockázata
          \item Komplexebb olvasási logika
        \end{itemize}
      \end{alertblock}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}{Szinkron vs. aszinkron – döntési szempontok}
  \begin{itemize}
    \item \textbf{Konzisztencia igény}: kritikus adatok → szinkron
    \item \textbf{Teljesítmény igény}: magas throughput → aszinkron
    \item \textbf{Hálózat megbízhatósága}: nagy latency → aszinkron
    \item \textbf{Üzleti kockázat}: adatvesztés megengedett? → aszinkron
  \end{itemize}
  \begin{alertblock}{Ökölszabály}
    Ha az írások számítanak jobban, válaszd a szinkront. Ha az olvasási skálázás
    és az alacsony latency fontos, válaszd az aszinkront.
  \end{alertblock}
\end{frame}

\begin{frame}{Hogyan használjuk a gyakorlatban?}
  \begin{block}{Tipikus architektúra}
    \begin{itemize}
      \item \textbf{Primary} kezeli az írásokat
      \item \textbf{Replica} kiszolgálja az olvasásokat
      \item \textbf{Load balancer} irányítja az olvasást a replikákhoz
    \end{itemize}
  \end{block}
  \begin{exampleblock}{ORM/Prisma oldal}
    A legtöbb ORM-ben (így Prismában is) külön connection stringet használsz az
    író és az olvasó adatbázisokhoz, vagy read-replica routert konfigurálsz.
  \end{exampleblock}
\end{frame}