Data Warehousing und Data Mining
Anfrageverarbeitung
 

1. Einleitung

Data Warehousing und on-line analytic processing (OLAP) sind die grundlegenden Elemente für entscheidungsunterstützende Systeme, die in den letzten Jahren immer mehr in das Zentrum der Datenbank-Industrie gerückt sind.
Nach [CD97] basieren OLTP-Systeme auf  strukturierten, oft wiederholten Tasks mit kurzen, atomaren, isolierten Transaktionen. Diese Transaktionen benötigte detaillierte Daten auf dem neuesten Stand. Sie lesen oder ändern wenige (Dutzend) Datensätze, der Zugriff erfolgt typischerweise über den Primärschlüssel. Operationale Datenbanken tendieren zu Größenordnungen von Hunderten von Megabyte bis in den Gigabytebereich hinein. Das Hauptaugenmerk liegt auf einer guten Throughput-Performance. Konsequenterweise widerspiegelt die das Datenbankdesign die operationale Semantik dieser auf der Datenbank arbeitenden Applikationen.
Data Warehouse-Systeme dagegen sind entscheidungsunterstützende Systeme. Die hier benötigten Daten sollen nicht möglichst detailliert sein, sondern eine Zeit- und Gesamtübersicht ermöglichen. Da Data Warehouses viele Daten (aus verschiedenen Datenbanken) enthalten, sind sie größer als operationale Datenbanken, zu entwickelnde Systeme sind in Größenordnungen von Terrabyte projektiert. Die Arbeitslast besteht größtenteils aus ad-hoc-Queries, komplexe Queries, die auf Millionen von Datensätzen zugreifen. Query-Throughput und Antwortzeit sind hier wichtiger als Transaktions-Throughput.
Um komplexe Datenanalyse und Visualisierung zu ermöglichen, sind Daten im Data Warehouse multidimensional modelliert. Oftmals sind diese Dimensionen hierarchisch geordnet. OLAP-Operationen schließen roll-up- und drill-down-Operationen ein.
Diese Seite gibt einen Überblick über OLAP-Operationen und Serverarchitekturen. Sie geht auf Probleme bei der Aggregation von Daten mittels GROUP BY ein und vermittelt die in [GC96] präsentierten Lösungsansätze unter Zuhilfenahme des CUBE-Operators. Zudem gibt sie einen Überblick über den OLAP-Benchmark APB-1 und stellt (als ein Beispiel für OLAP-Tools) Seagate Holos vor.


2. OLAP

2.1. Allgemeines
Datenbanksysteme speichern und verarbeiten Daten in Tabellen. Daher ist eine Benutzersicht immer zweidimensional: eine tabellarische Darstellung, beispielsweise Verkaufszahlen eines Produkts pro Monat.
 
 Monat  Produkt 1  Produkt 2  Produkt 3  Produkt 4  ...
 Januar          
 Februar          
 März          
 ...          
Tabelle1 
Für OLAP-Anfragen ist dies jedoch nicht mehr ausreichend, einem Benutzer muß es möglich sein, Daten in mehr als zwei Dimensionen zu verarbeiten. Um solche komplexe Anfragen zu unterstützen, erfolgt die Modellierung von Daten multidimensional. Solche Datenstrukturen nennt man Data Cubes, da sie bei drei Dimensionen als Würfel visualisiert werden können. Als Beispiel die Verkaufszahlen von Produkten pro Region pro Monat oder die Verkaufszahlen der Produkte pro Größe pro Quartal. Jede Dimension entspricht dabei einer Variablen.
 
 
 
Abbildung 1: Struktur eines Datenwürfels (Graphik nach [TR97])
 
In der Praxis verwendet man natürlich „Würfel" mit sehr viel mehr Dimensionen. Oft sind die-se Dimensionen hierarchisch;  die Zeit z.B. könnte als Tag-Monat-Jahr-Hierar-chie organisiert sein. Typische OLAP-Operationen enthalten roll-up- (Reduzierung der Dimensionen) und drill-down-Operationen (Erhöhung der Anzahl der Dimensionen des Hyperwürfels) entlang einer oder mehrerer Dimensionen.
Versucht man, auf bestehenden operationalen Datenbanken, die auf OLTP-Lasten abgestimmt sind, komplexe OLAP-Queries durchzuführen, erhält man keine befriedigende Performance. Weiterhin benötigt man zur Entscheidungsunterstützung zusätzliche Daten, die in operationalen Datenbanken meist nicht vorhanden sind, z.B. sind zur Trendanalyse historische Daten nötig, während operationale Datenbanken nur aktuelle Daten speichern.
Zudem unterstützen die wenigsten kommerziellen, für OLTP konzipierten Datenbanksysteme multidimensionale Datenmodelle und für OLAP-Operationen benötigten speziellen Datenorganisation, Zugriffs- und Implementierungmethoden.
Nachfolgende Tabelle vergleicht operative und Data Warehouse-Systeme:
 
Operative Systeme Data Warehouse
Zweck Unterstützung und Abwicklung der Geschäftsprozesse Informationen für Controlling, dispositive und strategische Entscheidungen
Inhalt detaillierte, aktuelle, nicht historisierte Geschäftsdaten vereinheitlichte, detaillierte, verdichtete, historisierte Daten auch aus externen Quellen und umfassende Metadaten
Aktualität online, realtime in der Regel älter als ein Tag
Modellierung funktionsorientiert  standardisiert, entbenutzertauglich, sachgebietsorientiert 
Update laufend und konkurrierend ergänzend, Historisierung von Daten 
Abfragen strukturiert im Programmcode der TA-Programme komplexe, wechselnde Fragestellungen und vorgefertigte Standardauswertungen 
Daten atomisiert; „record-at-a-time" summiert; viele Datensätze zu einem Zeitpunkt 
Tabelle 2 (nach [Me98] und [Pi])
 
2.2. Serverarchitekturen
Wie im letzten Abschnitt gezeigt, sind herkömmliche Datenbanksysteme nicht oder kaum in der Lage, multimensionale Sichten auf Daten zu unterstützen. Jedoch unternehmen viele Anbieter von Datenbanksystemen jetzt Anstrengungen, diese zusätzlichen Anforderungen zu erfüllen. Neben den traditionellen Datenbank-Servern kann man drei Kategorien von Servern unterscheiden, die speziell für entscheidungsunterstützende Systeme entwickelt werden:

 
 
Abbildung 2: Vergleich von ROLAP- und MOLAP-Architektur (nach Graphik aus [Da96])
 

3. Anfrageverarbeitung

Datenanalysetools verwenden häufig die „dimensionale Reduzierung" (Aggregation), oft durch Summierung von Daten entlang der weggelassenen Dimensionen. Ein Beispiel: Bei der Analyse von PKW-Verkaufszahlen konzentrieren wir uns auf Rolle, die Modell, Jahr und Farbe beim Verkauf spielen. Dazu ignorieren wir die Unterschiede zweier Verkäufe entlang der Dimensionen Datum des Verkaufs oder Händler und analysieren die Verkäufe nur hinsichtlich Verkäufen von Wagen nach Modell, nach Jahr und nach Farbe.

3.1. Probleme mit  GROUP BY
Im SQL-Standard benutzt man den GROUP BY-Operator zur  Aggregationsunterstützung sowie fünf Funktionen: COUNT(), SUM(), MIN(), MAX() und AVG(). Bestimmte häufige Formen der Datenanalyse sind mit diesen SQL-Konstrukten schwierig darzustellen. Dies sind Histogramme, roll-up-Summen und drill-down-Zwischensummen sowie Kreuztabellen.

SELECT   day, nation, MAX(Temperatur)
FROM     Wetter
GROUP BY Day(Zeit) AS day,
         Nation(Länge, Breite) AS nation;

Einige SQL-Dialekte erlauben diese Anfrage, Standard-SQL leider nicht: eine Funktion wie z.B. Nation() kann nicht zusammen mit GROUP BY eingesetzt werden. Wir müssen in diesem Fall eine verschachtelte Query benutzen:

SELECT   day, nation, MAX(Temperatur)
FROM     ( SELECT Day(Zeit) AS day,
                  Nation(Länge, Breite) AS nation,
                  Temperatur
           FROM Wetter
         ) AS foo
GROUP BY day, nation;
 

(2)  roll-up und drill-down
Ein noch größeres Problem sind roll-ups mit Summen und drill-downs mit Zwischensummen. Tabelle 4 verdeutlicht das Prinzip: Daten sind nach Modell, dann nach Jahr, dann nach Farbe aggregiert. Die Übersicht zeigt Datenaggregation in drei Leveln. Erhöhung des Level nennt man rolling-up der Daten, Verminderung drilling-down in die Daten. Datenaggregation erzeugt auf jedem verschiedenem Level eine Zwischensumme.
 
 Modell   Jahr   Farbe   Verkäufe 
 nach Modell 
nach Jahr 
nach Farbe
Verkäufe 
 nach Modell 
nach Jahr
Verkäufe 
 nach Modell 
Opel  1994  grün 50
weiß 40
90
grün 85
weiß 115
200
290
Tabelle 4
Die Tabelle suggeriert das Anlegen von 2N Spalten für einen roll-up von N Elementen. Allerdings kann man wegen der leeren Felder (NULL-Werte) keinen Schlüssel festlegen und benötigten noch eine weitere Spalte. Die nächste Tabelle ist eine elegante Lösung dieses Problems:
 
 Modell  Jahr  Farbe   Verkäufe  Verkäufe 
 nach Modell 
nach Jahr
Verkäufe 
 nach Modell 
Opel  1994  grün 50 90 290
Opel 1994 weiß 40 90 290
Opel 1995 grün 85 200 290
Opel 1995 weiß 114 200 290
Tabelle 5
Allerdings muß diese Übersicht wegen der enormen Anzahl von Spalten in den resultierenden Tabellen verworfen werden, müßte man doch 64 Spalten für die Beantwortung einer 6-dimensionalen Query anlegen.
Besser geeignet ist folgender Ansatz, um das exponentielle Anwachsen der Spaltenanzahl zu vermeiden: die Einführung eines Wertes ALL. Tabelle 6 demonstriert diesen Ansatz.
 
 Modell  Jahr  Farbe   Verkäufe 
Opel  1994  grün 50
Opel 1994 weiß 40
Opel 1994 ALL 90
Opel 1995 grün 85
Opel 1995 weiß 115
Opel 1995 ALL 200
Opel ALL ALL 290
Tabelle 6
Diese Tabelle kann mittels folgender SQL-Query gebildet werden:

SELECT ‘ALL’, ‘ALL’, ‘ALL’, SUM(Verkäufe)
  FROM  Verkäufe
  WHERE  Modell = ‘Opel’
UNION
SELECT Modell, ‘ALL’, ‘ALL’, SUM(Verkäufe)
  FROM  Verkäufe
  WHERE  Modell = ‘Opel’   GROUP BY Modell
UNION
SELECT Modell, Jahr, ‘ALL’, SUM(Verkäufe)
  FROM  Verkäufe
  WHERE  Modell = ‘Opel’   GROUP BY Modell, Jahr
UNION
SELECT Modell, Jahr, Farbe, SUM(Verkäufe)
  FROM  Verkäufe
  WHERE  Modell = ‘Opel’ GROUP BY Modell, Jahr, Farbe;

Dies ist nur ein simpler dreidimensionaler roll-up. Eine Aggregation über N Dimensionen erfordert N solcher UNIONS...
Ein roll-up ist asymmetrisch - in Tabelle 7 sind die Verkäufe nach Jahr, aber nicht die Verkäufe nach Farbe aggregiert. Die fehlenden Zeilen zeigt die nächste Tabelle.
 
 Modell   Jahr   Farbe   Verkäufe 
Opel ALL grün 135
Opel ALL weiß 155
Tabelle 7
Diese Zeilen können durch Hinzufügen der nachfolgenden Klausel zum obigen SQL-Statements erfaßt werden:

UNION
SELECT Modell, ‘ALL’, Farbe, SUM(Verkäufe)
  FROM Verkäufe
  WHERE Modell = ‘Opel’
  GROUP BY Modell, Farbe;

(3)  Kreuztabellen
Das Ergebnis einer symmetrischen Aggregation ist eine Tabelle, die man Kreuztabelle nennt. Die Tabellen 5 und 6 sind die relationalen Formen einer Kreuztabelle, im Allgemeinen werden Kreuztabellen-Daten in einer kompakteren Form (wie in Tabelle 8) dargestellt.
 
 Opel   1994   1995   Total (ALL
grün 50 85 135
weiß 40 115 155
 Total (ALL 90 200 290
Tabelle 8
Diese Kreuztabelle ist eine zweidimensionale Aggregation. Werden andere PKW-Typen hinzugefügt, wird es eine 3D-Aggregation. Daten über z.B. VW-Produkte fügen eine weitere Kreuztabellen-Ebene hinzu.

Die Darstellung in den Tabellen 5 und 6 sowie mit UNION gestaffelte GROUP BYs „lösen" das Aggregations-Problem im relationalen Datenmodell. Als Problem verbleibt die abschreckende Wirkung von SQL-Queries mit einer großen Anzahl von GROUP BY-Operatoren: ein sechsdimensionale Kreuztabelle erfordert ein SQL-Statement mit 64 verschiedenen GROUP BY-Operatoren.
Wie wir gesehen haben, ist es ineffektiv, GROUP BY-Operatoren in der jetzigen Form zu verwenden. Die resultierende Statement ist zu komplex für eine Optimierungsanalyse. Und das Ergebnis auf den meisten SQL-Systemen werden 64 Daten-Scans sein, 64 Sortieroperationen und eine lange Kaffeepause...

3.2. CUBE- und ROLLUP-Operatoren
Die nachfolgende Graphik zeigt das Konzept für Aggregationen bis hinauf zu drei Dimensionen. Das herkömmliche GROUP BY generiert den N-dimensionalen Kern des Datenwürfels. Die N-1 niedrigdimensionierten Aggregationen erscheinen als Punkte, Linien, Ebenen, Würfel oder Hyper-Würfel um den Kern herum.
 
 
Abbildung 3: CUBE-Operator (nach Graphik aus [GC96])
 
Die Generierung eines Datenwürfels erfordert die Generierung der Allmenge (Menge aller Teilmengen) der aggregierten Spalten. Der CUBE-Operator ersetzt dabei den SQL-GROUP BY-Operator (GROUP BY und ROLL UP sind Spezialfälle des CUBE-Operators). [GC96] schlägt deshalb eine Syntax-Erweiterung zu SQL vor. Die momentane GROUP BY-Syntax:

 GROUP BY
   {<column name> [collate clause] ,...}

Für die Unterstützung von Histogrammen und anderen Aggregationen soll die Syntax erweitert werden:

 GROUP BY <aggregation list>
 <aggregation list> ::=
   { ( <column name> | <expression> )
     [ AS <correlation name> ]
     [ <collate clause> ]
       ,...}

Diese Erweiterung ist unabhängig vom CUBE-Operator. Sie behebt einige schon vorher existierende Probleme mit GROUP BY. Viele Systeme erlauben diese Erweiterung bereits.
Nun kann der SQL-GROUP BY-Operator erweitert werden:

 GROUP BY <aggregation list>
 <aggregation list> ::=
   { ( <column name> | <expression> )
       [ AS <correlation name> ]
       [ <collate clause> ]
   ,...}
       [ WITH ( CUBE | ROLLUP ) ]
 
 
Verkäufe 
 Modelle  Jahr  Farbe   Verkäufe 
Opel  1990  rot 5
Opel 1990 weiß 87
Opel 1990 blau 62
Opel 1991 rot 54
Opel 1991 weiß 95
Opel 1991 blau 49
Opel 1992 rot 31
Opel 1992 weiß 54
Opel 1992 blau 71
VW 1990 rot 64
VW 1990 weiß 62
VW 1990 blau 63
VW 1991 rot 52
VW 1991 weiß 9
VW 1991 blau 55
VW 1992 rot 27
VW 1992 weiß 62
VW 1992 blau 39
Tabelle 9
Data Cube 
 Modell  Jahr  Farbe   Verkäufe 
Opel  1990  blau 62
Opel 1990 rot 5
Opel 1990 weiß 95
Opel 1990 ALL 154
Opel 1991 blau 49
Opel 1991 rot 54
Opel 1991 weiß 95
Opel 1991 ALL 198
Opel 1992 blau 71
Opel 1992 rot 31
Opel 1992 weiß 54
Opel 1992 ALL 156
Opel ALL blau 182
Opel ALL rot 90
Opel ALL weiß 236
Opel ALL ALL 508
VW 1990 blau 63
VW 1990 rot 64
VW 1990 weiß 62
VW 1990 ALL 189
VW 1991 blau 55
VW 1991 rot 52
VW 1991 weiß 9
VW 1991 ALL 116
VW 1992 blau 39
VW 1992 rot 27
VW 1992 weiß 62
VW 1992 ALL 128
VW ALL blau 157
VW ALL rot 143
VW ALL weiß 133
VW ALL ALL 433
ALL 1990 blau 125
ALL 1990 rot 69
ALL 1990 weiß 149
ALL 1990 ALL 343
ALL 1991 blau 106
ALL 1991 rot 104
ALL 1991 weiß 110
ALL 1991 ALL 314
ALL 1992 blau 110
ALL 1992 rot 58
ALL 1992 weiß 116
ALL 1992 ALL 284
ALL ALL blau 339
ALL ALL rot 233
ALL ALL weiß 369
ALL ALL ALL 941
Tabelle 10
Der CUBE-Operator erzeugt aus Tabelle 9 die Tabelle 10 mit allen diesen aggregierten Werten:

  SELECT Modell, Jahr, Farbe, SUM(Verkäufe) AS Verkäufe
    FROM Verkäufe
    WHERE Modell IN (‘Opel, ‘VW’) AND Jahr BETWEEN 1990 AND 1992
    GROUP BY Modell, Jahr, Farbe WITH CUBE;

3.3. ALL-Wert
Wird der ALL-Wert wirklich benötigt? Jeder ALL-Wert repräsentiert einen Set - einen Set, über die die Aggregation berechnet wird. In den Tabelle 6 und 7 z.B. sind die Sets:

  Modell.ALL = ALL(Modell) = {Opel, VW}
  Jahr.ALL = ALL(Jahr) = {1990, 1991, 1992}
  Farbe.ALL = ALL(Farbe) = {rot, weiß, blau}

In der Realität führt das in die Welt verschachtelter Relationen - Relationen können Werte sein. Das ist ein wichtiger Schritt für relationale Systeme.
Man kann jeden ALL-Wert als kontext-sensitives Token ansehen, der ein Set repräsentiert. Den ALL-Wert als korrespondierendes Set anzusehen, definiert die Semantik des relationalen Operators (z.B. equals und IN). Eine Funktion ALL() generiert ein Set, welches mit den Werten wie im obigen Beispiel assoziiert werden kann. ALL() auf  andere Werte angewendet liefert NULL zurück.
Nach [GC96] wirkt sich die Einführung von ALL auf viele Aspekte von SQL aus, einige davon sind:

Um die Verwendung des ALL-Wertes (die zu vielen Spezialfällen führt) zu vermeiden, schlägt [GC96] vor, folgenden Ansatz zu verwenden: Nun kann der ALL-Wert simuliert werden, z.B.:

  SELECT Modell, Jahr, Farbe, SUM(Verkäufe),
    GROUPING(Modell),
    GROUPING(Jahr),
    GROUPING(Farbe)
  FROM Verkäufe
  GROUP BY CUBE Modell, Jahr, Farbe;

Wo vorher der ALL-Wert erschien, steht jetzt als korrespondierender Wert NULL im Datenfeld und TRUE im korrespondierenden Gruppenfeld. Als Beispiel, die globale Summe aus Tabelle 10 stellt sich als Tupel

  (NULL, NULL, NULL, 941, TRUE, TRUE, TRUE)

dar, anstelle des Tupels

  (ALL, ALL, ALL, 941)

mit dem „realen" CUBE-Operator.

3.4. Adressierung des Datenwürfels
Im letzten Abschnitt wurde die Berechnung von Datnwürfels besprochen. Dieser Abschnitt beschäftigt sich mit Erweiterungen der SQL-Syntax zum Zweck des leichten Zugriffs auf Elemente des Datenwürfels.
Die allgemeinsten Anfragen sind die nach Prozenten der Gesamtsumme. In SQL wird dies als verschachtelte SQL-Query realisiert:

  SELECT Modell, Jahr, Farbe, SUM(Verkäufe),
         SUM(Verkäufe)/
            (SELECT SUM(Verkäufe)
             FROM Verkäufe
             WHERE Modell IN {‘Opel’, ‘VW’}
                   AND Jahr BETWEEN 1990 AND 1992
            )
  FROM   Verkäufe
  WHERE  Modell IN {‘Opel’,’VW’}
         AND Jahr BETWEEN 1990 AND 1992
  GROUP BY CUBE Modell, Jahr, Farbe;

[GC96] empfiehlt folgende Syntaxvereinfachung:

  SELECT Modell, Jahr, Farbe, SUM(Verkäufe) AS total,
         SUM(Verkäufe) / total(ALL, ALL, ALL)
  FROM   Verkäufe
  WHERE  Modell IN {‘Opel’, ‘VW’}
         AND Jahr BETWEEN 1990 AND 1992
 GROUP BY CUBE Modell, Jahr, Farbe;

Der nächste Schritt ist die des Indizierung eines Wertes. Der momentane Ansatz, um eine Feld aus einem 2D-Würfel zu lesen

  SELECT  v
  FROM cube
  WHERE row = :i AND column = :j

sollte ersetzt werden durch

  cube.v(:i, :j)

Mit dieser Erweiterung der SQL-Syntax sollte es sehr einfach sein, Super-Super-Aggregationen aus dem Basis-Würfel zu berechnen.

3.5. Berechnung von cubes und roll-ups
CUBE und ROLLUP verallgemeinern Aggregationen und GROUP BY, so daß all die Technologien für die Berechnung solcher Resultate ebenfalls auf die Berechnung des Kerns eines Würfels angewendet werden können [Gr93]. Die Basistechnik für die Berechnung eines ROLLUPs ist das Sortieren der Tabelle auf dem Aggregations-Attributen und die darauffolgende Berechnung der Aggregationsfunktion. Ist das ROLLUP-Resultat klein genug, um in den Hauptspeicher zu passen, kann es durch Scannen des Input-Sets und Anwendung jedes Datensatzes auf den im Speicher befindlichen ROLLUP berechnet werden. Nach [Gr93] sind die Basistechniken zur Berechnung von Aggregationen:

 

3.6. Unterstützung von CUBE und ROLLUP
Stand der Unterstützung: Microsoft SQL Server 6.5 unterstützt CUBE und ROLLUP jetzt ca. zwei Jahre. Es existieren Anwendungen, die diese Funktionen in Triggern nutzen, um bei Änderung in darunterliegenden Tabellen den Datenwürfel automatisch upzudaten.
 


4. Verwaltung multidimensionaler Daten

4.1. Speicherung multidimensionaler Daten
Nach [DN97] sind zwei Ansätze denkbar, um multidimensionale Daten für OLAP-Anfragen zu speichern: relationale Tabellen oder Arrays. Beide Ansätze haben Vor- und Nachteile (und führen immer wieder zu Debatten zwischen ROLAP und MOLAP-Anbietern). Einige der Vorteile des MOLAP-Ansatzes:

ROLAP dagegen bietet folgende Vorteile: In [ZDN97] werden zwei Ansätze zum effizienten Speichern großer, dünner Arrays vorgestellt: 4.2. Implementierung des Data Cube
Durch die Größe von Data Warehouses und der Komplexität der Queries kann es zu Anfragen kommen, deren Beantwortung lange Zeit dauert. Es besteht also der Bedarf für Anfrageoptimierungstechniken. Eine häufig verwendete Technik ist die Vorberechnung häufig gestellter Queries (materialisierte Sichten). Die Auswahl dieser Queries ist nicht trivial, da auch der Fall auftreten kann, daß die Vorberechnung einer (nicht häufig gestellte) Query die Berechnung anderer Queries beschleunigen kann.
[HRU96] nennt drei Möglichkeiten der Implementation des Data Cubes: Weiterhin stellt [HRU96] einen Algorithmus zur Auswahl derjenigen Sichten, deren Vorberechnung zu einem optimalen Kostenverhalten führt, vor: den „gierigen" (greedy) Algorithmus.
Ausgehend von der Annahme, daß die benötigten Speicherplatzkosten gleich der Anzahl der Spalten in der Sicht sind, wird der Nutzen einer Sicht berechnet: Seien C(v) die Kosten der Sicht v. Die Anzahl der zu materialisierenden Sichten sei k. Nach Auswahl einer Menge S von Sichten sei ist der Nutzen der Sicht v relativ zu S, geschrieben als B(v,S), wie folgt definiert:
    (1) für jede Sicht w < v (w kann aus v berechnet werden) wird Bw berechnet:
        (a) Sei u die Sicht mit den wenigsten Kosten in S, es gelte w < u
        (b) wenn C(v) < C(u), dann ergibt sich Bw = C(v) - C(u), andernfalls Bw = 0
    (2) definiere B(v,S) als  Summe aller Bw, für die w < v gilt.

Der Algorithmus kann nun wie folgt definiert werden:

  S = {top view}
  for i=1 to k do
  begin
    Wähle die Sicht v Ï S so, daß B(v,S) maximal ist;
    S = S union {v};
  end;
  Resultat S ist die „gierige" Auswahl;

4.3. Laden des Data Cube
In [ZDN97] werden zwei Algorithmen zur Berechnung von Sub-Aggregates im Datenwürfel vorgestellt:


5. Der OLAP-Benchmark

Die Entwicklung des OLAP-Benchmarks, des Analytic Processing Benchmark (APB-1) wurde vom OLAP-Council gefördert. Der Benchmark simuliert realistische OLAP-Business-Situationen, die auf Server-basierter Software laufen. Das Ziel des APB-1 ist die Messung der gesamten OLAP-Performance eines Servers, weniger die Performance spezieller Teilaufgaben. Die (sorgfältig ausgewählten) Operationen des Benchmarks sollen häufige Operationen in der Praxis widerspiegeln und so sicherstellen, daß die Ergebnisse des Benchmarks praxisrelevant sind. Diese Operationen umfassen:

Analytische Prozeßapplikationen sind Informationssysteme. Das Hauptaugenmerk liegt auf der Antwortzeit des Systems: Wie groß ist die Zeitspanne, die das System benötigt, um Ergebnisse zu liefern, gemessen ab dem Zeitpunkt, von dem an das System Zugriff auf die Daten hat. Diese Zeit definiert der APB-1 als analytic throughput. Die Performance-Metrik bezeichnet man als analytical query time (AQT). Sie berechnet sich aus der gesamten Server-Rechenzeit geteilt durch die Anzahl der verarbeiteten Queries. Die Server-Rechenzeit ergibt sich aus der verstrichenen Zeit zwischen Zugriff auf die Input-Daten und Abarbeitung der letzten Query. Die Berechnung der AQT umfaßt die Zeit für: 5.1. Umgebung
Die verwendete OLAP-Applikation ist ein Verkaufs- und Marketing-Analysesystem. Der Benchmark ist eine Synthese genereller Business-Praktiken und kein Modell einer spezifischen Industrie oder eines spezifischen Marktes. Die Datenbank enthält Informationen zur Analyse von Produktverkäufen an Kunden durch Verteilkanäle über einen bestimmten Zeitraum.

5.2. Struktur der Datenbank
Die logische Datenbankstruktur besteht aus sechs Dimensionen: Zeit, Szenario, Maßstab sowie drei Aggregations-Dimensionen zur Definition der Datenbankgröße (Produkt, Kunde und Kanal).

5.3. Datenfiles
Es existieren zwei Sätze von Datenfiles. Das erste wird zur Initialisierung der Datenbank benötigt, das zweite für das inkrementelle Laden. Das Programm APB1GEN generiert alle diese Dateien. Die Datenfiles sind ASCII-Files, für den genauen Aufbau sei auf [OL96] verwiesen.

5.4. Queries
OLAP-Queries sind ad-hoc-Queries und sehr dynamisch. Die benötigten Informationen umfassen alle vorhandenen Daten.
Der APB-1 umfaßt folgende Queries:

Die folgende Übersicht zeigt den Anteil der Queries an der Laufzeit des Benchmarks: Der APB-1 wird in sechs Schritten ausgeführt:
  1. Ausführung von APB1GEN zum Anlegen der Hierarchiefiles und historischen Daten
  2. Datenbankinitialisierung und Laden der historischen Daten
  3. Ausführung von APB1GEN zum Anlegen der inkrementellen Datenfiles
  4. inkrementelles Laden und Vorberechnung
  5. Ausführung von APB1GEN zum Anlegen der Query-Datenfiles
  6. Query-Ausführung
Das Programm APB1GEN wird zur Generierung von Daten und Query-Informationen für den Benchmark genutzt.

5.5. Vollständige Offenlegung
Bei jeder Publikation von Ergebnissen des APB-1-Benchmarks ist von Seiten des OLAP-Councils eine vollständige Offenlegung gefordert. Folgende Informationen müssen veröffentlicht werden:


6. OLAP-Tool: Seagate Holos

Als Beispiel für OLAP-Werkzeuge dient hier das Programm Holos der Firma Seagate Software Inc., das bei der R+V-Versicherung eingesetzt wird, als Referenzmaterial diente dabei [Se97].
Seagate Software bezeichnet Holos als „Operational Business Intelligence System". Es ist ein „Executiv Information System" - es kann hochwertige, gut präsentierte Informationen liefern: nützlich für Manager. Es ist ein Entscheidungsunterstützungssystem - Holos erlaubt die Modellierung von Geschäftsfällen, das Testen alternativer Szenarien und die statistische Vorhersage solcher Systeme. Holos ist ein OLAP-Tool - es liefert multidimensionale Queries, Reports und Analysen. Und es ist eine wichtige Komponente des Data Warehousing - es ermöglicht Zugriffe ins Data Warehouse auf etablierter relationaler Basis.
Holos ist ein Client-Server-System. Die Server-Komponenten bieten Möglichkeiten für Datenzugriff, Modellierung, multidimensionale Operationen und Reports an. Als Client können sowohl der Holos-Client als auch Java-fähige Browser oder ODBC-fähige Client-Applikationen (z.B. Visual Basic oder Delphi) verwendet werden: Holos stellt Schnittstellen für den Zugriff auf seine multidimensionalen Daten für ODBC-Anwendungen bereit.
Holos läuft auf über einem Dutzend Serversystemen, z.B. IBM RS/6000 AIX, HP 9000/800 HP-UX, Sun-4 SunOS oder Windows NT. Als Clients werden derzeit Windows 3.1 und 3.11, Windows 95, Windows NT und Macintosh System 7.0 unterstützt. HOLOS arbeitet  mit einer breiten Palette an Datenbanksystemen zusammen, als Beispiel seien hier Informix, Ingres, ORACLE und Sybase genannt.

6.1. Holos-Client
Der Holos-Client bietet eine produktive und leicht zu benutzende Arbeitsumgebung. Er umfaßt folgende Komponenten:

6.2. Holos Language
Holos verfügt über eine Programmiersprache, speziell für die Bedürfnisse großer Anwendungen in OLAP,  für „Business Intelligence" und für Analyse entwickelt.
Das Datenformat-Design ermöglicht sowohl die Verarbeitung von Daten aus standardisierten relationalen Datenbanken  als auch die Speicherung in einem internen Format (umfassende OLAP-Architektur, die multidimensionale Datenstrukturen bereitstellt).
Es stehen Funktionen für Reports, Analyse und Vorhersage zur Verfügung. Der Datenzugriff kann sowohl über embedded SQL als auch über DDE oder OLE erfolgen, es existieren Unterstützungen für den Zugriff auf flache und indizierte Dateien und ein Datenaustausch-System mit Filtern; ein Toolkit zum Zugriff auf Lotus Notes-Tabellen ist ebenfalls vorhanden. Holos verfügt über Schnittstellen zur Kommunikation mit Lotus und Excel, Mailsystemen (Unix Mail, Windows NT Exchange/MS-Mail, cc-Mail, Lotus Notes Mail), serverbasierten Editoren wie z.B. EDT oder vi. Die Druckausgabe kann auf Clientseite über den Standard-Windows- oder -Macintosh-Drucksupport verbunden werden, serverseitig werden verschiedene Drucker und Plotter unterstützt, z.B. Postscript, HP-PCL-Drucker, HPGL- Plotter.
 


7. Literaturverzeichnis
   
   Zurück zur Übersicht

 

[ Michael Müller ] [ 5.6.98 ]