commit bfc8b5d6d40243232cb2cc63e493cb843419cd87 Author: Marco Ammon Date: Mon Feb 11 15:56:31 2019 +0100 Zusammenfassung der VL bis einschließlich Puffer diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad21aa3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,227 @@ +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync +*Notes.bib + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlo + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# easy-todo +*.lod + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +/auto/* + +# expex forward references with \gathertags +*-tags.tex + +### LaTeX Patch ### +# glossaries +*.glstex diff --git a/zusammenfassung.pdf b/zusammenfassung.pdf new file mode 100644 index 0000000..46fcc75 Binary files /dev/null and b/zusammenfassung.pdf differ diff --git a/zusammenfassung.tex b/zusammenfassung.tex new file mode 100644 index 0000000..cc470b5 --- /dev/null +++ b/zusammenfassung.tex @@ -0,0 +1,203 @@ +\documentclass[11pt,a4paper]{scrartcl} +\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry} +\usepackage[ngerman]{babel} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{mathrsfs} +\usepackage{scrextend} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{enumitem} +\usepackage{tikz-qtree} +\usepackage{mathtools} +\usepackage{latexsym} +\usepackage{algorithmicx} +\usepackage{csquotes} +\usepackage{pdfpages} +\usepackage{pgfplots} +\usepackage{hyperref} +\usepackage{listings} +\usepackage{pdflscape} +\usepackage{tikz} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usepackage{datetime} +\usepackage{xcolor} + +\pdfminorversion=7 % Import-Unterstützung für PDFs bis Version 1.7 +\pgfplotsset{compat=1.16} % verhindern, dass pgfplots im Rückwärtskompatibilitätsmodus arbeitet + +\theoremstyle{definition} +\newtheorem{aufgabe}{Aufgabe}[section] +\newtheorem{definition}{Definition}[section] + +\renewcommand\qedsymbol{} +\renewcommand*{\proofname}{Antwort} +\addto\captionsngerman{\renewcommand\proofname{Antwort}} + +\newcommand*{\bps}{\frac{\text{b}}{\text{s}}} +\newcommand*{\kbps}{\frac{\text{Kb}}{\text{s}}} +\newcommand*{\mbps}{\frac{\text{Mb}}{\text{s}}} +\newcommand*{\gbps}{\frac{\text{Gb}}{\text{s}}} +\newcommand*{\tbps}{\frac{\text{Tb}}{\text{s}}} + +\newcommand{\sql}[1]{\lstinline[frameround=fttt,language=SQL,numbers=left,breaklines=true,keywordstyle=\color{blue}\bfseries,basicstyle=\ttfamily\color{red},numberstyle=\color{black}]{#1}} + +\definecolor{fau_blau}{RGB}{26, 71, 115} + +\newcommand{\begriff}[1]{\textcolor{fau_blau}{\emph{#1}}} +\newcommand{\wichtig}[1]{\emph{#1}} + +\setlist[enumerate,1]{label={\alph*)}} +\setlist[enumerate,2]{label={\roman*)}} + +\title{Zusammenfassung IDB} +\author{Marco Ammon} +\date{\today} + +\begin{document} +\maketitle + +\section{Einführung} +\begin{itemize} + \item \begriff{Datenabstraktion} / \begriff{Datenunabhängigkeit}: persistentes Speichern und Wiedergewinnen (Auffinden und Aushändigen) von Daten \wichtig{unabhängig} von Details der Speicherung + \item \begriff{Schicht}: realisiert \begriff{Dienst} und stellt ihn per \begriff{Schnittstelle} zur Verfügung +\end{itemize} + +\section{Dateiverwaltung} +\begin{itemize} + \item \begriff{physische} Speichergeräte (z.B. Festplatten) werden durch \begriff{logische} abstrahiert (z.B. Neueinlesen bei Checksum-Fehlern) + \item \begriff{Block} als kleinste Einheit der IO + \item \enquote{Adresse} eines Blocks: (Zylinder, Spur, Sektor) + \item \begriff{Dateien} als benannte Menge von Blöcken + \item \begriff{blockorientierte} Zugriffsmethode: verwendet eindeutige, fortlaufende Blockadressen innerhalb der Datei +\end{itemize} + +\section{Sätze} +\begin{itemize} + \item \begriff{Satz} als zusammengehörende Daten eines Gegenstands der Anwendung (z.B. Tupel, Objekt) mit variabler oder fester Länge + \item \begriff{Satzdatei} als Sammlung von Sätzen, kann über verschiedene Blöcke verteilt sein + \item Ausprägungen: \begin{itemize} + \item \begriff{sequentiell}: \begin{itemize} + \item Reihenfolge der Abspeicherung und des Auslesens bereits mit Schreiben festgelegt + \item \wichtig{keine} Änderungen / Löschen möglich + \item kein wahlfreier Zugriff + \end{itemize} + \item \begriff{direkt}: \begin{itemize} + \item Verwendung sogenannter \begriff{Satzadressen} (hier als \begriff{TID}s realisiert; \wichtig{eindeutig} und \wichtig{unveränderlich}) als Adresstupel (Block, Index) + \item Abbildung von Index auf Offset innerhalb eines Blockes durch Array am Ende eines Blockes + \item erlaubt wahlfreien Zugriff + \item erlaubt Löschen von Sätzen: Index wird ungültig markiert, folgende Sätze nach vorne verschoben, Anpassung der Offsets + \item erlaubt Ändern von Sätzen: \begin{itemize} + \item \wichtig{ohne} Überlauf: Verschieben der folgenden Sätze, Anpassung der Offsets + \item \wichtig{mit} Überlauf: Satz wird in anderen Block verschoben, Verweis auf diesen wird angelegt, (evtl.) Anpassung der Offsets + \end{itemize} + \end{itemize} + \end{itemize} +\end{itemize} + +\section{Schlüssel} +\begin{itemize} + \item \begriff{Schlüsselwerte} als \enquote{inhaltsbezogene Adressen} + \item \begriff{Hashing}: \begin{itemize} + \item \begriff{Hash-Funktion} verteilt Schlüsselwert möglichst gleichmäßig auf verfügbare \begriff{Buckets} (Blöcke) + \item \begriff{Divisions-Rest-Verfahren}: $h(k) = (k \mod q)$ mit Schlüsselwert $k$ und Anzahl der Buckets $q$ + \item Problem des \begriff{Überlaufs} mit verschiedenen Lösungsmöglichkeiten: \begin{itemize} + \item \begriff{Open Addressing}: Ausweichen auf Nachbarbuckets + \item spezeille \begriff{Overflow-Buckets}: Bucket verweist auf \enquote{\wichtig{seinen}} Overflow-Bucket + \end{itemize} + \item \begriff{virtuelles Hashing} zur konstanten Reorganisation: \begin{itemize} + \item Anzahl der Buckets $q$, Sätze pro Bucket $b$ $\Rightarrow$ Kapazität $\coloneqq q \cdot b$ + \item Belegungsfaktor $\beta \coloneqq \frac{\text{Anzahl gespeicherter Sätze}\ N}{\text{Kapazität}}$ + \item Wenn $\beta > \text{Schwellwert}\ \alpha$, Menge der Buckets vergrößern + \item als \begriff{VH1}: \begin{itemize} + \item Anzahl der Blöcke direkt verdoppeln + \item neue Hashfunktion $h_2$ einführen + \item Bitmaske um Verwendung der neuen Hashfunktion zu verwalten + \item bei \wichtig{Einfügen} eines Satzes in ein \enquote{altes} Bucket Neuverteilung dieses Buckets mittels $h_2$, Bit setzen + \end{itemize} + \item als \begriff{Lineares Hashing}: \begin{itemize} + \item Positionszeiger $p$ + \item \wichtig{ein} neues Bucket anlegen + \item Bucket an Stelle $p$ mit $h_2$ aufteilen, $p$++ + \item wenn $h_1(k) < p$, dann mittels $h_2$ verteilen + \end{itemize} + \end{itemize} + \end{itemize} + \item \begriff{Indizes} mittels \begriff{Bäumen}: \begin{itemize} + \item \begriff{B-Baum}: \begin{itemize} + \item jeder \begriff{Knoten} ist genau einen Block groß + \item \wichtig{balanciert}, alle Blätter außer Wurzel immer mindestens zur Hälfte gefüllt + \item Knoten: \begin{itemize} + \item Anzahl der verwendeten Einträge $n$, es gilt $k \leq n \leq 2k$ + \item \begriff{Eintrag}: Tupel (Schlüsselwert, Datensatz, Blocknummer des Kindknotens) + \item Einträge nach Schlüsselwert \wichtig{sortiert} + \end{itemize} + \item Einfügen: wie Suchen; nur in Blattknoten; bei Überlauf \enquote{linke} und \enquote{rechte} Einträge als neue Knoten, \enquote{mittlerer} als \begriff{Diskriminator} in Eltern-Knoten einfügen + \item Löschen von Schlüssel $S$ im Blattknoten: \begin{itemize} + \item Entfernen und ggf. Unterlauf behandeln + \end{itemize} + \item Löschen von Schlüssel $S$ in innerem Knoten: \begin{itemize} + \item betrachte doe Blattknoten mit direktem Vorgänger $S'$ und direktem Nachfolger $S''$ von $S$ + \item wähle den größeren + \item ersetze $S$ je nach Wahl durch $S'$ bzw. $S''$ + \item lösche entsprechenden Schlüssel $S'$ bzw. $S''$ und ggf. Unterlauf behandeln + \end{itemize} + \end{itemize} + \item \begriff{B*-Baum} / \begriff{B+-Baum}: \begin{itemize} + \item Sätze stehen \wichtig{ausschließlich} in Blattknoten + \item innerer Knoten: \begin{itemize} + \item Anzahl der verwendeten Einträge $n$ + \item Eintrag: Tupel (Referenzschlüssel, Blocknummer des Kindknotens) + \end{itemize} + \item Blattknoten: \begin{itemize} + \item Anzahl der verwendeten Einträge $n$ + \item Vorgänger-Zeiger, Nachfolger-Zeiger + \item Eintrag: Tupel (Schlüsselwert, Datensatz) + \end{itemize} + \item Löschen ohne Unterlauf: lösche Satz aus Blatt; Diskriminator muss \wichtig{nicht} geändert werden + \item Löschen mit Unterlauf:\begin{itemize} + \item Ist Anzahl der Einträge des Blatts und eines Nachbarknotens größer als 2k, verteile Sätze neu auf beide Knoten + \item ansonsten mische beide Blätter zu einem einzigen + \end{itemize} + \end{itemize} + \item Müssen nicht zwangsläufig zur \begriff{Primärorganisation} verwendet werden, können als \enquote{Sätze} z.B. auch nur Satzadressen enthalten + \end{itemize} + \item \begriff{Bitmap-Indizes}: eine Bitmap \wichtig{pro Schlüsselwert} +\end{itemize} + +\section{Puffer} +\begin{itemize} + \item Hauptspeicherbereich, der Blöcke aufnehmen kann, um (Lese-/Schreibe-) Zugriffe zu \wichtig{beschleunigen} + \item \begriff{Ersetzungsstrategie}: \enquote{Welcher Block wird verdrängt?} \begin{itemize} + \item \begriff{first in, first out} (FIFO): \enquote{ältester} Block + \item \begriff{least frequently used} (LFU): am seltensten benutzter Block + \item \begriff{least recently used} (LRU): am längsten nicht mehr benutzter Block + \item \begriff{second chance} (CLOCK): Approximation von LRU mit einfacherer Implementierung: \begin{itemize} + \item Jeder Block im Puffer besitzt ein \begriff{Benutzt-Bit} + \item bei Verdrängung Suche mit Zeiger + \item falls Benutzt-Bit 1, auf 0 setzen + \item falls Benutzt-Bit 0, Block ersetzen + \item \textbf{TODO:} Muss immer weitergegangen werden? + \end{itemize} + \end{itemize} + \item Zustand im Fehlerfall hängt unter anderem von \begriff{Einbringstrategie} (siehe \textbf{TODO} Recovery) und \begriff{Seitenzuordnung} ab + \item Seitenzuordnung: \enquote{Welche Blöcke (in einer Datei) gehören zu einer Seite (im Puffer)?} \begin{itemize} + \item \begriff{direkt}: aufeinander folgende Seiten werden auf aufeinander folgende Blöcke einer Datei abgebildet + \item \begriff{indirekt}: \begriff{Page Table} enthält zu jeder Seite eine Blocknummer + \end{itemize} + \item Seiteneinbringung: \begin{itemize} + \item \begriff{direkt}: Bei Verdrängung aus Puffer wird genau der Block überschrieben, aus dem ursprünglich eingelagert wurde (\enquote{update-in-place}) + \item \begriff{indirekt}: Bei Verdrängung aus Puffer wird in einen freien Block geschrieben. + \end{itemize} + \item Problem der indirekten Seiteneinbringung: \enquote{Wann können alte Blöcke gelöscht werden?}; verschiedene Lösungsansätze: \begin{itemize} + \item \begriff{Schattenspeicher}: \begin{itemize} + \item Änderungen nur auf Kopien, die periodisch dann mit \enquote{gesicherter} Version vertauscht wird + \end{itemize} + \item \begriff{Twin Slots}: \begin{itemize} + \item jede Seite hat zwei Blöcke + \item immer beide lesen, bei Änderungen älteren überschreiben + \end{itemize} + \end{itemize} +\end{itemize} +\end{document} \ No newline at end of file