Added last few chapters (100.00% done)

This commit is contained in:
Balazs Toldi 2021-01-07 12:53:05 +01:00
parent 407bbf1d5a
commit b56820b67d
Signed by: Bazsalanszky
GPG key ID: 933820884952BE27

173
db.org
View file

@ -6,6 +6,7 @@
#+LATEX_HEADER: \usepackage{authblk}
#+LATEX_HEADER: \usepackage{blindtext}
#+LaTeX_HEADER: \setcounter{secnumdepth}{5}
#+LaTeX_HEADER: \usepackage{tikz}
* Adat, információ, tudás. Metaadatok. Strukturált, szemi-strukturált és nem strukturált adatok
** Adat
@ -1320,5 +1321,177 @@ kerül.
Ha a redo helyreállítás elszáll, akkor egyszerűen megismételendő, hiszen
a 4. pontban végzett műveletek hatása az adatbázisra idempotens (idempotent).
* Ellenőrzési pontok
A redo helyreállításnál előfordulhat, hogy túl régi időpontra kell visszamennie
ahhoz, hogy a helyreállításhoz megfelelő időpontot találjunk. Ezen a problémán segítenek az ellenőrzési pontok, amikor kikény-
szerítik az adatbázisnak egy konzisztens állapotát:
1. ideiglenesen megtiltjuk az új tranzakciók indítását és megvárjuk, amíg minden
tranzakció befejeződik vagy abortál
2. Megkeressük azokat a memóriablokkokat, amelyek módosultak, de még nem
kerültek a háttértárba
3. Ezeket a blokkokat visszaírjuk
4. naplózzuk az ellenőrzisi pontot
5. A naplót is kiírjuk a háttértárra
** Előnyök
- redo helyreállításnál, csak a legutóbbi ellenőrzési pontig kell visszamenni a naplóban
- a napló korábbi részei eldobhatóak (ha más miatt sem kell)
- csökkenti a lavinák számát
** Hátrányok
- csökkenti a tranzakciós teljesítményt
** Ütemezése
- adott idő eltelte után
- adott számú tranzakció után
- az előző kettő kombinációja
* Időbélyeges tranzakciókezelés R/W modellben
** Időbélyeg
Olyan érték, amelyet minden tranzakcióhoz szigorú egyediséget biztosítva
rendelünk hozzá, és amely arányos (legegyszerűbb esetben azonos) a tranzakció
kezdőidejével. Jele: $t(\text{Tranzaakció})$
Ezzel a módszer egy soros ekvivalens ütemezést valósíthatunk meg. Ehhez az
időbélyegek egyértelmű sorrendjét határozzuk meg, az egyes tranzakciókat
pontszerűnek vesszük, azaz nem vesszük figyelembe az adott tranzakció időigényét.
Az időbélyeges ütemező működése:
1. megvizsgálja minden írás-olvasás előtt a hivatkozott adategység időbélyegét,
2. ha ez a sorosítási szabályokkal összhangban van (ld. később), akkor az
adategység időbélyegét felülírja a műveletet végrehajtó tranzakció
időbélyegével,ha nincs összhangban, akkor pedig abortálja a tranzakciót.
Időbélyegek kiosztása során az egyértelműség kritikus:
- Egyprocesszoros rendszer: processzor időbélyege
- Többprocesszoros rendszer: az processzor vagy csomópont azonosítója is
hozzáveendő.
** R/W modell
Két féle időbélyeget különböztet meg a modell:
- $R(A)$: olvasási időbélyeg
- $W(A)$: írási időbélyeg
*** Négy lehetséges eset
Legyen $T$ egy vizsgálandó tranzakció és $t(T)$ a $T$ tranzakció időbélyege,
illetve $A$ adategység, $R(A)$ olvasási- és $W(A)$ írási-időbélyege
1. $t(T) > R(A) \wedge t(T) > (W)$: Mindkét művelet elvégezhető
\begin{center}
\begin{tikzpicture}
% a straight line segment
\draw (0.5,0) -- (10.5,0);
% the ticks and their labels
\foreach \x in {1,...,10}
\draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax};
% the thicker segment
%\draw[ultra thick] (2.06,0) -- (8.94,0);
% the labels
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (3.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (5,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (8.0,0) {};
\node at (5.5,-0.8) {Időbélyegek azonosítója};
\end{tikzpicture}
\end{center}
2. $t(T) < R(A) \wedge t(T) < W(A)$: Egyik művelet sem végezhető el, abortálni
kell
\begin{center}
\begin{tikzpicture}
% a straight line segment
\draw (0.5,0) -- (10.5,0);
% the ticks and their labels
\foreach \x in {1,...,10}
\draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax};
% the thicker segment
%\draw[ultra thick] (2.06,0) -- (8.94,0);
% the labels
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (3.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (5.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (8,0) {};
\node at (5.5,-0.8) {Időbélyegek azonosítója};
\end{tikzpicture}
\end{center}
3. $t(T) < R(A) \wedge t(T) > W(A)$: Ha $T$ olvasni akar, akkor azt megteheti,
de ha írni akar, akkor abortálandó
\begin{center}
\begin{tikzpicture}
% a straight line segment
\draw (0.5,0) -- (10.5,0);
% the ticks and their labels
\foreach \x in {1,...,10}
\draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax};
% the thicker segment
%\draw[ultra thick] (2.06,0) -- (8.94,0);
% the labels
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (3.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (5.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (8,0) {};
\node at (5.5,-0.8) {Időbélyegek azonosítója};
\end{tikzpicture}
\end{center}
4. $t(T) > R(A) \wedge t(T) < W(A)$: Mindkét esetben abortálandó a tranzakció
\begin{center}
\begin{tikzpicture}
% a straight line segment
\draw (0.5,0) -- (10.5,0);
% the ticks and their labels
\foreach \x in {1,...,10}
\draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax};
% the thicker segment
%\draw[ultra thick] (2.06,0) -- (8.94,0);
% the labels
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (3.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (5.0,0) {};
\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (8,0) {};
\node at (5.5,-0.8) {Időbélyegek azonosítója};
\end{tikzpicture}
\end{center}
* Az időbélyeges R/W modell és a 2PL összehasonlítása
Elképzelhető, hogy egy ütemezés sorosítható
időbélyegesen, de kétfázisú zárakkal nem
időbélyegesen is és zárakkal is (pl. minden olyan ütemezés, amelyben a
tranzakciók nem használnak közös adatokat),
kétfázisú zárakkal, de időbélyegesen nem,
időbélyegesen sem és zárakkal sem.
Tanulság: sem a zárakkal, sem az időbélyegekkel való sorosítás nem jobb egyér-
telműen a másiknál.
* Tranzakcióhibák és az időbélyegek
Elképzelhető olyan helyzet, amelyben egy $T_1$ tranzakció előállít egy $A$
adategységben értékeket, majd egy $T_2$ tranzakció ezt beolvassa, de később
$T_1$ valamilyen oknál fogva abortál. Ez a piszkos adat olvasásának esete,
amikor tehát lavinaveszéllyel kell számolni.
** Megoldások
1. elfogadjuk a lavinát, hiszen időbélyeges tranzakciókezelést tipikusan olyan
környezetbe használjuk, ahol eleve kevés az abort, tehát kisebb a lavina veszély
2. Megakadályozzuk a piszkos adat olvasását. Pl addig nem írunk az adatbázisba
adatot amíg a tranzakció el nem érte a kész pontját.
\begin{center}
\begin{tikzpicture}
% a straight line segment
\draw (0.5,0) -- (10.5,0);
% the ticks and their labels
\foreach \x in {1,...,10}
\draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt); %node[below,fill=white] {\the\numexpr\x +112\relax};
% the thicker segment
%\draw[ultra thick] (2.06,0) -- (8.94,0);
% the labels
\draw[black] (1.0,0.15) -- (1.0,-0.15) node[below] {\shortstack{írás,olvasás művelete\\ időbélyeg ellenőrzése}};
\draw[black] (5.0,0.15) -- (5.0,-0.15) node[below] {készpont};
\draw[black] (9.0,0.15) -- (9.0,-0.15) node[below] {írás az adatbázisba};
\end{tikzpicture}
\end{center}
* Verziókezelés időbélyegek mellett ($MVCC$)
Feltételezés: minden adatelem írásakor a régi értéket is megőrizzük.
Kézenfekvő megoldás, ha idősor jellegű adatokat kívánunk tárolni (betegek adatai,
tőzsdei árfolyamváltozások, szoftver projektek verziói stb.).
Ez megoldja a ``jövőben olvasás'' problémáját (Tehát $T$ olvasni akarna
$A\text{-ból}$,de $t(T)<W(A)$), hiszen mivel tároljuk $A$ korábbi
változatait,így adott esetben ezt olvasná ki.
Ha $T$ írni akarja $A\text{-t}$ és $t(T)<R(A)$ akkor $T\text{-t}$ abortálni kell.