Zum Inhalt
wannacode

OLTP und OLAP

Kurz gesagt: OLTP sind die vielen kleinen Abfragen einer Anwendung wie einer Kasse, und OLAP sind die wenigen großen Berichtsabfragen, die alle Zeilen lesen.

Problem

Die Kasse und die Buchhaltung

Die Datenbank des Shops macht zwei sehr verschiedene Aufgaben gleichzeitig. Der Kunde an der Kasse fragt nach einer Bestellung und will die Antwort sofort. Der Inhaber fragt am Montagmorgen „wie viel haben wir pro Monat und pro Kategorie verkauft“, und dafür braucht es alle Bestellungen des Jahres.

Die ersten sind tausende pro Minute, klein und über einen Schlüssel. Die zweiten sind ein paar am Tag, aber jede liest alles. Dieselbe Datenbank ist selten in beidem gut. Deshalb gibt es verschiedene Arten von Datenbanken, und um sie geht es in diesem Modul.

Die Idee

OLTP: viele kleine Abfragen

OLTP (online transaction processing) ist die Aufgabe der Kasse: ein paar Zeilen lesen oder ändern, die du über einen Schlüssel kennst. Die Produkte in Bestellung 42:

SQLDatenbank: Shop

Der Plan zeigt, dass die Datenbank nicht die ganze Tabelle liest. Sie sucht (SEARCH) mit dem Index des Primärschlüssels und geht direkt zu den zwei Zeilen:

SQLDatenbank: Shop

OLTP-Abfragen schreiben auch. Ein Kauf ist eine Transaktion: Die Bestellung, ihre Zeile und der Bestand werden zusammen geschrieben oder gar nicht:

SQLDatenbank: Shop

Probier es aus

Der Kunde fragt nach

Der Kunde ruft wegen Bestellung 15 an. Zeige ihren Status und ihr Datum (die Spalten status und ordered_at).

SQLDatenbank: Shop

Die Idee

OLAP: wenige große Abfragen

OLAP (online analytical processing) ist die Aufgabe der Analyse: viele Zeilen sammeln, gruppieren und vergleichen. Der Umsatz pro Monat für 2026:

SQLDatenbank: Shop

Ein Schlüssel hilft hier nicht. Der Bericht braucht alle Bestellzeilen, deshalb beginnt der Plan mit SCAN:

SQLDatenbank: Shop

Bei 152 Zeilen ist das sofort fertig. Bei 50 Millionen Zeilen liest der Bericht Gigabytes und belastet Platte, Speicher und Prozessor minutenlang. Währenddessen wartet die Kasse. Und ein Index hilft nicht, weil der Bericht ohnehin alles will.

Die Idee

Das Data Warehouse

Die Lösung ist, dass die Berichte die Datenbank der Website nicht anfassen. Jede Nacht kopiert ein Programm die Daten in eine eigene Datenbank für die Analyse, das Data Warehouse. Das Kopieren heißt ETL: extract, transform, load (extrahieren, umwandeln, laden).

Beim Umwandeln werden die Tabellen meist zu einer breiten Tabelle zusammengeführt: alles zu einem Verkauf in einer Zeile. Das ist Denormalisierung, die in der Datenbank der Website ein Fehler wäre: Der Name des Produkts wiederholt sich in jeder Zeile. Hier ist es Absicht, weil die Daten nur gelesen werden und der Bericht kein JOIN braucht. CREATE TABLE … AS SELECT macht aus dem Ergebnis einer Abfrage eine neue Tabelle:

SQLDatenbank: Shop

Die stornierten Bestellungen werden schon beim Kopieren entfernt, damit die Berichte nicht an sie denken müssen.

Genauer, für Neugierige

Echte Data Warehouses (ClickHouse, BigQuery, Snowflake, Amazon Redshift) speichern die Daten spaltenweise, nicht zeilenweise. Ein Umsatzbericht liest nur die Spalten day, category und amount und überspringt den Rest. Dafür ist die Lektion über spaltenorientierte Datenbanken da. Die breite Tabelle ist meist eine „Faktentabelle“ mit kleinen Nachschlagetabellen drumherum (Dimensionen: Datum, Produkt, Filiale), und das Ganze heißt Sternschema.

Probier es aus

Ein Bericht pro Kategorie

Aus der Tabelle sales: der Umsatz pro Kategorie für 2026 (die Spalten category und revenue, auf Cent gerundet), vom größten abwärts.

SQLDatenbank: Shop

Übung

Wie viele Bestellungen pro Stadt

Aus der Tabelle sales: wie viele Bestellungen es aus jeder Stadt gibt (die Spalten city und orders), die meisten zuerst, bei Gleichstand nach dem Namen der Stadt. Ein Kunde ohne Stadt ist eine Zeile mit NULL.

SQLDatenbank: Shop

Die Idee

Die Art der Daten und die Art der Frage

OLTP und OLAP sind die erste Trennung. Die übrigen ergeben sich daraus, wie die Daten aussehen und was du sie fragst. Jede Lektion des Moduls ist ein solches Paar, und die meisten haben einen Simulator der echten Datenbank im Browser:

Die Daten und die Frage Art der Datenbank Beispiele
Ich hole über einen Schlüssel, schnell, oft Key-Value Redis, Valkey, DynamoDB
Ein ganzes Dokument mit verschachtelten Teilen Dokumentendatenbank MongoDB
Was geschehen ist und in welcher Reihenfolge Ereignisstrom Kafka, Redpanda
Wer mit wem verbunden ist, in wie vielen Schritten Graph Neo4j
Summen über Millionen Zeilen, über die Zeit spaltenorientiert, Zeitreihen ClickHouse, TimescaleDB
Wörter im Text Volltextsuche Elasticsearch, OpenSearch
Ähnlich in der Bedeutung Vektor pgvector, Qdrant
Mehr Daten und Abfragen, als ein Server verkraftet Cluster Replikation, Sharding

Am Ende steht die Lektion, wie du wählst. Die Antwort ist fast immer: eine relationale Datenbank für die Wahrheit und eine andere Art daneben, nur für die Frage, bei der sie schwach ist.

Test

Teste dich

1. Welche davon ist eine OLTP-Abfrage?
2. In der breiten Tabelle sales ist jede Zeile ein Produkt einer Bestellung. Wie zählst du die Bestellungen?
3. Warum führt man Berichte meist nicht auf der Datenbank aus, auf der die Website läuft?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·