Veröffentlichung des DBMS DuckDB 1.4.0 mit Unterstützung für Datenbankverschlüsselung.

Die Veröffentlichung von DuckDB 1.4.0, einer Datenbank-Management-System, das auf die Ausführung analytischer Abfragen ausgerichtet ist und konzeptionell an SQLite erinnert, wurde veröffentlicht. DuckDB kombiniert Eigenschaften von SQLite wie Kompaktheit, die Bereitstellung als eingebettete Bibliothek, das Speichern der Datenbank in einer Datei sowie eine CLI-Schnittstelle mit Möglichkeiten und Optimierungen zur Ausführung analytischer Abfragen, die einen erheblichen Teil der gespeicherten Daten abdecken, wie beispielsweise die Aggregation des gesamten Inhalts von Tabellen oder die Zusammenführung mehrerer großer Tabellen. Der Code des Projekts ist in C++ geschrieben und wird unter der MIT-Lizenz verbreitet.

DuckDB bietet einen erweiterten SQL-Dialekt, der zusätzliche Möglichkeiten für die Verarbeitung sehr komplexer und langwieriger Abfragen umfasst. Es ist möglich, komplexe Typen (Arrays, Strukturen, Vereinigungen) zu verwenden, sowie beliebige und verschachtelte, korrelierende Unterabfragen auszuführen. Es wird die gleichzeitige Ausführung mehrerer Abfragen unterstützt, sowie die Ausführung von Abfragen direkt aus Dateien im CSV- und Parquet-Format. Der Import aus der PostgreSQL-Datenbank wird ebenfalls unterstützt.

Das Projekt verwendet eine Shell von SQLite, einen Parser von PostgreSQL, die Date Math-Komponente von MonetDB, eine eigene Implementierung von Fensterfunktionen (basierend auf dem Segmentbaumaggregationsalgorithmus), einen regulären Ausdruck-Handler auf Basis der RE2-Bibliothek, einen eigenen Abfrageoptimierer, einen MVCC-Mechanismus zur Verwaltung der gleichzeitigen Ausführung von Aufgaben (Multi-Version Concurrency Control) sowie eine vektorisierte Abfragedurchführungsengine, die auf dem Hyper-Pipelining-Abfrageausführungsalgorithmus basiert und es ermöglicht, große Mengen an Werten in einem einzigen Vorgang zu verarbeiten.

In der neuen Version:

  • Unterstützung für die Speicherung von Datenbankdateien in verschlüsselter Form wurde hinzugefügt. Für die Verschlüsselung wird der AES-256-Algorithmus im GCM-Modus verwendet. Nicht nur die Hauptdatei mit den Daten wird verschlüsselt, sondern auch WAL-Protokolle und temporäre Dateien. Die Schlüssel für die Verschlüsselung der Datenbank werden mit dem Befehl ATTACH über den Parameter ENCRYPTION_KEY festgelegt. ATTACH 'encrypted.db' AS enc_db (ENCRYPTION_KEY 'quack_quack');
  • Die Unterstützung des Befehls „MERGE INTO“ wurde hinzugefügt, der als Alternative zur Anweisung „INSERT … ON CONFLICT“ verwendet werden kann. Er erfordert keinen Primärschlüssel und arbeitet mit beliebigen Zusammenführungsbedingungen. Der Befehl „MERGE INTO“ ermöglicht es, bedingte SQL-Anweisungen zu erstellen, die die Operationen INSERT, UPDATE und DELETE in einer Anweisung kombinieren. Zum Beispiel kann mit MERGE die Zusammenführung zweier Tabellen organisiert werden, indem fehlende Einträge eingefügt und bestehende aktualisiert werden. WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) MERGE INTO Stock USING deletes USING (item_id) WHEN MATCHED AND balance < delete_threshold THEN DELETE RETURNING merge_action, *;
  • Zusätzlich wurde die Unterstützung für Schreiboperationen bei Tabellen im Apache Iceberg-Format hinzugefügt (zuvor wurde nur das Lesen unterstützt), was es ermöglicht, Daten zwischen Iceberg und DuckDB zu übertragen.
  • Im Befehlszeilen-Client wurde ein Fortschrittsindikator für die Ausführung von Operationen mit einer Schätzung der verbleibenden Zeit bis zum Abschluss hinzugefügt.
  • Eine Fensterfunktion „FILL“ wurde hinzugefügt, die zur Interpolation fehlender Werte in geordneten Fenstern verwendet werden kann. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
  • Ein Teradata Connector-Plugin wurde implementiert, um eine Verbindung zu Teradata-Datenbanken herzustellen. Das Plugin ermöglicht es, mit Tabellen zu arbeiten, Abfragen auszuführen und SQL-Befehle direkt in Teradata auszuführen, indem DuckDB verwendet wird.
  • Die Unterstützung der Zustandsfixierung (Checkpoint) für im Speicher gespeicherte Tabellen wurde hinzugefügt, was die Implementierung von Kompression ermöglicht. Darüber hinaus erfolgt bei der Zustandsfixierung eine Bereinigung von gelöschten Zeilen und die Freigabe von Speicherplatz nach Löschoperationen. ATTACH ‘:memory:’ AS memory_compressed (COMPRESS);
  • Einige Leistungsoptimierungen wurden vorgeschlagen: Die Implementierung der Sortierung wurde auf den k-weg-Mischalgorithmus umgestellt, der die Datenbewegung reduziert. Allgemeine tabellarische Ausdrücke (Common Table Expressions, CTE) werden nun standardmäßig materialisiert.

Quelle: opennet.ru

60GB SSD 8Gb DDR4