Added last few chapters (100.00% done)
This commit is contained in:
parent
407bbf1d5a
commit
b56820b67d
1 changed files with 173 additions and 0 deletions
173
db.org
173
db.org
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue