290 likes | 459 Vues
Proseminar: Indexstrukturen für Datenbanken Signature Files. Sommersemester 2000. Alexander Wey wey@informatik.uni-bonn.de. Überblick. Was sind Signature Files ? Wie erstelle ich Signature Files ? Vertikale Partionierung (ohne Kompression) Vertikale Partionierung (mit Kompression)
E N D
Proseminar:Indexstrukturen für DatenbankenSignature Files Sommersemester 2000 Alexander Wey wey@informatik.uni-bonn.de
Überblick • Was sind Signature Files ? • Wie erstelle ich Signature Files ? • Vertikale Partionierung (ohne Kompression) • Vertikale Partionierung (mit Kompression) • Literaturquellen • Schlussbemerkung
Was sind Signature Files ? • Signature Files basieren auf der Idee des inexakten Filters : • Einträge einer Datenbasis, welche eine bestimme Bedingung erfüllen, können effizient herausgefiltert werden (z.B. Suchanfragen) • Leider können hierbei Fehler auftreten, d.h. es werden falsche Einträge herausgefiltert (sogenannte False Drops) • Signaturen werden durch die Abbildung von Wörtern auf Bitstrings mittels Hash-Funktion erzeugt. • Dokumente werden in einer Textdatei gespeichert und die Signaturen in einer separaten Datei, dem Signature File
Vor – und Nachteile • Signatur – basierte Methoden sind ca. 1 bis 2 Größenordnungen schneller alsString – Matching • Der zusätzlich benötigte Speicherplatz ist sehr gering • Signatur – basiert : 10 – 15 % mehr Speicherplatz • Invertierte Listen : 50 – 300 % mehr Speicherplatz • Einfügungen sind ohne Reorganisation der Signature Files möglich. • Einfügen geschieht durch „anhängen“ • Dadurch in WORM – Systemen (Write once, Read many) gut anwendbar • Nachteil : False Drops und Ineffizienz für große Datenbanken
Wie erstelle ich Signature Files ??? • Das am meisten angewendete Verfahren zur Erstellung einer Signatur heißt Superimposed Coding • Man bildet eine vorgegebene Zahl D von Wortsignaturen und überlagert dann diese • Vorgehensweise : • Dokument in logische Blöcke unterteilen • Ein Block enthält eine konstante Anzahl D zu indexierenden Wörtern (Wörter eines Blockes sind alle unterschiedlich) • Jetzt wird für jeden Block des Dokumentes, die einzelnen Signaturen der Wörter gebildet • Jede Wortsignatur besteht aus einem Bit-Muster der Größe F in dem m Bits per Hash-Funktion gesetzt werden
Ein Beispiel zur Überlagerung • Die Wortsignaturen werden mit ODER verknüpft und bilden damit die Blocksignatur • Beispiel (Größe F = 12 Bits, m = 4 Bits pro Wort, D= 2 Wörter) Um die Signatur des gesamten Dokumentes zu erhalten (Signature File) werden alle Blocksignaturen aneinandergehängt
Suchanfrage • Das erzeugte Signature File können wir nun zum Suchen nach einem Wort z verwenden • Vorgehensweise : • Für das zu suchende Wort z wird dessen Signatur Sz erzeugt. • Das Signature File wird durchsucht, indem für jede Blocksignatur Sb eine UND – Verknüpfung (bitweise) mit der Signatur des Suchwortes durchgeführt wird • Wenn Sz =Sz UNDSb gilt, wird b in die Menge der richtigen Kandidaten aufgenommen • Nach vollständiger Durchsuchung des Signature Files kann man noch False Drops eliminieren, indem man in der Menge der richtigen Kanditaten eine Stringsuche nach dem Wort z durchführt • Man erhält nun die Menge der Ergebnisse
Sequential Signature Files • Im Prinzip stellt ein Signature File für N Blöcke eine Bitmatrix F x N dar • Der einfachste Weg diese Matrix zu speichern, ist nacheinander die Zeilen zu speichern (SSF) • Hierzu braucht man neben der Datenbasis und dem Signature File eine weitere Datei, welche auf die Blöcke verweist • Diese Verweisdatei enthält für jede Zeile der Signaturmatrix einen Verweis auf die entsprechende Position in der Datenbasis
Schema von SSF F Bits Textdatei Verweisdatei N Blöcke
Kompression • Um kostbaren Speicherplatz zu sparen, kann man die Signatur komprimieren • Gut komprimieren lassen sich Signaturen mit wenig gesetzten Bits • Bei der Erstellung einer Wortsignatur wählt daher man den Parameter m möglichst klein • Die Idee der Kompression basiert darauf, die Intervalle zwischen den gesetzten Bits zu erfassen (run-length encoding – Verfahren)
Beispiel zur Kompression L1 L2 L3 L4 L5 Blocksignatur = 0000 1 00 1 000000 1 0 1 000 • Die erzeugte Blocksignatur kann in Gruppen unterteilt werden :
Bit – Block Kompression BC • Basiert auf der Komprimierung der Bit-Blöcke • Auch hier werden die Signaturen sequentiell gespeichert, zuvor aber komprimiert • Für jeden Bit-Block erstellen wir eine Signatur mit einer variablen Größe • Die Variable Bit – Block Kompression VBC ist wie BC aufgebaut mit dem einzigen Unterschied, dass die Bitblock – Länge b variabel ist. Sie wird entsprechend der Anzahl W (die Anzahl der gesetzten Bits pro Zeile der Matrix) zu bopt angepasst
Beispiel für Bit – Block Kompression • Die Signatur besteht aus 3 Teilen • 1. Teil : besteht aus 1 Bit, welches gesetzt wird, wenn der zugehörige Bitblock ein gesetztes Bit enthält, falls nein entfallen Teile 2 und 3 • 2. Teil : gibt die Anzahl der gesetzten Bits im Bitblock an. Dabei wird die Anzahl – 1 gespeichert und eine 0 angehängt • 3. Teil : gibt den Abstand zwischen dem Anfang des Bitblocks und der gesetzten Bits an Das komprimierte SSF lautet : 01011100000111000
Vertikale Paritionierung (ohne Kompression) • Bei der vertikalen Partionierung speichert man die Signaturmatrix spaltenweise in sogenannten Bit – slices (zu deutsch : Scheiben) • Idee : Unnötige Informationen werden nicht in den Hauptspeicher geladen. • Bei SSF – Verfahren werden die Blocksignaturen komplett gelesen • Für den Vergleich zwischen der Blocksignatur und der Signatur des zu suchenden Wortes werden nicht alle Bits der Blocksignatur benötigt, sondern nur die Bits der Positionen, die in der Anfragesignatur gesetzt sind • Wir lernen jetzt folgende Konzepte kennen : • BSSF (Bit-sliced Signature Files) • BSS`F • FSSF (Frame – sliced Signature Files) • GFSSF (Generalized frame – sliced Signature Files)
Bit – sliced Signature Files (BSSF) • Bei SSF werden die einzelnen Bits einer Signatur in F verschiedenen Dateien gespeichert Jede Datei entspricht demnach einer bestimmten Bitpositon in einer Zeile der F x N Matrix • Bei einer Suche nach einem Wort braucht man nur die Einträge der m Bitscheiben zu lesen (anstatt alle F Bits), deren Bits in der Signatur des gesuchten Wortes gesetzt sind • Diese verküpft man mit UND, um einen Vektor der Länge N zu erhalten. • Die Stellen des Vektors, wo Bits gesetzt sind, deuten auf die zugehörigen logischen Blöcke hin • Das Einfügen eines Eintrages benötigt F Plattenzugriffe, einen pro Datei
BSSF - Schema F Dateien Verweisdatei N - Blöcke N
BSS‘F • BSSF – Verfahren sieht vor, einen Wert für m zu wählen, so dass die Signatur ca. 50 % gesetzte Bits enthält. (typischer Wert für m = 10, d.h. 10 Plattenzugriffe) • BSS‘F wählt den Parameter m möglichst klein, damit die Anzahl der Plattenzugriffe sinkt • Hierfür werden größere Signaturen benötigt, damit eine annähernd gleiche False Drops Wahrscheinlichkeit erreicht werden kann
Frame – Sliced Signature Files (FSSF) • Idee : Man speichert ähnliche Signaturen mittels Hash – Funktionen hintereinander • Dies hat den großen Vorteil, dass bei einer Suchanfrage sequentiell und nicht zufällig auf die Platte zugegriffen wird Geschwindigkeitssteigerung • Die Dokumentsignatur wird in k Frames mit s Bits aufgeteilt • Jedes Wort wird einem Frame per Hash – Funktion zugeordnet. Mit einer anderen Hash – Funktion werden dann m Bits im Frame gesetzt
Beispiel zu FSSF F = 12, s = 6, k = 2, m= 3 Das Wort free wird dem 2. Frame zugeordnet und es werden 3 Bits gesetzt, das Wort text wird dem 1. Frame zugeordnet, ebenfalls mit 3 gesetzten Bits Die Signaturmatrix wird frameweise gespeichert Bei der Suche brauchen wir nur ein Frame pro Wort zu laden
Generalized Frame – sliced Signature Files (GFSSF) • SSF, BSSF, BSS‘F, FSSF sind Spezialfälle von GFSSF. • Zur Wiederholung , die Parameter : • F = Größe des logischen Blockes • m = Anzahl der gesetzten Bits im Block • n = Anzahl festgelegter Frames mit m gesetzten Bits • k = Anzahl der Frames • Es handelt sich um SSF, wenn k = 1 und n= 1 (Dokumentsignatur besteht aus einem Frame) • Es handelt sich um BSSF, BSS‘F, wenn k=F und n=m • Wenn n=1 gilt, dann liegt die FSSF Methode vor
Vertikale Partionierung (mit Kompression) • Wir haben kennengelernt, wie man Signaturmatrizen mit wenig gesetzten Bits komprimiert • Dieses Verfahren wenden wir an, und speichern nur die Abstände der gesetzten Bits für jede Bitscheibe • Übersicht über folgenden Methoden : • Compressed Bit Slices • Doubly Compressed Bit Slices • No False Drops Method
Compressed Bit Slices (CBS) • Wir verlangen, dass m = 1 gilt. • Erinnerung : Für jedes gesuchte Wort müssen m Bit Dateien gelesen werden • Die Größe F der Signatur muss wegen den False Drops erhöht werden • Die Signaturen werden in sogenannten „Posting Buckets“ der Größe Bp gespeichert (Verweisdatei wird überflüssig) • Diese „Posting Buckets“ enthalten für jedes Wort einen Zeiger auf die zugehörige Textstelle im Dokument und ein zusätzlichen Zeiger, der auf den nächsten Bucket verweist, falls dies nötig ist • Um die Bit – slices zuzuordnen, benötigt man eine Zuordnungstabelle (Hash – Tabelle) Dokumente brauchen nicht mehr in logische Blöcke unterteilt werden
CBS – Abbildung & Beispiel • Das Wort „base“ wird an die 30. Position gehasht (h(base)=30) • Im zugehörigen „Posting Bucket“ verweiset ein Zeiger auf das 1145 Byte in der Textdatei • Der „Posting Bucket“ wird mitsamt seiner verküpften Buckets in den Hauptspeicher geladen.
Doubly Compressed Bit Slices (DCBS) • Idee: Man komprimiert zusätzlich noch die Zuordnungstabelle • Analog zu CBS benutzt man eine Hash - Funktion h1(), um die Position in der Zuordnungstabelle zu bestimmen • Eine zusätzliche Hash - Funktion h2() unterscheidet zwischen Synonymen (sinnesverwandte Wörter) • Die Funktion h2() liefert Bitstrings der Länge h, welche in einer „intermediate“ – Datei gespeichert werden • Die „intermediate“ – Datei besteht aus Buckets der Größe Bi • Jeder Bucket hat Einträge der Form (Hashcode, Zeiger) • Der Zeiger verweist auf eine Liste von entsprechenden „Posting Buckets“
DCBS - Beispiel • Die Länge der Bitstrings, welcher h2 liefert, ist hier h=3 • Wie bei CBS : • h1(base) = 30 • Zusätzlich : • h2(base) = (011)2
No False Drops Method (NFD) • Bei dieser Methode entstehen keine False Drops • Dabei müssen nicht alle Wörter gespeichert werden • Es genügt die „intermediate“ – Datei vom DCBS – Verfahren zu verändern • Es kommt ein zusätzlicher Zeiger auf das Wort im Dokument hinzu • Ein Eintrag in der „intermediate“ – Datei hat bei NFD die Form : (Hashcode, Zeiger auf „Posting Buckets“, Zeiger auf Wort) • Vorteil : Jedes Wort kann von seinen Synonymen getrennt werden • Der Zeiger auf das Wort im Dokument liefert folgende Vorteile : • Speicherplatz gegenüber der Volltextspeicherung wird gespart • Die Einträge in der „intermediate“ – Datei haben eine konstante Größe • Daher entfallen Terminierungssymbole zur Bestimmung des Ende eines Wortes • Ein Wort kann die Aufnahmefähigkeit eines Buckets sprengen
NFD – Abbildung & Beispiel • Suchanfrage analog wie bei DCBS • Unterschied : Wenn ein passender Hashcode gefunden wurde, wird dem zugehörigen Zeiger auf das Wort gefolgt, um Synonyme auszuschließen
Literaturquellen • Titel : Information Retrieval: Data Structures & Algorithms Autoren : William B. Frakes; Ricardo Baeza-Yates (eds.)Verlag : Prentice Hall , 1992 Titel : Information Retrieval -Datenstrukturen und algorithmische Grundlagen ,Folien zur Vorlesung (1997) Datenbanken und Informationssysteme Autor : Peter Becker (Universität Tübingen)
Schlußbemerkung • Für Datenbanken mittlerer Größe stellen die Signature Files eine effiziente Indexstruktur für Datenbanken dar • Suchanfragen und Einfügung neuer Daten gestalten sich recht einfach • Die Effizienz der kennengelernten Konzepte sind erheblich von der Wahl der Parameter abhängig • Man muss abwägen, ob eine schnellere Suchzeit mehr Speicherplatzbedarf rechtfertigt, oder ob man z.B. genauere Resultate verlangt, wie bei der NFD – Methode. Diese benötigt mehr Speicherplatz.