Concurrency & Parallelism

Datenbank-Server können Anfragen mehrerer Clients typischerweise parallel verarbeiten. Diese Parallelverarbeitung wird eingeschränkt, wenn sich die Clients auf gemeinsam benutzen Datenbankobjekten synchronisieren müssen (Sperren), oder wenn Transbase eigene Ressourcen (z.B. den Cache) unter den Anfragen teilen muss. 

Da heutige Rechnerarchitekturen oft mehr aktive Prozessorkerne aufweisen, als parallele Anfragen an der Datenbank anliegen, ist es eine wichtige Aufgabe, eine einzelne Abfrage auf mehrere Prozessorkerne zu verteilen, d.h. eine Anfrage, z.B. eine Join-Query, in sich zu parallelisieren. Transbase hat dazu ein dynamisches Thread-Modell, mit dem sich die vorhandenen CPU-Ressourcen perfekt ausnützen lassen. 

Als (einfaches) Beispiel soll hier die Sortieroperation dienen, die zunächst parallel unsortierte Tupelpuffer in sortierte Tupelpuffer überführen kann. Die sortierten Tupelpuffer wiederum können - ebenfalls parallel - in größere sortierte Tupelpuffer zusammengemischt werden, bis letztlich nur ein sortierter Tuplepuffer, das Sortierergebnis, übrig bleibt. 

In der Verarbeitung komplexer SQL-Anfragen bieten sich daneben viele weitere Möglichkeiten der Parallelisierung. Vom Lesen der Datenblöcke über das Konstruieren der jeweiligen Tupel (Projektionen), das Filtern von Tupeln (Restriktionen) bis hin zum Sortieren oder Gruppieren des Ergebnisses sind diese Operationen auf dem beschriebenen Wege parallelisierbar. 

Insgesamt kann so auf Multi-Core-Prozessoren eine extreme Querybeschleunigung beobachtet werden.