Preceding loads, Datentypen und distinkte Werte

Einführung

Im letzten Beitrag habe ich den durch ein Preceding Load verursachten Overhead betrachtet. In diesem Beitrag gehe ich genauer darauf ein, ob der Datentyp (oder was in QlikView als Datentyp durchgeht) oder die Anzahl der unterschiedlichen Werte einen größeren Einfluss auf die Performance haben. Das Ergebnis hat mich überrascht…

Anzahl der distinkten Werte

Wir vergleichen die Geschwindigkeit beim Kopieren einer Tabelle (mit Preceding Load Schicht) in eine andere mit Feldern mit unterschiedlicher Anzahl distinkter Werte. Jeweils 1 Spalte und 1000 Zeilen werden kopiert, diese enthalten entweder 100, 200, 300, 500, 800 oder 1000 unterschiedliche Werte. Welches Ergebnis habe ich erwartet? Entsprechend dem Beitrag im QlikView Design Blog über Symbol tables and Bit-stuffed pointers erwarte ich einen geringeren Schreibaufwand für weniger distinkte Werte, da der Pointer in der Symboltabelle entsprechend kleiner ist (100 Werte = 7 Bit, 1000 Werte = 10 Bit).

Hier ist das Ergebnis:

PL with Float, 1c, 1000r, 100dv to 1000dv

Zu meiner Überraschung habe ich nahezu keinen Unterschied zwischen den verschiedenen Varianten feststellen können.

Unterschiedliche Datentypen

Schauen wir uns das Ergebnis des Vergleichs unterschiedlicher Datentypen an. Hier kopieren wir (mit Preceding Load Schicht) jeweils 1 Spalte und 1000 Zeilen mit 100 distinkten Werten, die allerdings unterschiedlichen Datentypen entsprechen.

Integer: 2, 4, 6, etc. (keine geschlossene Reihe, um die sequentielle Integer Optimierung zu vermeiden)

Float: 0.9, 1.9, 2.9, etc.

Text: 1Text, 2Text, 3Text, etc.

Obiger Logik zufolge sollten sie sich alle gleich verhalten, da in jedem Fall die gleiche Anzahl an Bits aus dem Symbolraum gelesen und geschrieben werden müssen. Hier ist das Ergebnis:

PL with different data types, 1c, 1000r, 100dv

Die Float und Integer Vorgänge liegen ungefähr gleichauf, aber beide sind 80% langsamer als der Text Datentyp. Wieder ein Ergebnis, dass ich nicht erwartet hätte.

Kopieren ohne Preceding Load

Interessehalber habe ich obige Szenarien dann noch mal mit Kopiervorgängen ohne die Preceding Load Schicht getestet. Zunächst wieder die Variation über die Anzahl distinkter Werte:

Copy with Float, 1c, 1000r, 100dv to 1000dv

Und jetzt die Variation über den Datentyp:

Copy with different data types, 1c, 1000r, 100dv

Wie wir sehen ist das Ergebnis für die Anzahl distinkter Werte gleich (eine Abhängigkeit ist nicht zu erkennen), interessanterweise ist aber auch keine eindeutige Abhängigkeit für die Variation über den Datentyp zu erkennen.

Schlussfolgerung

Eine Schlussfolgerung zu finden fällt mir hier schwer. Entweder habe ich etwas an der Art und Weise wie QlikView die Daten verarbeitet noch nicht verstanden oder ich habe woanders einen Fehler gemacht. Aber wenn das Ergebnis immer das Erwartete wäre, bräuchte man ja auch keine Experimente machen ;-)

Wenn Ihr etwas zur Erklärung der Ergebnisse beitragen könnt, freue ich mich auf Kommentare entweder hier im Blog oder im dazu eröffneten Thread in der Qlik Community.

Wenn du diesen Beitrag interessant fandest und den nächsten nicht verpassen möchtest, abonnier doch einfach meinen RSS Feed links.

Vorschau

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>