Inkrementelles Einfügen von Daten

Werbung
Effizientes Einfügen und
Reorganisieren von grossen
Datenmengen
Datawarehouse / -mining
Seminarvortrag WS 1998/99
Thomas Meyer iiic
14. Januar 1999
Übersicht
Teil I
Teil II
Verschieben von Daten in
Parallelen Daten-banken
[AESN95]
•
•
•
•
•
Problemstellung
OAT Algorithmus
Bulk Algorithmus
Vergleich OAT-Bulk
Zusammenfassung
Effizientes Einfügen
von Daten in
Datenbanken
[JNSSK97]
•
•
•
•
•
Problemstellung
Stepped Merge Alg.
Stepped Hash Alg.
Vergleich
Zusammenfassung
Problemstellung
Parallele Datenbank
A-H
A-K
I-R
S-Z
L-Z
A-M
N-Z
• Die optimale Datenverteilung kann nicht vorhergesehen werden
• Verschiebung der Daten muss oft Online erfolgen (24h, 7d
Datenbanken)
• Modifizierung der Indexverzeichnisse (Start-, Zielknoten) sind mit
einem erheblichen Zeitaufwand verbunden. (Bsp. Sybase SQL
Server: bis zu 250 Indexverzeichnisse pro Relation möglich)
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Lösungsansatz
• Naiver Ansatz : Verschieben jedes einzelnen
Records
Relation
key
L1
L2
L3
L4
L5
L6
L7
L8
Name
Smith
Jones
Blake
Clark
Adams
Hart
Parker
James
Indexverzeichnis 1
Stadt
KM
London
20
Paris
10
Paris
30
London
20
Athen
30
Chicago
80
New York 70
Athen
25
Name
Adams
Blake
Clark
Hart
James
Jones
Parker
Smith
key
5
3
4
6
8
2
7
1
Indexverzeichnis 2
Stadt
Athen
Chicago
London
New York
Paris
key
5,8
6
1,4
7
2,3
• Kosten:
 löschen des Indexeintrags (Startknoten): mind. 1 random I/0
 erzeugen eines neuen Indexeintrages (Zielknoten): mind. 1
random I/0
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Anforderungen an Algorithmen
• Updates auf die Daten sollen während der
Reorganisation möglich sein
 Die Zeit in der Locks gehalten werden soll minimiert werden
• Es darf stets nur eine Kopie der Daten sichtbar sein
(Konsistenz)
• Es gibt zu keinem Zeitpunkt Daten, die aufgrund
der Reorganisation nicht gefunden werden können
• Erreichen einer guten Systemleistung während der
Reorganisationszeit
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
OAT
( One At a Time page movement )
• Koordinierte Verschiebung ganzer Diskseiten einer
Relation von einem Startknoten zu einem
Zielknoten
• Während der Indexmodifikation werden die
Datensätze in einem speziellen Buffer gehalten
(Reorganisations-Buffer)
 Transaktionsmanager muss in jedem Falle den
Reorganisationsbuffer aufsuchen
• Nur für den physikalischen Transfer werden Locks
auf den Daten verwendet.
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
( One At a Time
page movement
Startknoten: Senden
einer
Seite )
1.) Seite wird in den «Reorganisationsbuffer» (RB) geladen
2.) für jedes Indexverzeichnis lösche die entsprechenden Einträge:
Original - Relation
Indexverzeichnis (Name)
key Name
Stadt
KM
L1
L2
L3
Smith
Jones
Blake
London
Paris
Paris
20
10
30
L4
L5
L6
Clark
Adams
Hart
London
Athen
Chicago
20
30
80
L7
L8
Parker
James
New York
Athen
70
25
Name
key
Adams
Adams
Clark
Hart
Blake
3
Clark
Hart
James
Jones
Parker
Smith
5
4
6
8
2
7
1
3.) Unter Verwendung eines Locks (Lock1) sende die Seite zur Dest.
4.) Warte auf Ack, gib Lock1 frei
5.) Warte auf eine Proceed Msg
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Zielknoten: Ankunft einer Seite
1.) Speichern der Seite im Reorg. Buffer, sende ACK an Startknoten
2.) für jedes Indexverzeichnis der Relation führe folgenden Schritt aus:
Einzufügende Seite
L4
L5
L6
Clark
Adams
Hart
London
Athen
Chicago
Athen
Chicago
London
Adams
Clark
Hart
20
30
80
....
Name
key
Adams
Clark
5
4
de Niro
Dennis
Duck
12
22
15
Hart
Ryan
Stone
Willis
6
19
24
34
3.) Speichere die Seite vom Reorganisationsbuffer auf die Disk
4.) Sende eine Proceed Msg an Source
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Update eines Attributes
Update am Startknoten
Update am Zielknoten
• kein Einfügen eines neuen
Indexeintrages nötig (Seite
wird sogleich verschoben)
• kein Löschen des
Indexeintrages nötig (wird
durch Reorganizer sowieso
erledig)
• falls das Attribut schon ins
Indexverzeichnis
aufgenommen wurde:
keine spezielle Behandlung
erforderlich
• falls das Attribut noch
nicht ins Indexverzeichnis
aufgenommen wurde:
update in der Sortierten
Liste
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
BULK - Algorithmus
• Alle Daten werden kopiert und auf einmal
verschoben
• Die Daten werden am Zielknoten eingefügt
während Updates weiterhin am Startknoten
erfolgen
• Unter Verwendung eines Locks werden die Updates
vom Startknoten geholt
• Query Path wird danach umgeleitet
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
BULK - Startknoten
1.) Erstelle eine Kopie der Daten, sende sie zum Zielknoten
key
L1
L2
L3
L4
L5
L6
L7
L8
Name
Smith
Jones
Blake
Clark
Adams
Hart
Parker
James
Stadt
KM
London
20
Paris
10
Paris
30
London
20
Athen
30
Chicago
80
New York 70
Athen
25
...
..
..
...
..
..
...
..
..
key
L1
L2
L3
L4
L5
L6
L7
L8
Name
Smith
Jones
Blake
Clark
Adams
Hart
Parker
James
Stadt
KM
London
20
Paris
10
Paris
30
London
20
Athen
30
Chicago
80
New York 70
Athen
25
..
..
..
2.) Speichere alle Updates auf diese Daten in einem Log - File
3.) Log - File wird vom Zielknoten abgeholt
4.) Lösche die entsprechenden Indexeinträge
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
BULK - Zielknoten
1.) Für jedes Attribut, für welches ein Indexverzeichnis existiert:
«Bulk-File»
key
L1
L2
L3
L4
L5
L6
L7
L8
Name
Smith
Jones
Blake
Clark
Adams
Hart
Parker
James
Stadt
KM
London
20
Paris
10
Paris
30
London
20
Athen
30
Chicago
80
New York 70
Athen
25
Name
Adams
Blake
Clark
Hart
James
Jones
Parker
Smith
key
5
3
4
6
8
2
7
1
Existierendes
Indexverzeichnis der
Dest.
insert
Name
....
.....
.....
.....
.....
key
...
...
...
...
...
2.) Hole die Updates vom Startknoten unter Verwendung eines Locks
3.) ändern des Query - Paths
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Update eines Attributes
• Keine spezielle Behandlung erforderlich, da der
Datenzugriffspfad erst geändert wird, wenn die
Daten im Zielknoten komplett eingefügt worden
sind
Einleitung
OAT - Alg.
BULK- Alg.
Vergleich
Résumé
Experimenteller Vergleich
• Hot Spot Size : 200 Pages (Page-Size: 2KB)
• Startknoten/Zielknoten : je 128 Bufferpages
Totale Reorganisationszeit
12000
Zeit in Sec
10000
OAT
BULK
8000
6000
4000
2000
0
0
Einleitung
1
OAT - Alg.
2
3
BULK- Alg.
4
5
Anzahl Indexe
Vergleich
Résumé
Experimenteller Vergleich
750
700
650
600
550
500
450
Durchschnittlicher
Transaktionsdurchsatz
Transak./sek.
Zeit (msec)
Durchschnittliche
Antwortzeit
OAT
BULK
0
1
2
3
4
5
41
39
37
35
33
31
29
27
25
O AT
BULK
0
1
Anzahl Indexe
Einleitung
OAT - Alg.
2
3
Anzahl Indexe
BULK- Alg.
Vergleich
Résumé
4
5
Zusammenfassung
• Modifizierung der Indexverzeichnisse ist mit einem grossen
Aufwand verbunden
 Die Zeit in der Locks gehalten werden muss minimiert werden
OAT
• Benötigt nur 1 zusätzliche
Speicherseite
• Transaktionsmanager
muss geändert werden
• i.a. besser als Bulk für
Relationen mit <= 2
Indexverzeichnissen
Einleitung
OAT - Alg.
BULK
• Erfordert viel zusätzlichen
Speicherplatz
• sehr kurze Reorganisations
dauer
BULK- Alg.
Vergleich
Résumé
Teil 2: Effizientes Einfügen
Problemstellung
• Betrachtung von Systemen mit häufigen Insert Operationen
• Insert Operationen sollen Online erfolgen
• Die Ankunft und Verteilung der Daten ist nicht
vorhersehbar
• Beispiel: Erfassen von Telefongesprächen (im
Gegensatz zum Erfassen von Börsenkursen)
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Naive Lösungsansätze
• Jeden Record einzeln einfügen:
• Kosten: mind. 2 I/O Operationenen (Seite holen,
zurückschreiben) pro Record
• bei 1 Mio Einfügeoperationen/Std müsste alle 3ms ein Record
eingefügt werden können.
• Periodisch updaten (über Nacht):
• DB ist nicht aktuell («out of date»)
• Verletzt die Forderung nach 24h/7d
• Datenbank in der Reihenfolge der
ankommenden Datensätze organisieren
• Einfügen ist effizient
• Abfragen sind sehr ineffizient
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Anforderungen an Algorithmen
• Die Anzahl Einfügeoperationen/Zeiteinheit soll
maximiert werden
 Minimierung der Anzahl Diskzugriffe
 Daten müssen vorsortiert werden
• Effizientes Abfragen der Daten
 Daten können gemäss beliebigem Key eingefügt
werden
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Stepped Merge Algorithmus
• Die ankommenden Daten werden im Memory
vorsortiert.
• Zur Sortierung wird ein B* Baum verwendet,
genannt «Run»
• Ist der «Run» voll, so wird er auf die Disk
geschrieben als «Level 0 Run»
• Existieren K Runs vom Level i, so werden diese zu
einem Run vom Level i+1 verschmolzen, d.h. als
grösserer Baum
• Ist ein bestimmtes Level erreicht, so wird der
gesamte Run in die DB eingefügt.
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Stepped - Merge Algorithmus
In - memory Run
Level 0 Runs
.
.
.
Level 1 Runs
.
.
.
Level N-1 Run
Datenbank
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Queries
• Jedes Level hat bis zu K-1 Runs (Bsp. K=3).
• aufwendige Suche: Nebst der Datenbank
müssen bis zu N*(K-1) Runs durchsucht
werden
.....
DB
Level 0
Level 1
Level 2
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Stepped Hash Algorithmus
• Memory wird in M0 Hash-Buckets aufgeteilt: (B0,0B0,M0-1)
• Die ankommenden Daten werden dem Bucket B0,m
mittels der Hash-Funktion m = Hashwert MOD M0
zugeordnet.
• Bei Ueberlauf eines Buckets Bi,j wird dieser auf die
Disk verschoben und in K - Unterbuckets
aufgeteilt.
• Daten des Buckets Bi,j werden auf die Unterbuckets
Bi+1,m verteilt mittels der Hash-Funktion
m = Hashwert MOD (M0*Ki+1)
• Level N-1 : Einfügen der Daten in die DB
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Stepped - Hash Algorithmus
B0,0
B0,1
B0,2
B0,3
B1,0
Level 0
(memory)
B1,11
.
.
.
Level 1
B2,35
.
.
.
M0 == 4 ; K == 3
Level 2
Level N-1
Datenbank
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Concurrency Control (1)
• Konsistenz: Updates auf Datensätze können in
verschiedenen Levels vorkommen
.....
DB
Level 0
Level 1
Level 2
• Lösung: Verwendung von Timestamps
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Concurrency Control (2)
• Beim Verschmelzen von 2 Runs kann derselbe
Datensatz doppelt gefunden werden (oder gar
nicht).
Level i
Level i+1
• Naiver Ansatz: Locks auf den Runs: Shared Locks
für Queries, exklusive Locks für Reorganisationsprozess
• besserer Ansatz: Beim Verschmelzen der Runs wird
eine neue Version des Run-Indexes erstellt
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Experimenteller Vergleich
• Record Size: 20 Byte (Primary Key: 8 Byte)
• Page Size: 4 Kbyte
• Memory Buffer Size : 328 Kbyte
• Stepped Merge: 128 Kbyte für In Memory Run
• Stepped Hash: 32 Buckets am Anfang
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Experimenteller Vergleich
Stepped Merge
00
35
00
30
00
25
00
20
00
15
00
10
0
50
00
Anzahl Records in
der DB
Motivation
N=2, K=2
1
0.5
0
35
00
30
00
25
00
20
00
15
00
10
50
0
1
0.5
0
Direktes
Einfügen
2.5
2
1.5
0
N=2, K=2
Anzahl I/O pro Record
Stepped Hash
Direktes
Einfügen
2.5
2
1.5
0
Anzahl I/O pro Record
Stepped Merge
Anzahl Records in
der DB
Stepped Hash
Vergleich
Résumé
Zusammenfassung
• Bei häufigen Insert-Operationen muss versucht
werden, die Anzahl Diskzugriffe pro einzufügenden
Record zu minimieren
• Dies erfolgt mittels Vorsortierung der Daten und
Lazy Insert
• Stepped Merge und Stepped Hash liegt dieselbe
Idee zu Grunde, die Implementation ist jedoch
verschieden
• Stepped Merge schneidet bei Versuchen besser ab
als Stepped Hash
Motivation
Stepped Merge
Stepped Hash
Vergleich
Résumé
Referenzen
• 1.Teil:
• [AESN95] Kiran J. Achyutuni, Edward Omiecinski, Shamkant B.
Navathe «Two Techniques for On-Line Index Modification in Shared
Nothing Parallel Databases», 1995
• [T94] J. Troisi. «NonStop availability and database configuration
operations». Tandem Systems Review, July 1994
• [Vossen94] Gottfried Vossen «Datenmodelle, Datenbanksprachen,
Datenbank Managment Systeme», 1994
• 2.Teil:
• [JNSSK97] H. V. Jagadish, P. P. S. Narayan, S. Seshadri, S.
Sudarshan, Rama Kanneganti «Incremental Organization for Data
Recording and Warehousing» 23rd VLDB Conference Athens, 1997
• [OCGO96] Patrick o‘Neill, Edward Cheng, Dieter Gawlick,
Elizabeth J.O‘Neill. «The Log-structured Merge Tree», Acta
Informatica, 33:351-385, 1996
Herunterladen