Webcam Diggs Cam


Datenorganisation

Kapitel 6 - Physische Datenorganisation

Inhalt
  • Was ist Physische Datenorganisation?
  • Wie erfolgt die Adressierung von Daten?
  • Möglichkeiten der Indexierung - Zugriffspfade für Primärschlüssel
  • Möglichkeiten für Zugriffspfade für Sekundärschlüssel
  • Möglichkeiten für Verbindungen zwischen Datensätzen

Was ist die zentrale Frage bei der physischen Organisation?

Wie soll das Speichern von Dateien erfolgen, die aus einzelnen Sätzen bestehen? Dabei geht es im Besonderem um Sätze/Blöcke, Arten der Primärorganisation und Sekundärorganisation, um Speicherstrukturen für Relationen und um verschiedene Join-Algorithmen.

Was ist ein Satz?

Ein Satz besteht aus einer festen Anzahl von Feldern. Die Schlüssel werden analog zum Relationenmodell betrachtet und der Blockzugriff erfolgt über die Blockadresse. Das Speicherverwaltungsystem bietet den Zugriff auf Blöcke bestimmter Größe und verwaltet unbenutzte und gelöschte Blöcke.

Was ist Primärorganisation und was ist Sekundärorganisation?

Primärorganisation: Organisation der Hauptdatei (enthält die Daten) und der Hauptzugriffsstruktur

Sekundärorganisation: Eine alternative Zugriffsstruktur neben der primären Zugriffsstruktur

Wie arbeiten Festplattengeräte?

Um Daten dauerhaft speichern zu können, wird ein Externspeicher benötigt. Diese sind um ein Vielfaches langsamer als Arbeitspeicher und Caches. Genau aus diesem Grund sind ausgeklügelte Strukturen und Zugriffsmöglichkeiten notwendig.

Eine Festplatte besteht aus mehreren übereinander liegenden Magnetscheiben. Diese Oberflächen sind in eine feste Anzahl von gleichgroßen Spuren eingeteilt. Übereinander liegende Spuren bilden Zylinder. Die Festplattenkapazität setzt sich dann in erster Linie aus Zylindern zusammen, welche genauso viele Spuren haben, wie es Oberflächen gibt. Jede Spur ist wiederum in eine feste Anzahl von Sektoren eingeteilt, welche die kleinsten adressierbaren Einheiten in einer Festplatte darstellen. So sind Informationen über Angabe von Zylinder, Oberfläche und Sektornummer abrufbar.

Wo ist der Zusammenhang zwischen Records und Dateien?

DBMS speichern ihre Tupel in Form von Records ab. Solche Records werden in Dateien abgelegt. Eine Datei ist eine vom Betriebssystem verwaltete logische Einheit. Relationale DBMS fassen aber oft ihre Daten in einer eigenen allumfassenden katalogisierten Datei zusammen.

Wozu werden Datenblöcke verwendet?

Um die Effizienz zu erhöhen werden mehrere Sektoren zu Blöcken zusammengefasst. (oder auch Pages etc.) Der Vorteil dieser Herangehensweise ist, das DBMS durch die Nutzung von Blöcken unabhängiger von den Geräten werden.

Wie funktioniert die Adressierung?

Adressiert kann ein Block über die Adresse des ersten Sektors dieses Blockes werden. Wie so oft werden auch hier meist logische Adressen statt der physikalischen Adressen verwendet. Die logischen Adressen werden dann einfach durchnummeriert, um einen einfachen Zugriff zu gewährleisten. Der Vorteil an der logischen Adressierung ist, dass bei Umspeicherung nur die Umsetzungsfunktion zwischen logischer und physischer Adresse angepasst werden muss. So müssen die vielfach auftretenden Adressverweise in den Verwaltungsdaten im Gegensatz zur physikalischen Adressierung nicht aktualisiert werden.

Wie erfolgt die Adressierung für physische Sätze?

Man unterscheidet physische, seitenbezogene und logische Adressierung. Die Adresse besteht aus zwei Komponenten: Adresse der Datei und Position innerhalb der Seite. Der Zugriffsmanager ermittelt die benötigte Seite. Diese wird vom Systempuffermanager angefordert, der diese bei Bedarf durch einen Betriebssystemaufruf vom Externspeicher anfordert.

Wie werden Tupeladressen berechnet?

Der Datenmanager fordert Tupel mit bestimmten Attributwerten an. Die Adressen werden dann über die Indizes vom Zugriffsmanager bestimmt.

Wozu dient die Indexierung?

Indexe werden verwendet, um die Abarbeitung der Zugriffspfade zu optimieren. Im einfachsten Fall sind alle Datensätze absteigend nach dem Primärschlüssel sortiert gespeichert. Um nun die Suche nach einem speziellen Datensatz zu beschleunigen, wird neben den Daten eine Art Inhaltsverzeichnis (Index) gepeichert. Ein Index hat immer die gleiche Struktur:
Index := (Primärschlüssel, Blockidentifikator)
Indexe sind in der Regel nicht dicht, d.h. sie enthalten nicht alle Schlüsselwerte des Primärschlüssels. Desweiteren können Indexe kaskadiert werden, was bei großen Datenbeständen sinnvoll erscheint.

Ist ein Index nicht dicht, wird bei einer Suche über den am naheliegensten Blockidentifikator zugegriffen und fort an sequentiell oder binär in diesem Block weitergesucht.

Kaskadierter Index

Welche Arten der Primärorganisation kennen Sie?

  1. Ungeordnete Dateien
  2. Indexsequentiell (siehe ISAM)
  3. Clustered
  4. Hashorganisation
  5. B*-Baum
  6. mehrdimensionale Strukturen (Grids,k-d-Bäume...)

Wie arbeitet ISAM - Indexed-Sequential Access Method?

Hauptdatei: enthält die Datensätze
Indexdatei: ermöglicht effizienten Zugriff nach Schlüssel

Für ein sortiert gespeichertes File gibt es einen Index, welcher für die Werte dieses Schlüssels die Adressen der entsprechenden Tupel referenziert. Ein dünner Index hat zur Folge dass nach der Referenzierung eine Sequentielle Suche nach dem gewünschten Tupel folgt. Ein dichter Index ist eine eindeutige Abbildung der Schlüsselmenge auf die Tupel, was natürlich viel Speicher in Anspruch nimmt.

ISAM kann einstufig aber auch mehrstufig implementiert sein. Dabei liegen die Daten an den "Blättern" dieses mehrstufigen Indexes. Nach Löschoperationen kann es notwendig werden, die Verwaltungsdaten aus Performancegründen neu zu organisieren. Durch Einfügen können so genannte Überlaufketten entstehen. Um Überlauf bis zu einem gewissen Grad vorzubeugen, werden Blöcke beim Erstellen nicht vollständig gefüllt, um Spielraum bereitzustellen. (Speicherreserve)

So eignet sich ISAM ideal für große, statische Datenbestände. Bestände mit starken Schwankungen werden besser als B*-Baum repräsentiert, da dort der Index dynamisch an das Bestandsmaß angepasst wird.

Wie funktioniert die clustered Methode?

Clustered ist eine Abart der indexsequentiellen Speicherung. Dabei ist die Hauptdatei nicht nach dem Primärschlüssel sortiert (Sortierung nach "Schlüsselfeld")! Die indizierten Felder der Hauptdatei dürfen in unterschiedlichen Sätzen den gleichen Wert annehmen. Das Einfügen, Suchen und Löschen erfolgt wie bei der indexsequentiellen Form.

Was ist vorteilhaft am clustern?

Das Clustern mehrerer Dateien! Dabei werden Tupel verschiedener Relationen mit gleichen Werten in bestimmten Feldern (clustering attributes) in benachbarten Blöcken gespeichert, um somit Abfragen schneller durchführen zu können.
  • prejoin -> Abfragen schneller
  • geringerer Speicherbedarf, da Feld nur einmal gespeichert
Nachteil ist aber, dass Relation auf mehrere Blöcke verteilt wird und somit bei Abfragen innerhalb einer Relation mehr Zugriffe notwendig werden, als ohne Clustering...

Wozu wird der Sekundärindex benötigt?

Suchanfragen welche nicht unmittelbar durch den physikalischen Schlüssel erschlagen werden können, machen in großen Datenbanken die Einrichtung von so genannten Sekundärindexen erforderlich. Ein Sekundärindex verwendet normalerweise individuelle Record-Adressen, weshalb nach Bestandsänderungen dieser Index auch angepasst werden muss.

Form eines Sekundärindex:

Attributwert 1, Adresse 1
Attributwert 2, Adresse 2
Attributwert 3, Adresse 3
...
Attributwert n, Adresse n

Wie arbeiten Baumstrukturen als mehrstufige Indexe?

ISAM hat den Nachteil, dass mit zunehmender Anfrage/Update Aktivität die Performance immer schneller abnimmt. Bäume haben logarithmische Komplexität und eignen sich deshalb ebenfalls zur Verwaltung der Indexe. Im besonderen Maße werden B-Bäume verwendet (jedes Blatt gleich Tief ist, wächst von unten nach oben, bestimmter Füllgrad für Knoten). B*-Bäume sind B-Bäume, welche nur an den Blättern einen bestimmten Füllgrad der Knoten verlangen, um den Baum im Speicher halten zu können.

Sie vereinen die Vorteile von ISAM und B-Bäumen, da sie erstens strikt zwischen Verwaltungsdaten und Bestand (an den Blättern) trennen und gleichzeitig dynamisch ihre innere Struktur nach Operationen anpassen bzw. reorganisieren.

Ein B*-Baum mit Parameter k wird charakterisiert durch folgende Eigenschaften:
  • Jeder Weg von der Wurzel zu einem Blatt hat dieselbe Läange.
  • Jeder Knoten außer der Wurzel und den Blättern hat mindestens k Nachfolger.
  • Jeder Knoten hat höchstens 2k Nachfolger.
  • Die Wurzel hat keinen oder mindestens 2 Nachfolger.

Hash-Verfahren als Zugriffspfad für Primärschlüssel?

Wie bei Hash üblich, wird über eine Hash-Funktion, deren Eingabewerte hier die Primärschlüssel sind, eine Speicheradresse direkt berechnet. Das Verfahren wird auch Streuspeicherverfahren genannt, da es die Datensätze im gesamten verfügbaren Speicherbereich verteilt.

Nun kann es vorkommen, dass zwei oder mehr Primärschlüssel auf den gleichen Block zeigen. Eine sogenannte Kollision entsteht. Aufgelöst wird dieses Problem entweder
  • mit Überlaufketten
  • durch Nutzung des ersten freien Speicherbereiches im Hashbereich
  • durch Einführung einer sekundären Hashfunktion für kollidierte Datensätze

Warum ist Hashing als Speicherverfahren für Datenbanken ungeeignet?

Hashing eignet sich nicht, um Datensätze sortiert auszugeben oder Bereichsabfragen vorzunehmen. Dafür sind Indexstrukturen besser geeignet, da diese eine lexikografische Ordnung auf die Sätze definieren. Wenn bei Hashing eine Bereichsabfrage notwendig wird, müssen alle Datensätze gelesen werden!

Zugriffspfade als Listen?

Listen haben den Vorteil, dass sie eine vollständige Ordnung der Datensätze durch Zeiger implizieren. Unabhängig von der physikalischen Speicherung ergibt sich durch Listen immer eine logische Datei.
Der Nachteil ist aber, das bei n Elementen immer (n+1)/2 Datensätze zu durchforsten sind. Ausserdem kann es durch Einfügen oder Löschen passieren, dass die Liste sehr ungünstig im Speicherbereich verteilt wird, was sich negativ auf das Laufzeitverhalten auswirken würde.

Welche Primärorganisationen sind die schnellsten?

  • Hashorganisation: Hashtabelle + (Bucketlänge / 2)
  • Indexsequentiell (lockerer Index): log2(n/ed)
  • B*-Baum: < 1 + logd(n/e)
  • Dichter Index: log2(n/d)
n: Anzahl der Datensätze in der Hauptdatei
e: Anzahl der Datensätze pro Block in der Hauptdatei
d: Anzahl der Einträge pro Block in der Indexdatei

Wozu mehrdimensionale Suchstrukturen?

Beispiel:

Gesucht sind alle Personen mit der Eigenschaft
  • Alter zwischen 18 und 25 Jahre alt
  • Einkommen zwischen 2000 und 35000 €
  • PLZ zwischen 09000 und 09999
Mit eindimensionalen Suchstrukturen, müssten alle Abfragen einzeln mit je einer Komplexität von O(k + log n) vollzogen werden und anschließend die Teilmengen über Joins verbunden werden. Dies kann selbst bei Anfragen, welche nur geringe Datensätze zurückliefern sehr lange dauern.

Deshalb sind mehrdimensionale Suchstrukturen besser geeignet, da hier nicht ein-dimensionale-Schlüssel verwendet werden, sondern zwei oder mehr.

Was sind Gird Files?

Grid Files (Gitter mit variabler Gittergröße) werden wie k-d-Bäume für mehrdimensionale Suchanfragen benötigt. Sie verzichten auf die lineare Ordnung der Records und auf die Auszeichnung eines physischen Schlüssels. Sie ordnen Records in einen mehrdimensionalen Record-Raum ein, dessen Koordinatenachsen von den linear geordneten Wertebereichen der gewählten Attribute bestimmt werden. Es wird also ein mehrdimensionaler Raum aufgespannt.

Durch die mehrdimensionale Partitionierung eines Suchraumes lasses sich sogenannte Breichsabfragen beantworten.

Erreicht wird dies (bei k-dimensionalen Tupeln) durch
  • k Skalen zum Einstieg ins Grid-Directory (im Hauptspeicher)
  • ein Grid-Directory zum Finden der Bucket-Nr. (im Hintergrundspeicher)
  • Buckets für Datensätze (im Hintergrundspeicher)
zwei eindimensionale Skalen: welche die momentane Unterteilung der X- bzw. Y-Achse enthalten:

var X: array [0..max_x] of attribut_wert_x;
var Y: array [0..max_y] of attribut_wert_y;
ein 2-dimensionales Grid-Directory, welches Verweise auf die Datenblöcke enthält:
var G: array [0..max_x - 1, 0..max_y - 1] of pointer;

Was ist ein k-d-Baum?

K-d-Bäume sind spezielle binäre Suchbäume mit einem k-dimensionalen Suchschlüssel. Der mehrdimensionale Suchraum wird durch die Datenpunkte in d Dimensionen aufgeteilt. Die Daten werden unter Beachtung dieses Schlüssels im Suchbaum angeordnet, um so die mehrdimensionalen Bereichsabfragen effizient verarbeiten zu können.

Im 2-dimensionalen Fall gilt für jeden Knoten mit Schlüssel [x=y]:
im linken Sohnim rechten Sohn
auf ungerader Ebenealle Schlüssel <= xalle Schlüssel > x
auf gerader Ebenealle Schlüssel <= yalle Schlüssel > y

Warum Zugriffspfade für Sekundärschlüssel anlegen?

Suchanfragen beziehen sich oft nicht auf Primärschlüssel sondern auf nichtidentifizierende Attribute oder Attributkombinationen (Sekundärschlüssel), für die normalerweise nur eine sequentielle Suche des Datenbestandes zum Ergebnis führt. Ein weiterer Unterschied zu Primärschlüsseln ist, dass Sekundärschlüssel meist mehrere Datensätze identifizieren. Um das Problem zu Lösen werden Zugriffspfade für Sekundärschlüssel eingerichtet. Dafür gibt es zwei grundlegende Techniken:
  • Zugriffspfade in den Datensätzen durch Zeigererweiterungen (Listen etc.)
  • separate Zugriffspfad-Datenstrukturen (Invertierung, Kett-Sätze etc.)
Bei sekundären Pfaden wird also keine Umsortierung der Datensätze vorgenommen...

Bemerkung: Sekundärindexe verweisen direkt auf Datensätze, wogegen Primärindexe meist auf Blöcke verweisen, welche die Datensätze enthalten.

Welche Kriterien sollten bei Indexierung betrachtet werden?

Indiziere Attribute,
  • die oft in WHERE-Klausen vorkommen
  • die häufig auf ihr Maximum bzw. Minimum abgefragt werden
  • die in Join-Operationen verwendet werden
  • mit hoher Selektivität (viele verschiedene Attributwerte)
Indiziere nicht Attribute
  • mit geringer Selektivität
  • aus kleinen Relationen

Wie kann man Verbindung zwischen Sätzen unterstützen?

  • durch Invertierung (Erzeugung von Indexen)

  • durch Listen und Ringe, d.h. durch Verkettung
    verbindende Sätze in Listenstrukturen ablegen (schwierig bei n:m Beziehungen)

  • durch variable Zeigerfelder
    An jeden Satz wird ein Zeigerfeld variabler Länge angehängt, mit dessen Hilfe auf die zu verbindenden Sätze verwiesen wird.

  • durch Kettsätze
    Bei n:m Beziehungen zwischen Sätzen wird ein neuer Satztyp eingeführt in dem jedes Beziehungspaar durch einen Satzeintrag repräsentiert wird

Wie funktioniert die Invertierung?

Bei der Invertierung werden für Sekundärschlüssel separate Indexe angelegt.

Eine Datei heißt invertiert bezüglich A, wenn für einen Sekundärindex A ein eigener Index angelegt worden ist.

Sekundärschlüssel bestehen im Gegensatz zu Primärschlüsseln aus Datensätzen variabler Länge. Der Vorteil ist, dass falls eine Datei für mehrere Sekundärschlüssel invertiert ist, Anfragen nach Kombinationen dieser Schlüssel ohne Zugriff auf die eigentlichen Datensätze möglich werden.

Wo liegt der Unterschied zu Multi-List-Strukturen?

Multi-List-Strukturen erweitern die vorhandenen Datensätze um je ein Zeigerfeld pro Sekundärschlüsselattribut, welche entsprechend der der Schlüsselwerte zu einer logischen Folge miteinander verknüpft werden. Invertierung speichert dagegen die Indexwerte nicht in den vorhandenen Strukturen, sondern in zusätzlich angelegten Listen. (je eine Liste pro Sekundärschlüssel)

Was heißt Selektivität?

Eine hohe Selektivität ist vorhanden, wenn die Anzahl der durch den Schlüssel zu lesenden Datensätze sehr viel kleiner als die Gesamtanzahl der vorhandenen Datensätze ist.

Wozu Verbindungen zwischen Datensätzen?

Da Beziehungen zwischen Entities in einer Datenbank genauso enthalten sein müssen, wird es notwendig Verbindungen zwischen diesen Entities mit aufzunehmen.

Eine Verbindung realisiert eine Beziehung zwischen zwei Satztypen, so dass für jeden Satz der einen Beziehung alle zugehörigen Sätze der Anderen gefunden werden können, ohne auf andere Sätze als auf diese beiden zuzugreifen.

Dabei wird zwischen informationstragenden Verbindungen und nicht-informationstragenden Verbindungen unterschieden. Zweitere werden nur aus Effizienzgründen implementiert.

Wie können die Verbindungen realisiert werden?

  • durch Komposition von separaten internen Sätzen auf konzeptueller und logischer Ebene.
    D.h. die Beziehungen werden durch die Transformationsregeln realisiert!

  • durch direkte Verbindungen zwischen Sätzen verschiedener Typen auf der internen Ebene.
    Der Nutzen ist den Zugriff für häufig gefragte Beziehungen zu Beschleungigen!

Auf welche Arten lassen sich die Verbindungen auf interner Ebene realisieren?

  1. Invertierung (siehe oben)
  2. Phyisische Nachbarschaft (Sätze werden in einem zusammengefasst und gemeinsam gespeichert)
  3. Listen und Ringe (anhängen variabel langer Zeigerfelder an die Datensätze)
  4. Kettsätze (für rekursive m:n Beziehungen / Stücklisten)
  5. physische (Byte-Adressen / statisch) und logische Zeiger (dynamisch über Zuordnungstabelle)auf Datensätze

Wie werden Kettsätze realisiert?

Ein Kettsatz ist ein "Verbindungssatz" mit einer eigenen Struktur (neuer Datentyp). Die Struktur besteht aus einem Tupel (s,t), welches eine Verbindung zwischen s und t beschreibt. Dabei enthät jeder Verbindungssatz zwei Zeiger, von denen der Erste auf den Listenkopf von s und der zweite auf den Listenkopf von t zeigt und alle Elemente verbindet deren zweite Komponente t ist.

Wie können rekursive Verbindungen dargestellt werden?

Es gibt eine n:m-Beziehung zwischen verschiedenen Ojekten eines größeren Gesamtobjektes, welches wiederum Teil eines noch Größeren ist u.s.w... (Problem der Aggregation)

Man erstellt zwei separate Dateien. Beim Stücklistenproblem sind das Stammdatei (Daten) und Strukturdatei (Kettsatzdatei). Dabei enthält die Strukturdatei die Daten über die Bauteile (Nummer,Bezeichnung,Durchmesser...) und die Kettsatzdatei je einen Satz für jede Verbindung zwischen zwei Bauteilen.
Printansicht Inhalt Anfang zurück vor
Kapitel 1DBMS Konzept
Eigenschaften, Bestandteile, Ebenen...
Kapitel 2DB Entwurf
Qualitätsmerkmale, funktionale Abhängigkeiten, ER...
Kapitel 3Normalformen
Übersicht Normalformen, Anomalien...
Kapitel 4Relationalität
Regeln und Vorgehensweisen...
Kapitel 5Sprachen
relationale Sprachen, SQL, Query...
Kapitel 6Datenorganisation
Tertiärspeicher, Adressierung, Indexe, ISAM...
Kapitel 7Transaktionskonzept
Datenintegrität, Serialisierbarkeit, ACID...
Kapitel 8Concurrency Control
Read-Write Modell, Schedules, Prinzip...
Kapitel 9Scheduler & Recovery
2-Phasen-Sperren,Deadlocks,Recovery...
PDF download:
Kleine ÜbersichtNormalformen
DMBSDMBS Bestandteile
Concurrency ControlConcurrency Control
All In OneKomplett (115 KByte)
Quellen:
Gottfried Vossen
Datenbankmanagementsysteme
Heuer und Saake
Konzepte und Sprachen
Prof. Benn
Skript und Vorlesung
Relationale Datenbanken
Andreas Kelz
Word Wide Web
Verschiedenste Seiten
Links:
Relationale Datenbanken
Andreas Kelz
ER Modell
Universität Wien

login

last change 06.04.2008 16:28:56  © 2002 - 2005 Holger Kreissl