import von massendaten
DESCRIPTION
In dieser Präsentation befasst sich Oliver Wronka, Principal Architect/ Project Manager bei axxessio, mit dem Import von Massendaten.TRANSCRIPT
OLIVER WRONKA
JANUAR 2014
Import von Massendaten
2
Inhalt
» Aufgabenstellung» Einfach, aber langsam» 1. Tuningstufe – Blockweises Commit» 2. Tuningstufe – Wegwerfen / Neu» 3. Tuningstufe – Wegwerfen / Neu» Tablespace, Datafiles, Tables and Partitions
3
Aufgabenstellung
» Es liegt eine Textdatei vor, welche eine hohe Anzahl von Datensätzen hat (> 1 Mio.)
» Jeder Kunden hat bereits einen eindeutigen, primary Key in der CSV-Datei (fachlicher Schlüssel)
» Diese soll in eine bestehende Tabelle importiert werden» In der bestehenden Tabelle sind bereits Daten
vorhanden» Die Tabelle soll nach dem Import den Datenbestand der
Textdatei 1:1 wiederspiegeln (Full Import)
4
Einfach, aber langsam
Flag löschen, ob Datensatz angefasst wurde:
update KUNDEN set TOUCHED=0;
Datensätze aus Import auf bestehende Datensätze anwenden oder neu einfügen:
insert or update KUNDEN (ANREDE, NAME, …, TOUCHED) values (‚HERR‘, ‚dsfsdfds‘, …, 1) where PK=?;commit;
Alle Datensätze löschen die nicht angefasst wurden:
delete from KUNDEN where TOUCHED=0;
Datei: Kunden.csv Table: KUNDEN
PK ANREDE NAME VORNAME STRASSE PLZ ORT INDEX PK ANREDE NAME VORNAME STRASSE PLZ ORT TOUCHED11 Herr dsfsdfsd dsfsdfsd dsfsdfsd 12323 dsfsdfsd 1 11 Herr dsfsdfsd dsfsdfsd dsfsdfsd 12323 dsfsdfsd 122 Frau ssdfsdf ssdfsdf ssdfsdf 12332 ssdfsdf 2 22 Frau ssdfsdf ssdfsdf ssdfsdf 12332 ssdfsdf 133 Frau sdf sdf sdf 12332 sdf 3 33 Frau sdf sdf sdf 12332 sdf 144 Firma sdfsd sdfsd sdfsd 12332 sdfsd 4 44 Firma sdfsd sdfsd sdfsd 12332 sdfsd 155 Firma fsdf fsdf fsdf 12332 fsdf 5 55 Firma fsdf fsdf fsdf 12332 fsdf 166 Firma sdfsdfsdf sdfsdfsdf sdfsdfsdf 12332 sdfsdfsdf 6 66 Firma sdfsdfsdf sdfsdfsdf sdfsdfsdf 12332 sdfsdfsdf 177 Herr sdfsfsad sdfsfsad sdfsfsad 12332 sdfsfsad 7 77 Herr sdfsfsad sdfsfsad sdfsfsad 12332 sdfsfsad 188 Herr sdf sdf sdf 12332 sdf 8 88 Herr sdf sdf sdf 12332 sdf 199 Frau sdfsdfsdf sdfsdfsdf sdfsdfsdf 12332 sdfsdfsdf 9 99 Frau sdfsdfsdf sdfsdfsdf sdfsdfsdf 12332 sdfsdfsdf 1
5
1. Tuningstufe – Blockweises Commit
Flag löschen, ob Datensatz angefasst wurde:
update KUNDEN set TOUCHED=0;
Datensätze aus Import auf bestehende Datensätze anwenden oder neu einfügen, aber nicht jeden Datensatz einzeln committen sondern blockweise:
for (i = 0; i < 1000; i++) { insert or update KUNDEN (ANREDE, NAME, …, TOUCHED) values (‚HERR‘, ‚dsfsdfds‘, …, 1) where PK=?}commit;
Alle Datensätze löschen die nicht angefasst wurden:
delete from KUNDEN where TOUCHED=0;
Performancegewinn hängt von Größe des einzelnen Datensatz ab, aber Faktor 10 ist meistens drin!
6
2. Tuningstufe – Wegwerfen / Neu
Tabelle einfach leeren:
truncate table KUNDEN;
Datensätze aus Import neu einfügen:
for (i = 0; i < 1000; i++) { insert KUNDEN (ANREDE, NAME, …, TOUCHED) values (‚HERR‘, ‚dsfsdfds‘, …, 1)}commit;
Es entfällt die TOUCHED-Spalte sowie die beiden Operationen zu Beginn und Ende der Importschleife! Trotzdem nur geringer Performancegewinn gegenüber der ersten Tuningstufe!Klappt dafür aber auch mit eingeschränkten DB-Rechten.
7
3. Tuningstufe – Wegwerfen / Neu
Tabelle einfach löschen:
drop table KUNDEN;
Tabelle neu erstellen:
create table KUNDEN { … }
Datensätze aus Import einfügen:
for (i = 0; i < 1000; i++) { insert KUNDEN (ANREDE, NAME) values (‚HERR‘, ‚dsfsdfds‘)}commit;
Index erzeugen:
create index …
Geht nur wenn man create Rechte auf DB hat (häufig nicht der Fall).
8
Tablespace, Datafiles, Tables and Partitions
9
Tablespace, Datafiles, Tables and Partitions
Partition A Partition B Partition C Partition D
TextFile
Importscript
Unsere Standorte
Niederlassung Köln
Wilhelmstraße 351143 KölnTel +49 22 03 – 91 22 0Fax +49 22 03 – 91 22 23
Niederlassung Darmstadt
Kasinostraße 6064293 DarmstadtTel +49 61 51 – 78 90 0Fax +49 61 51 – 78 90 23 0
Hauptsitz Bonn
Kurfürstenallee 553177 BonnTel +49 228 – 76 36 31 0Fax +49 228 –76 36 31 3
Niederlassung Bern
Frohbergweg 73012 BernTel +41 31 – 534 07 06Fax +41 31 – 536 69 78
Consider IT done!