\section{Speicherung von Tupeln und Relationen}
\subsection{Ziele}
\begin{itemize}
		\item Relationen mit Mitteln der darunter implementierten Schichten sichern
		\item Anfragen (SQL) möglichst effizient auswerten
\end{itemize}
\subsection{Speicherung von Tupeln in Sätzen}
\subsubsection{Aufbau von Sätzen}
\begin{itemize}
		\item Sätze sind aus \textbf{Feldern} zusammengesetzt (Name, Typ, Länge)
		\item \textbf{Systemkatalog}\\Informationen über Felder und Reihenfolge
\end{itemize}
\subsubsection{Satztyp}
\begin{itemize}
		\item Menge von Sätzen mit gleicher Struktur $\rightarrow$ einmalige
				Beschreibung im Systemkatalog
		\item beim Speichern eines Satzes wird ihm ein Satztyp zugeordnet
		\item Länge der Sätze zumeist variabel
\end{itemize}
\textbf{Annahme: Reihenfolge der Felder egal}

\subsubsection{Anforderungen}
\textbf{Speicherplatzeffizienz}:
\begin{itemize}
		\item variable Länge
		\item undefinierte Werte nicht speichern
		\item Hilfsstrukturen minimieren
\end{itemize}

\textbf{direkter Zugriff auf Felder}:
\begin{itemize}
		\item ohne vorher andere Felder lesen zu müssen 
		\item direkt zur Anfangs-Byte-Position innerhalb des Satzes
\end{itemize}


\textbf{Flexibilität}:
\begin{itemize}
		\item Hinzufügen von Feldern bei allen Sätzen
		\item Löschen eines Feldes aus allen Sätzen
\end{itemize}

\subsubsection{Speicherungsstruktur im Satz}
Der Satz wird in zwei logische Teile untergliedert. Einer beinhaltet
alle Felder fester Länge und der andere alle der variablen. 
Mit Katalogdaten und Längenangaben im Satz, lässt sich \textbf{flexibel}
und \textbf{direkt} auf die Felder zugreifen.

\begin{figure}[H]
		\begin{center}
				\includegraphics[scale=1.0]{pics/satz_speicherstruktur.png}
				\caption{Variable Satz Speicherstruktur}
		\end{center}
\end{figure}
Würden man alle Felder mit den Zeiger erreichen, wäre das Speicherplatzverschwendung.
So sind alle Felder fester Größe direkt erreichbar.
\textbox{Speicheurngsstruktur in Sätzen}{
		Blatt 9 Aufgabe 2 üben.
}
\subsection{Speicherung von Relationen}
\subsubsection{Spaltenweise Speicherung (C-Store)}
\begin{itemize}
		\item Auf das Lesen hin optimiert. Gut für Auswertung
				großer Datenmengen
		\item Nur Attribute lesen, die gebraucht werden
		\item kompakte Speicherung der Attributwerte
\end{itemize}
\textbf{Prototyp}
\begin{itemize}
		\item speichert Sammlung von Spaltengruppen  
				über mehrere Sätze verteilt
		\item Sortierschlüssel ist ein Attribut
		\item Gruppen von Spalten = Projektion
		\item Speicherung
				\begin{itemize}
						\item \textbf{Schreibspeicher} für schnelles Einfügen und Ändern von Tupeln
						\item \textbf{Lesespeicher} für umfangreiche Analysen
				\end{itemize}
		\item Änderung durch Löschen und Einfügen durch Tuple Mover
\end{itemize}
\textbf{Projektionen}
\begin{itemize}
		\item Die Projektionen besitzen ein oder mehrere Attribute aus einer logischen
Tablle (ggf durch Fremdschlüssel auch Attribute aus anderen Tabellen)
		\item Duplikate bleiben erhalten
		\item Als Sortierschlüssel wird eines der Attribute hergenommen
\end{itemize}
\textbf{Komprimierungen}
Abhängig von zwei Eigenschaften der Spalte:
\begin{itemize}
		\item Sortierung (nach der Spalte selbst) : ja/nein
		\item Anzahl der verschiedenen Werte: wenig/viel
\end{itemize}
\begin{enumerate}
		\item sortiert mit wenigen verschiedenen Werten:\\
				organisiert in einem B-Baum mit
				\begin{itemize}
						\item dichter Packung $\rightarrow$ alle Seiten voll (keine Änderungen!)
						\item und großen Seiten $\rightarrow$ geringe Höhe
				\end{itemize}
		\item unsortiert mit wenigen verschiedenen Werten:\\
				Offset-Indexe: B-Baum für Abbildung von Positiionen in einer Spalte auf die Werte in dieser Spaltebegin
		\item sortiert mit vielen verschiedenen Werten:\\
				\begin{itemize}
						\item B-Baum mit dichter Packung
						\item Delta Codierung: Differenzen zum Vorgänger speichern
				\end{itemize}
		\item unsortiert mit vielen verschiedenen Werten
				\begin{itemize}
						\item unkomprimiert
						\item B-Baum mit dichter Packung als sek. Organisation möglich
				\end{itemize}
\end{enumerate}
\subsubsection{Ausführung von Anfragen}
\textbox{Schritte für Ausführung von Query:}{
\begin{enumerate}
		\item Syntaxprüfung
		\item gibt es die Relation und Attribute 
		\item wie heißt Datei zur Relation
		\item was für eine Datei ist das - direkt oder schlüsselbasiert
		\item gibt es passende Projektionen
		\item wo liegen die Verbund Indizes
		\item müssen Partitionen zusammgeführt werden
\end{enumerate}
}
