DuckDB 0.6.0 offentliggjort, en variant af SQLite til analytiske forespørgsler

Version 0.6.0 of the DuckDB database management system is now available, combining features of SQLite such as compactness, an embeddable library connection, database storage in a single file, and a user-friendly CLI interface with tools and optimizations for executing analytical queries that cover a significant portion of stored data, such as aggregating all content from tables or merging multiple large tables. The project's code is released under the MIT license. Development is still in the phase of forming experimental releases, as the storage format is not yet stabilized and changes from version to version.

I DuckDB tilbydes en udvidet SQL-dialekt, der inkluderer ekstra funktioner til håndtering af meget komplekse og langvarige forespørgsler. Der understøttes brugen af komplekse typer (arrays, strukturer, unions) og mulighed for udførelse af vilkårlige og nestede korrelerede underforespørgsler. Der kan køres flere forespørgsler samtidig, og forespørgsler kan udføres direkte fra filer i CSV- og Parquet-format. Der er også mulighed for import fra PostgreSQL-databaser.

Udover SQLite-shell-koden anvender projektet en separat bibliotek-parser fra PostgreSQL, komponenten Date Math fra MonetDB, sin egen implementering af vinduesfunktioner (basi i Segment Tree Aggregation-algoritmen), en regulær udtryksbehandler baseret på biblioteket RE2, en egen forespørgselsoptimerer, MVCC-mekanismen til kontrol af samtidige opgaver (Multi-Version Concurrency Control), samt en vektoriseret forespørgselsudførelsesmotor baseret på Hyper-Pipelining Query Execution-algoritmen, der muliggør samtidig behandling af store værdimængder i én operation.

Blandt ændringerne i den nye udgave:

  • Work continues on enhancing the storage format. An optimistic disk write mode has been implemented, allowing large datasets to be loaded in a single transaction, where data is compressed and streamed to the database file without waiting for the transaction confirmation by the COMMIT command. When the COMMIT command is issued, the data is already written to disk, and if ROLLBACK is executed, it is discarded. Previously, data was fully saved in memory before being committed to disk.
  • Support for parallel data loading into separate tables has been added, significantly increasing loading speeds on multi-core systems. For example, in the previous version, loading a database with 150 million rows on a 10-core CPU took 91 seconds, while in the new version, this operation is completed in 17 seconds. Two modes of parallel loading are provided — one that preserves the order of records and one that does not.
  • The FSST (Fast Static Symbol Table) algorithm is used for data compression, allowing data to be packed within strings using a shared dictionary of common matches. The application of the new algorithm has reduced the size of the test database from 761MB to 251MB.
  • For compressing floating-point numbers (DOUBLE and FLOAT), the Chimp and Patas algorithms have been proposed. Compared to the previously used Gorillas algorithm, Chimp offers a higher level of compression and faster decompression. The Patas algorithm lags behind Chimp in terms of compression rate but is significantly faster in decompression, almost matching the speed of reading uncompressed data.
  • En eksperimentel funktion til at indlæse data fra CSV-filer i flere parallelle strømme (SET experimental_parallel_csv=true) er blevet tilføjet, hvilket væsentligt reducerer indlæsningstiden for store CSV-filer. For eksempel blev indlæsningstiden for en CSV-fil på 720 MB reduceret fra 3,5 til 0,6 sekunder, når indstillingen aktiveres.
  • Muligheden for parallel udførelse af operationer til oprettelse og administration af indekser er blevet implementeret. For eksempel blev udførelsen af CREATE INDEX-operationen for en kolonne med 16 millioner poster reduceret fra 5,92 til 1,38 sekunder.
  • Parallellisering af aggregeringsoperationer i forespørgsler, der indeholder udtrykket "COUNT(DISTINCT col)" er blevet sikret.
  • SQL har fået støtte til UNION-typen, der tillader tilknytning af flere typer til ét element (for eksempel "UNION(num INT, error VARCHAR)").
  • I SQL er det muligt at danne forespørgsler, der starter med ordet "FROM" i stedet for "SELECT". I så fald antages det, at forespørgslen starter med "SELECT *".
  • SQL har fået støtte til udtrykket "COLUMNS", som muliggør udførelse af operationer på flere kolonner uden gentagelse af udtrykket. For eksempel, "SELECT MIN(COLUMNS(*)) from obs;" vil udføre MIN-funktionen for hver kolonne i tabellen obs, mens "SELECT COLUMNS('val[0-9]+') from obs;" gælder for kolonner med navne bestående af "val" og cifre.
  • Understøttelse af operationer på lister er blevet tilføjet, for eksempel "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
  • Optimering af hukommelsesforbruget er blevet gennemført. Som standard på Linux-platformen anvendes jemalloc-biblioteket til hukommelseshåndtering. Ydeevnen ved hash-sammenføjninger er betydeligt forbedret ved begrænset hukommelsesstørrelse.
  • I kommandolinjegrænsefladen er der tilføjet en udskriftsmodus ".mode duckbox", der fjerner de midterste kolonner i forhold til terminalvinduets bredde (velegnet til hurtig visuel evaluering af forespørgsler med mange kolonner, såsom "SELECT * FROM tbl", der i normal tilstand flyder over flere linjer). Med parameteren ".maxrows X" kan man desuden begrænse antallet af udskrevne linjer.
  • I CLI er der sikret automatisk fuldførelse af indtastning baseret på konteksten (kompletterer indtastningen af nøgleord, tabelnavne, funktioner, kolonnenavne og filnavne).
  • I CLI er visningen af en indikator for forespørgselsprogres blevet aktiveret som standard.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster