Nebenläufigkeit
Nebenläufigkeit handhaben
Einzelner Prozess
Im In-Process-Modus hat DuckDB zwei konfigurierbare Optionen für Nebenläufigkeit:
- Lese-Schreib-Modus: Ein Prozess kann sowohl aus der Datenbank lesen als auch in sie schreiben.
- Nur-Lese-Modus: Mehrere Prozesse können aus der Datenbank lesen, aber kein Prozess kann schreiben (
access_mode = 'READ_ONLY').
Im Lese-Schreib-Modus unterstützt DuckDB mehrere Writer-Threads durch eine Kombination aus MVCC (Multi-Version Concurrency Control) und optimistischer Nebenläufigkeitskontrolle (siehe Nebenläufigkeitsmodell innerhalb eines einzelnen Prozesses), jedoch alles innerhalb dieses einen Writer-Prozesses. Der Grund für dieses Nebenläufigkeitsmodell ist, Daten im RAM zu cachen, damit analytische Abfragen schneller sind, statt bei jeder Abfrage zur Festplatte und zurück zu gehen. Außerdem können Funktionszeiger, der Datenbankkatalog und andere Elemente gecacht werden, sodass nachfolgende Abfragen auf derselben Verbindung schneller sind.
Nebenläufigkeitsmodell innerhalb eines einzelnen Prozesses
DuckDB unterstützt Nebenläufigkeit innerhalb eines einzelnen Prozesses nach den folgenden Regeln. Solange es keine Schreibkonflikte gibt, gelingen mehrere gleichzeitige Schreibvorgänge. Anhängen (Appends) konfliktiert nie, auch nicht auf derselben Tabelle. Mehrere Threads können außerdem gleichzeitig getrennte Tabellen oder getrennte Teilmengen derselben Tabelle aktualisieren. Die optimistische Nebenläufigkeitskontrolle greift, wenn zwei Threads versuchen, dieselbe Zeile zur gleichen Zeit zu bearbeiten (Update oder Delete). In diesem Fall schlägt der zweite Thread mit einem Konfliktfehler fehl.
Mehrere Prozesse
Das Schreiben ins native Datenbankformat von DuckDB aus mehreren Prozessen wird über das Quack-Remote-Protokoll unterstützt, das DuckDB zu einer Client-Server-Datenbank macht. Quack befindet sich mit DuckDB v1.5.2 in der Beta-Phase und soll mit DuckDB v2.0 im Herbst 2026 ausgereift sein.
Für eine stabile Lösung kommt das Format DuckLake mit PostgreSQL als Katalogdatenbank in Frage. Durch die Koordination über einen zentralen PostgreSQL-Katalog können DuckDB-Instanzen gleichzeitige Lese- und Schreibzugriffe auf dieselbe Datenbank erreichen. Die für den Produktionseinsatz vorgesehene DuckLake-v1.0-Spezifikation und ihre DuckDB-Implementierung wurden im April 2026 veröffentlicht.
Optimistische Nebenläufigkeitskontrolle
DuckDB verwendet optimistische Nebenläufigkeitskontrolle, ein Ansatz, der für leseintensive analytische Datenbanksysteme im Allgemeinen als am besten geeignet gilt, weil er die Verarbeitung von Leseabfragen beschleunigt. In der Folge verursachen Transaktionen, die dieselben Zeilen zur gleichen Zeit ändern, einen Transaktionskonfliktfehler:
Transaction conflict: cannot update a table that has been altered!Tip Ein üblicher Workaround bei einem Transaktionskonflikt besteht darin, die Transaktion erneut auszuführen.
Fehlerbehebung
Dateisperren. DuckDB behandelt gleichzeitige Datenbankzugriffe über Dateisperren. Seien Sie besonders vorsichtig, wenn Sie auf eine DuckDB-Datenbankdatei in einem gemeinsamen Verzeichnis zugreifen (z. B. von unterschiedlichen Betriebssystemen mit unterschiedlichen Dateisystemen oder von Network Attached Storage).