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

Die Veröffentlichung von SQLite 3.42, einem schlanken DBMS, das als Plug-in-Bibliothek konzipiert ist, wurde veröffentlicht. Der SQLite-Code wird in der öffentlichen Domäne verteilt, d. h. uneingeschränkt und kostenfrei für jeden Zweck nutzbar. Die finanzielle Unterstützung für SQLite-Entwickler erfolgt durch ein eigens gegründetes Konsortium, dem Unternehmen wie Adobe, Oracle, Mozilla, Bentley und Bloomberg angehören.

Wichtigste Änderungen:

  • Für FTS5-Volltextindizes ist der Secure-Delete-Befehl implementiert, der alle Restdaten nach dem Löschen vollständig bereinigt.
  • Funktionen zur Verarbeitung von Daten im JSON-Format unterstützen jetzt JSON5-Erweiterungen.
  • Verbesserter Abfrageplaner. Die Count-of-View-Optimierung ist standardmäßig aktiviert. Die Behandlung nicht verwendeter Spalten in Unterabfragen wurde eliminiert. Verbesserte Implementierung der Push-Down-Optimierung.
  • Option „--unsafe-testing“ zur CLI hinzugefügt, um die Verwendung einiger gefährlicher Befehle wie „.testctrl“ beim Testen zu ermöglichen. Im abgesicherten Modus („--safe“) sind die Befehle „.log on“ und „.log off“ erlaubt. Unterstützung für das Trennzeichen „-“ für Argumente hinzugefügt, nach denen die Optionsverarbeitung deaktiviert wird. „:inf“- und „:nan“-Parameter für Unendlichkeits- und NaN-Werte hinzugefügt.
  • Die Namen anwendungsdefinierter SQL-Funktionen dürfen sich mit den Schlüsselwörtern CROSS, FULL, INNER, LEFT, NATURAL, OUTER und RIGHT überschneiden.
  • Erweiterte PRAGMA-Integritätsprüfungsfunktionen. Überprüfung für die Angabe des NaN-Werts in Spalten mit der NOT NULL-Bedingung hinzugefügt. Verbesserter Informationsgehalt von Fehlermeldungen.
  • Der Sitzungszusatz ermöglicht das Abfangen von Änderungen aus Tabellen ohne ROWIDs.
  • Der Modifikator „subsec“ wurde den Funktionen zum Arbeiten mit Zeit und Datum hinzugefügt, um Sekundenbruchteile zu verwenden.
  • Reduzierte Standardrekursionstiefe für Arrays und JSON-Objekte von 2000 auf 1000.

Darüber hinaus wurde die DBMS-Version DuckDB 0.8.0 erstellt, die die SQLite-Variante entwickelt, erweitert um Funktionen und Optimierungen für die Durchführung analytischer Abfragen, die einen erheblichen Teil der gespeicherten Daten abdecken, beispielsweise das Aggregieren des gesamten Inhalts von Tabellen oder das Zusammenführen mehrerer Tabellen große Tische. Es wird ein erweiterter Dialekt der SQL-Sprache bereitgestellt, einschließlich zusätzlicher Funktionen für die Verarbeitung sehr komplexer und lang laufender Abfragen sowie Unterstützung für komplexe Typen (Arrays, Strukturen, Unions), die gleichzeitige Ausführung mehrerer Abfragen und die direkte Ausführung von Abfragen Dateien im CSV-, JSON- und Parquet-Format. Es ist möglich, aus dem PostgreSQL-DBMS zu importieren.

Zusätzlich zum Shell-Code von SQLite verwendet das Projekt einen Parser von PostgreSQL, der in eine separate Bibliothek verschoben wurde, 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 Basierend auf der RE2-Bibliothek, einem eigenen Abfrageoptimierer, einem MVCC-Steuerungsmechanismus für die gleichzeitige Ausführung von Aufgaben (Multi-Version Concurrency Control) sowie einer vektorisierten Abfrageausführungs-Engine basierend auf dem Hyper-Pipelining-Abfrageausführungsalgorithmus, der die Verarbeitung großer Mengen von Aufgaben ermöglicht Werte auf einmal in einem Arbeitsgang. Der Projektcode wird unter der MIT-Lizenz vertrieben.

In der neuen Version von DuckDB:

  • Neue Ausdrücke „PIVOT“ und „UNPIVOT“ hinzugefügt, um Zeilen in Spalten und umgekehrt umzuwandeln.
  • Verbesserte Parallelisierung beim Import und Export von Daten. Standardmäßig sind das Lesen aus Dateien im CSV-Format in mehrere Streams und Multithread-Schreiben implementiert, wenn die Formate Parquet, CSV und JSON verwendet werden.
  • „**“-Operator hinzugefügt, um beim Definieren von Dateipfaden rekursiv über Verzeichnisse zu iterieren (z. B. FROM „'data/glob/crawl/stackoverflow/**/*.csv';“).
  • Unterstützung für Zusammenführungsvorgänge (JOIN) für Daten in Form einer Zeitreihe (Scheiben von Parameterwerten in bestimmten Zeitintervallen) hinzugefügt, bei denen das Kriterium für die Zusammenführung von Datensätzen nicht eine exakte, sondern eine ungefähre Übereinstimmung der Werte ist in einem Feld mit Zeit (Sie können beispielsweise Datensätze kombinieren, deren Zeit sich um nicht mehr als 1 Minute unterscheidet).
  • Das verzögerte Laden von Datenbankmetadaten wurde implementiert, wodurch der Start des DBMS um das Zehnfache beschleunigt werden konnte.
  • Unterstützung für die Verbindung benutzerdefinierter Funktionen in Python hinzugefügt.
  • Unterstützung für die ADBC-API (Arrow Database Connectivity) für die Datenübertragung mit Apache Arrow hinzugefügt.
  • Bindung für die Integration mit Swift-Code implementiert.
  • Das Verhalten des Divisionsoperators („/“) wurde geändert, der jetzt standardmäßig Gleitkommaberechnungen anstelle von Ganzzahloperationen durchführt. Für die Ganzzahldivision wurde ein neuer Operator „//“ vorgeschlagen. Das alte Verhalten kann durch Setzen von „SET integer_division=true;“ wiederhergestellt werden.
  • Die Methode zur Berücksichtigung von Nulldatensätzen beim Sortieren wurde von „NULLS FIRST“ in „NULLS LAST“ geändert, d. h. NULL-Werte werden nun am Ende statt am Anfang der Liste angezeigt. Das alte Verhalten kann mit der Einstellung „SET default_null_order=‘nulls_first‘;“ wiederhergestellt werden.

Darüber hinaus ist das von Facebook entwickelte CG/SQL-Projekt zu erwähnen, das einen Codegenerator für die Verwendung gespeicherter Prozeduren mit SQLite bereitstellt. Mit CG/SQL können Sie gespeicherte Prozeduren in einem speziellen T-SQL-Dialekt (Transact-SQL) schreiben, wodurch Sie die Funktionen der Standard-C-Bibliothek aufrufen und auf Daten in SQLite zugreifen können. Die generierten gespeicherten Prozeduren werden in C-Code kompiliert, der die SQLite-C-API verwendet, um bestimmte Aktionen auszuführen und komplexe Abfragen zu verarbeiten. Kompilierte gespeicherte Prozeduren können mit C-, Java- und Objective-C-Programmen verknüpft werden. Der Projektcode ist in C geschrieben und wird unter der MIT-Lizenz vertrieben.

Source: opennet.ru

Kommentar hinzufügen