Frage

Ich weiß ein wenig über Datenbank-Interna. Ich habe tatsächlich einen kleinen, einfachen relationalen Datenbank-Engine, bevor implementiert, ISAM Strukturen auf der Festplatte verwenden und BTree Indizes und all so was. Es hat Spaß gemacht, und sehr lehrreich. Ich weiß, dass ich viel mehr bewusst bin über sorgfältig Datenbankschemata entwerfen und schreiben jetzt Anfragen, dass ich ein bisschen mehr darüber, wie RDBMS Arbeit unter der Haube wissen.

Aber ich weiß nichts über multidimensionale OLAP-Datenmodelle, und ich habe im Internet eine harte Zeit zu finden alle nützlichen Informationen habe.

Wie werden die Informationen auf der Festplatte gespeichert? Welche Datenstrukturen umfassen die Würfel? Wenn ein MOLAP Modell verwendet keine Tabellen mit Spalten und Aufzeichnungen, dann ... was? Vor allem in hochdimensionalen Daten, welche Arten von Datenstrukturen macht das MOLAP Modell so leistungsfähig? Haben MOLAP-Implementierungen etwas analog zu RDBMS Indizes verwenden?

Warum ist OLAP-Server so viel besser bei der Verarbeitung Ad-hoc-Abfragen? Die gleiche Art von Aggregationen, die vielleicht nehmen Stunden in einer gewöhnlichen relationalen Datenbank verarbeiten kann in Millisekunden in einer OLTP-Cube verarbeitet werden. Was sind die zugrunde liegenden Mechanismen des Modells, das das möglich zu machen?

War es hilfreich?

Lösung

Ich habe ein paar Systeme implementiert, die mimiced welche OLAP-Cubes zu tun, und hier sind ein paar Dinge, die wir sie bekommen haben, um zu arbeiten.

1) Die Kerndaten wurden in einer n-dimensionalen Matrix, die alle im Speicher gehalten, und alle Schlüssel wurden über Hierarchien von Zeigern auf die darunter liegende Array implementiert. Auf diese Weise konnten wir mehrere verschiedene Sätze von Tasten für die gleichen Daten haben. Die Daten in der Anordnung war das Äquivalent der Faktentabelle, wäre es oft nur ein paar Stücke von Daten haben, in einem Fall war Preis und die Anzahl verkauft.

2) Die zugrunde liegende Array war oft spärlich, so dass, sobald sie erstellt wurde, haben wir alle leeren Zellen zu entfernen, um Speicherplatz zu sparen - eine Menge harter Kern Pointer-Arithmetik, aber es funktionierte

.

3) Wie wir heirarchies der Schlüssel hatten, konnten wir Routinen schreiben ganz leicht einfach eine Hierarchie zu bohren nach unten / oben. Zum Beispiel würden wir Jahr für die Daten zugreifen, die von den Monaten Schlüssel durchlaufen, was wiederum zu Tagen abgebildet und / oder Wochen. Auf jeder Ebene würden wir als Teil aggregieren Daten für den Bau der Würfel -. Berechnungen wesentlich schneller

4) Wir haben keine Art von Abfragesprache umsetzen, aber wir haben Unterstützung auf allen Achsen Drilldown (bis zu 7 in unserem größten Würfel), und das war direkt an die UI gebunden, die die Benutzer gefallen haben.

5) Wir implementierten Kern Sachen in C ++, aber in diesen Tagen Ich rechnen damit, C # schnell genug sein könnte, aber ich würde darum kümmern, wie spärlich Arrays zu implementieren.

Ich hoffe, das hilft, klingt interessant.

Andere Tipps

Das Buch Microsoft SQL Server 2008 Analysis Services Unleashed einige der buchstabiert Besonderheiten der SSAS 2008 in anständigem Detail. Es ist nicht ganz ein „hier ist genau, wie SSAS unter der Haube arbeitet“, aber es ist ziemlich suggestiv, vor allem auf der Datenstruktur Seite. (Es ist nicht ganz so detailliert / spezifisch über die genaue Algorithmen.) Ein paar der Dinge, die ich, als Amateur in diesem Bereich, aus diesem Buch versammelt. Das ist alles über SSAS MOLAP:

  • Trotz all des Geredes über multidimensionale Würfel, Faktentabelle (aka Measuregruppe) Daten sind nach wie vor, in erster Näherung, schließlich in grundsätzlich 2D-Tabellen gespeichert ist, eine Zeile pro Tatsache. Eine Reihe von OLAP-Operationen scheint letztlich bestehen über Zeilen in 2D-Tabellen Laufen.
  • Die Daten sind potenziell viel kleinere Innen MOLAP als in einer entsprechenden SQL-Tabelle, jedoch. Ein Trick ist, dass jede eindeutige Zeichenfolge nur einmal gespeichert wird, in einem „string store“. Datenstrukturen können dann beziehen sich auf Zeichenketten in einer kompakteren Form (String-ID, im Grunde). SSAS komprimiert auch Reihen innerhalb des MOLAP-Speicher in irgendeiner Form. Dieses Schrumpfen Ich gehe davon mehr der Daten bleiben im RAM ermöglicht gleichzeitig, was gut ist.
  • In ähnlicher Weise kann SSAS oft eine Teilmenge der Daten durchlaufen, anstatt der vollständigen Datensatz. Einige Mechanismen im Spiel sind:
    • standardmäßig SGVW baut einen Hash-Index für jede Dimension / Attributwert; es so weiß „sofort“, welche Seiten auf der Festplatte für die relevanten Daten enthalten, sagen wir, Jahr = 1997.
    • Es gibt eine Cache-Architektur, in der relevanten Teilmengen der Daten im RAM-Speicher aus dem gesamten Datensatz getrennt gespeichert werden. Zum Beispiel könnten Sie eine Teilcube zwischengespeichert, die nur ein paar Ihrer Felder hat, und das bezieht sich nur auf die Daten aus dem Jahr 1997. Wenn eine Abfrage nur etwa 1997 fragt, dann wird es iterieren nur über diesen Teilcube, wodurch die Dinge zu beschleunigen . (Beachten Sie jedoch, dass ein „Teilcube“ ist in erster Näherung nur eine 2D-Tabelle.)
    • Wenn Sie vordefinierte Aggregate sind, dann können diese kleineren Teilmengen auch bei Würfelverarbeitungszeit vorberechnet werden, anstatt nur auf Anfrage berechnet / im Cache gespeichert.
  • SSAS Tatsache Tabellenzeilen sind eine feste Größe, die presumibly in irgendeiner Form hilft. (In SQL in constrast, haben Sie vielleicht mit variabler Breite String-Spalten).
  • Die Caching-Architektur bedeutet auch, dass, sobald eine Aggregation berechnet wurde, ist es nicht von der Festplatte und neu berechnet immer wieder erneut abgerufen werden muss.

Dies sind einige der Faktoren im Spiel in SSAS sowieso. Ich kann nicht behaupten, dass es nicht andere wichtige Dinge auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top