Veröffentlichung von SQLite 3.42 und DuckDB 0.8.0. CG/SQL mit einer Implementierung von gespeicherten Prozeduren für SQLite

Die Veröffentlichung von SQLite 3.42, einer leichten DBMS, die als Plug-in-Bibliothek gestaltet ist, wurde bekannt gegeben. Der Code von SQLite wird als Gemeinfreiheit (public domain) veröffentlicht, was bedeutet, dass er ohne Einschränkungen und kostenlos für beliebige Zwecke verwendet werden kann. Die finanzielle Unterstützung für die Entwickler von SQLite erfolgt durch ein eigens gegründetes Konsortium, zu dem Unternehmen wie Adobe, Oracle, Mozilla, Bentley und Bloomberg gehören.

Hauptänderungen:

  • Für Volltextindizes FTS5 wurde der Befehl secure-delete implementiert, der eine vollständige Bereinigung aller Restdaten nach der Löschung durchführt.
  • In den Funktionen zur Verarbeitung von JSON-Daten wurde Unterstützung für JSON5-Erweiterungen hinzugefügt.
  • Der Abfrageplaner wurde verbessert. Standardmäßig ist die Optimierung „count-of-view“ aktiviert. Die Verarbeitung ungenutzter Spalten in Unterabfragen wurde ausgeschlossen. Die Implementierung der Push-down-Optimierung wurde verbessert.
  • Die Befehlszeilenschnittstelle erhielt die Option „—unsafe-testing“, die die Verwendung einiger gefährlicher Befehle wie „.testctrl“ ermöglicht, die für Testzwecke gedacht sind. Im sicheren Modus („—safe“) sind die Befehle „.log on“ und „.log off“ erlaubt. Der Separator „—“ wurde hinzugefügt, nach dem die Verarbeitung von Optionen für die Argumente deaktiviert wird. Die Parameter „:inf“ und „:nan“, die mit unendlichen Werten und NaN verbunden sind, wurden hinzugefügt.
  • In den von der Anwendung definierten SQL-Funktionsnamen ist die Überschneidung mit den Schlüsselwörtern CROSS, FULL, INNER, LEFT, NATURAL, OUTER und RIGHT erlaubt.
  • Die Möglichkeiten von PRAGMA integrity_check wurden erweitert. Es wurde eine Überprüfung für die Angabe des Wertes NaN in Spalten mit der Bedingung NOT NULL hinzugefügt. Die Informationsgehalt von Fehlermeldungen wurde verbessert.
  • Im Zusatzmodul session wurde das Abfangen von Änderungen aus Tabellen ohne ROWID erlaubt.
  • In der Funktion zur Arbeit mit Zeiten und Daten wurde der Modifikator „subsec“ hinzugefügt, um Bruchteile von Sekunden zu verwenden.
  • Die Rekursionstiefe für JSON-Arrays und -Objekte wurde standardmäßig von 2000 auf 1000 verringert.

Darüber hinaus wurde die Version 0.8.0 des DuckDB DBMS veröffentlicht, das eine erweiterte Version von SQLite ist und Optimierungen für die Ausführung analytischer Abfragen bietet, die einen erheblichen Teil der gespeicherten Daten abdecken, beispielsweise die Aggregation des gesamten Inhalts von Tabellen oder das Zusammenführen mehrerer großer Tabellen. Es wird ein erweiterter SQL-Dialekt bereitgestellt, der zusätzliche Funktionen für die Verarbeitung sehr komplexer und langwieriger Abfragen umfasst und komplexe Typen (Arrays, Strukturen, Vereinigungen) unterstützt, die gleichzeitige Ausführung mehrerer Abfragen ermöglicht und die Ausführung von Abfragen direkt aus Dateien im CSV-, JSON- und Parquet-Format unterstützt. Es besteht die Möglichkeit, Datenbanken von PostgreSQL zu importieren.

Neben dem Shell-Code von SQLite wird im Projekt ein separater Parser aus PostgreSQL verwendet, der Date Math-Komponente von MonetDB, eine eigene Implementierung von Fensterfunktionen (basierend auf dem Segmentbaum-Aggregationsalgorithmus), einen regulären Ausdrucks-Handler auf Basis der RE2-Bibliothek, einen eigenen Abfrageoptimierer, einen MVCC-Mechanismus für das Management der gleichzeitigen Ausführung von Aufgaben (Multi-Version Concurrency Control) sowie eine vektorisierte Abfrageausführungs-Engine auf Basis des Hyper-Pipelining Query Execution-Algorithmus, die es ermöglicht, große Wertmengen in einem einzigen Vorgang zu verarbeiten. Der Code des Projekts wird unter der MIT-Lizenz verteilt.

In der neuen Version von DuckDB:

  • Es wurden neue Ausdrücke „PIVOT“ und „UNPIVOT“ hinzugefügt, um Zeilen in Spalten und umgekehrt zu transformieren.
  • Das Parallelisieren beim Import und Export von Daten wurde verbessert. Standardmäßig wird das Lesen von CSV-Dateien in mehreren Threads und das Multithreading beim Schreiben mit den Formaten Parquet, CSV und JSON realisiert.
  • Der Operator „**“ wurde hinzugefügt, um rekursiv Verzeichnisse beim Definieren von Dateipfaden zu durchsuchen (z.B. FROM "‘data/glob/crawl/stackoverflow/**/*.csv’;“).
  • Die Unterstützung von JOIN-Operationen für zeitbasierte Daten (Parameterwerte über vorgegebene Zeitintervalle) wurde hinzugefügt, bei denen bei der Zusammenführung von Datensätzen nicht exakte, sondern annähernde Übereinstimmungen der Zeitwerte verwendet werden (z.B. können Datensätze zusammengeführt werden, deren Zeit sich um nicht mehr als 1 Minute unterscheidet).
  • Die verzögerte Laden von Metadaten der DB wurde realisiert, was die Startzeit der DBMS um ein Vielfaches beschleunigt hat.
  • Unterstützung für die Verbindung benutzerdefinierter Funktionen in Python hinzugefügt.
  • Unterstützung für die ADBC-API (Arrow Database Connectivity) zur Datenübertragung unter Verwendung von Apache Arrow hinzugefügt.
  • Bindung zur Integration mit Swift-Code implementiert.
  • Das Verhalten des Divisionsoperators ("/") wurde geändert, sodass nun standardmäßig Berechnungen mit Gleitkommazahlen anstelle von Ganzzahloperationen durchgeführt werden. Für die ganzzahlige Division wurde ein neuer Operator "//" vorgeschlagen. Das alte Verhalten kann durch die Einstellung "SET integer_division=true;" wiederhergestellt werden.
  • Die Methode zur Behandlung von NULL-Werten bei der Sortierung wurde von "NULLS FIRST" auf "NULLS LAST" geändert, d.h. NULL-Werte werden jetzt am Ende der Liste ausgegeben, nicht am Anfang. Das alte Verhalten kann durch die Einstellung "SET default_null_order='nulls_first';" wiederhergestellt werden.

Zusätzlich kann das von Facebook entwickelte Projekt CG/SQL hervorgehoben werden, das einen Codegenerator für die Verwendung von gespeicherten Prozeduren mit SQLite bereitstellt. CG/SQL ermöglicht die Erstellung von gespeicherten Prozeduren in einem speziellen Dialekt von T-SQL (Transact-SQL), der den Aufruf von Funktionen der Standard-C-Bibliothek und den Zugriff auf Daten in SQLite erlaubt. Die erstellten gespeicherten Prozeduren werden in C-Code kompiliert, der die SQLite C API verwendet, um die angegebenen Aktionen auszuführen und komplexe Abfragen zu bearbeiten. Die kompilierten gespeicherten Prozeduren können in Programme in C, Java und Objective-C eingebunden werden. Der Projektcode ist in C geschrieben und steht unter der MIT-Lizenz.

Quelle: opennet.ru

60GB SSD 8Gb DDR4