DuckDB 0.6.0, SQLite-Variante für analytische Abfragen veröffentlicht

Die Version des DBMS DuckDB 0.6.0 ist verfügbar und kombiniert Eigenschaften von SQLite wie Kompaktheit, die Möglichkeit zur Verbindung in Form einer eingebetteten Bibliothek, die Speicherung der Datenbank in einer Datei und eine praktische CLI-Schnittstelle mit Tools und Optimierungen für die Ausführung analytische Abfragen, die einen erheblichen Teil der gespeicherten Daten abdecken, beispielsweise die Gesamtinhalte von Tabellen aggregieren oder mehrere große Tabellen zusammenführen. Der Projektcode wird unter der MIT-Lizenz vertrieben. Die Entwicklung befindet sich noch im Stadium der Bildung experimenteller Releases, da das Speicherformat noch nicht stabilisiert ist und sich von Version zu Version ändert.

DuckDB bietet einen erweiterten SQL-Dialekt, der zusätzliche Funktionen für die Bearbeitung sehr komplexer und zeitaufwändiger Abfragen umfasst. Die Verwendung komplexer Typen (Arrays, Strukturen, Unions) und die Möglichkeit, beliebige und verschachtelte korrelierende Unterabfragen auszuführen, werden unterstützt. Es unterstützt die gleichzeitige Ausführung mehrerer Abfragen und die direkte Ausführung von Abfragen aus CSV- und Parquet-Dateien. Es ist möglich, aus dem PostgreSQL-DBMS zu importieren.

Zusätzlich zum Shell-Code von SQLite verwendet das Projekt einen Parser von PostgreSQL in einer separaten Bibliothek, die Date Math-Komponente von MonetDB, eine eigene Implementierung von Fensterfunktionen (basierend auf dem Segment Tree Aggregation-Algorithmus) und einen Prozessor für reguläre Ausdrücke, der darauf basiert die RE2-Bibliothek, ein eigener Abfrageoptimierer und ein MVCC-Kontrollmechanismus für die gleichzeitige Ausführung von Aufgaben (Multi-Version Concurrency Control) sowie eine vektorisierte Abfrageausführungs-Engine basierend auf dem Hyper-Pipelining Query Execution-Algorithmus, der große Wertemengen ermöglicht ​​auf einmal in einem Arbeitsgang verarbeitet werden.

Zu den Änderungen in der neuen Version gehören:

  • Die Arbeit an der Verbesserung des Speicherformats wurde fortgesetzt. Es wurde ein optimistischer Datenträgerschreibmodus implementiert, bei dem beim Laden einer großen Datenmenge in einer Transaktion die Daten komprimiert und im Streaming-Modus aus der Datenbank in eine Datei geschrieben werden, ohne auf die Bestätigung der Transaktion mit dem COMMIT-Befehl zu warten . Wenn ein COMMIT-Befehl empfangen wird, sind die Daten bereits auf die Festplatte geschrieben, und wenn ein ROLLBACK ausgeführt wird, werden sie verworfen. Zuvor wurden die Daten zunächst vollständig im Speicher gespeichert und beim Festschreiben auf der Festplatte gespeichert.
  • Unterstützung für das parallele Laden von Daten in separate Tabellen hinzugefügt, wodurch Sie die Ladegeschwindigkeit auf Multi-Core-Systemen deutlich erhöhen können. In der vorherigen Version dauerte das Laden einer Datenbank mit 150 Millionen Zeilen auf einer 10-Kern-CPU beispielsweise 91 Sekunden, in der neuen Version ist dieser Vorgang jedoch in 17 Sekunden abgeschlossen. Es gibt zwei parallele Lademodi – mit Beibehaltung der Reihenfolge der Datensätze und ohne Beibehaltung der Reihenfolge.
  • Für die Datenkomprimierung wird der FSST-Algorithmus (Fast Static Symbol Table) verwendet, der es Ihnen ermöglicht, Daten mithilfe eines gemeinsamen Wörterbuchs typischer Übereinstimmungen in Zeichenfolgen zu packen. Durch den Einsatz des neuen Algorithmus konnte die Größe der Testdatenbank von 761 MB auf 251 MB reduziert werden.
  • Zur Komprimierung von Gleitkommazahlen (DOUBLE und FLOAT) wurden Chimp- und Patas-Algorithmen vorgeschlagen. Im Vergleich zum vorherigen Gorillas-Algorithmus bietet Chimp höhere Komprimierungsgrade und eine schnellere Dekomprimierung. Der Patas-Algorithmus liegt im Komprimierungsverhältnis hinter Chimp zurück, ist jedoch in der Dekomprimierungsgeschwindigkeit viel schneller, was sich fast nicht vom Lesen unkomprimierter Daten unterscheidet.
  • Es wurde eine experimentelle Möglichkeit hinzugefügt, Daten aus CSV-Dateien in mehrere parallele Streams zu laden (SET experimentell_parallel_csv=true), was die Zeit zum Laden großer CSV-Dateien erheblich verkürzt. Wenn diese Option beispielsweise aktiviert war, wurde die Downloadzeit für eine 720 MB große CSV-Datei von 3.5 auf 0.6 Sekunden verkürzt.
  • Die Möglichkeit der parallelen Ausführung von Indexerstellungs- und Verwaltungsvorgängen wurde implementiert. Beispielsweise wurde die CREATE INDEX-Operation für eine Spalte mit 16 Millionen Datensätzen von 5.92 auf 1.38 Sekunden verkürzt.
  • Parallelisierung von Aggregationsvorgängen in Abfragen, die den Ausdruck „COUNT(DISTINCT col)“ enthalten, wurde aktiviert.
  • SQL hat Unterstützung für den UNION-Typ hinzugefügt, der die Bindung mehrerer Typen an ein Element ermöglicht (z. B. „UNION(num INT, error VARCHAR))“).
  • SQL bietet die Möglichkeit, Abfragen zu erstellen, die mit dem Wort „FROM“ anstelle von „SELECT“ beginnen. In diesem Fall wird davon ausgegangen, dass die Abfrage mit „SELECT *“ beginnt.
  • SQL hat Unterstützung für den COLUMNS-Ausdruck hinzugefügt, der es Ihnen ermöglicht, eine Operation für mehrere Spalten auszuführen, ohne den Ausdruck zu duplizieren. Beispiel: „SELECT MIN(COLUMNS(*)) from obs;“ führt dazu, dass die MIN-Funktion für jede Spalte in der obs-Tabelle ausgeführt wird und „SELECT COLUMNS('val[0-9]+') from obs;“ für Spalten mit einem Namen, der aus „val“ und Zahlen besteht.
  • Unterstützung für Operationen auf Listen hinzugefügt, zum Beispiel „SELECT [x + 1 für x in [1, 2, 3]] AS l;“.
  • Der Speicherverbrauch wurde optimiert. Standardmäßig verwendet die Linux-Plattform die Jemalloc-Bibliothek für die Speicherverwaltung. Deutlich verbesserte Leistung von Hash-Zusammenführungsvorgängen bei begrenztem Speicher.
  • Der Befehlszeilenschnittstelle wurde der Ausgabemodus „.mode duckbox“ hinzugefügt, der die mittleren Spalten unter Berücksichtigung der Breite des Terminalfensters verwirft (geeignet für die schnelle visuelle Beurteilung der Ergebnisse von Abfragen mit einer großen Anzahl von Spalten, z. B. „SELECT * FROM tbl“, die im Normalmodus auf mehrere Zeilen verteilt sind). Über den Parameter „.maxrows X“ können Sie die Anzahl der angezeigten Zeilen zusätzlich begrenzen.
  • Die CLI bietet eine automatische Vervollständigung der Eingabe unter Berücksichtigung des Kontexts (Eingabe von Schlüsselwörtern, Tabellennamen, Funktionen, Spaltennamen und Dateinamen wird abgeschlossen).
  • Die CLI verfügt standardmäßig über eine aktivierte Abfragefortschrittsanzeige.

Source: opennet.ru

Kommentar hinzufügen