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
