DuckDB 0.6.0, SQLite-variant voor analytische queries gepubliceerd

De release van DuckDB 0.6.0 DBMS is beschikbaar, waarin eigenschappen van SQLite worden gecombineerd als compactheid, de mogelijkheid om verbinding te maken in de vorm van een ingebedde bibliotheek, de database in één bestand op te slaan en een handige CLI-interface, met tools en optimalisaties voor het uitvoeren analytische zoekopdrachten die een aanzienlijk deel van de opgeslagen gegevens bestrijken, bijvoorbeeld die de volledige inhoud van tabellen samenvoegen of meerdere grote tabellen samenvoegen. De projectcode wordt gedistribueerd onder de MIT-licentie. De ontwikkeling bevindt zich nog in de fase van het vormen van experimentele releases, aangezien het opslagformaat nog niet is gestabiliseerd en van versie tot versie verandert.

DuckDB biedt een geavanceerd SQL-dialect met extra mogelijkheden voor het afhandelen van zeer complexe en tijdrovende zoekopdrachten. Het gebruik van complexe typen (arrays, structuren, unies) en de mogelijkheid om willekeurige en geneste correlerende subquery's uit te voeren worden ondersteund. Het ondersteunt het gelijktijdig uitvoeren van meerdere query's, waarbij query's rechtstreeks vanuit CSV- en Parquet-bestanden worden uitgevoerd. Het is mogelijk om te importeren vanuit het PostgreSQL DBMS.

Naast de shell-code van SQLite maakt het project gebruik van een parser van PostgreSQL in een aparte bibliotheek, de Date Math-component van MonetDB, een eigen implementatie van vensterfuncties (gebaseerd op het Segment Tree Aggregation-algoritme), een reguliere expressieprocessor gebaseerd op de RE2-bibliotheek, zijn eigen query-optimizer en een MVCC-controlemechanisme voor gelijktijdige uitvoering van taken (Multi-Version Concurrency Control), evenals een gevectoriseerde engine voor het uitvoeren van query's gebaseerd op het Hyper-Pipelining Query Execution-algoritme, dat grote sets waarden mogelijk maakt in één handeling in één keer te verwerken.

Onder de veranderingen in de nieuwe release:

  • Er werd verder gewerkt aan het verbeteren van het opslagformaat. Er is een optimistische schijfschrijfmodus geïmplementeerd, waarbij bij het laden van een grote set gegevens in één transactie de gegevens worden gecomprimeerd en vanuit de database in streamingmodus naar een bestand worden geschreven, zonder te wachten tot de transactie wordt bevestigd met het COMMIT-commando . Wanneer een COMMIT-opdracht wordt ontvangen, zijn de gegevens al naar schijf geschreven en wanneer een ROLLBACK wordt uitgevoerd, worden deze verwijderd. Voorheen werden de gegevens aanvankelijk volledig in het geheugen opgeslagen en wanneer ze werden vastgelegd, werden ze op schijf opgeslagen.
  • Ondersteuning toegevoegd voor het parallel laden van gegevens in afzonderlijke tabellen, waardoor u de laadsnelheid op multi-coresystemen aanzienlijk kunt verhogen. In de vorige release duurde het laden van een database met 150 miljoen rijen op een 10-core CPU bijvoorbeeld 91 seconden, maar in de nieuwe versie is deze bewerking in 17 seconden voltooid. Er zijn twee parallelle laadmodi: met behoud van de volgorde van de records en zonder behoud van de volgorde.
  • Voor datacompressie wordt het FSST-algoritme (Fast Static Symbol Table) gebruikt, waarmee u gegevens in strings kunt verpakken met behulp van een gemeenschappelijk woordenboek met typische overeenkomsten. Door het gebruik van het nieuwe algoritme werd het mogelijk om de omvang van de testdatabase terug te brengen van 761MB naar 251MB.
  • Er zijn Chimp- en Patas-algoritmen voorgesteld om drijvende-kommagetallen (DOUBLE en FLOAT) te comprimeren. Vergeleken met het vorige Gorillas-algoritme biedt Chimp hogere compressieniveaus en snellere decompressie. Het Patas-algoritme blijft qua compressieverhouding achter bij Chimp, maar is veel sneller qua decompressiesnelheid, wat bijna niet anders is dan het lezen van ongecomprimeerde gegevens.
  • Een experimentele mogelijkheid toegevoegd om gegevens uit CSV-bestanden in meerdere parallelle streams te laden (SET experimentele_parallel_csv=true), waardoor de tijd die nodig is om grote CSV-bestanden te laden aanzienlijk wordt verkort. Wanneer deze optie bijvoorbeeld was ingeschakeld, werd de downloadtijd voor een CSV-bestand van 720 MB teruggebracht van 3.5 naar 0.6 seconden.
  • De mogelijkheid van parallelle uitvoering van bewerkingen voor het maken en beheren van indexen is geïmplementeerd. De bewerking CREATE INDEX voor een kolom met 16 miljoen records is bijvoorbeeld teruggebracht van 5.92 naar 1.38 seconden.
  • Parallellisatie van aggregatiebewerkingen ingeschakeld in query's die de uitdrukking 'COUNT(DISTINCT col)' bevatten.
  • SQL heeft ondersteuning toegevoegd voor het UNION-type, waardoor meerdere typen aan één element kunnen worden gebonden (bijvoorbeeld “UNION(num INT, error VARCHAR))”).
  • SQL biedt de mogelijkheid om queries te vormen die beginnen met het woord “FROM” in plaats van “SELECT”. In dit geval wordt ervan uitgegaan dat de zoekopdracht begint met "SELECT *".
  • SQL heeft ondersteuning toegevoegd voor de COLUMNS-expressie, waarmee u een bewerking op meerdere kolommen kunt uitvoeren zonder de expressie te dupliceren. Bijvoorbeeld: “SELECT MIN(COLUMNS(*)) uit obs;” zorgt ervoor dat de MIN-functie wordt uitgevoerd voor elke kolom in de obs-tabel, en "SELECT COLUMNS('val[0-9]+') from obs;" voor kolommen met een naam bestaande uit "val" en cijfers.
  • Ondersteuning toegevoegd voor bewerkingen op lijsten, bijvoorbeeld "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
  • Het geheugengebruik is geoptimaliseerd. Standaard gebruikt het Linux-platform de jemalloc-bibliotheek voor geheugenbeheer. Aanzienlijk verbeterde prestaties van hash-samenvoegbewerkingen wanneer het geheugen beperkt is.
  • Uitvoermodus “.mode duckbox” toegevoegd aan de opdrachtregelinterface, waarbij de middelste kolommen worden verwijderd, rekening houdend met de breedte van het terminalvenster (geschikt voor het snel visueel beoordelen van de resultaten van zoekopdrachten met een groot aantal kolommen, zoals “SELECT * FROM tbl”, die in de normale modus over meerdere lijnen zijn verdeeld). Met behulp van de parameter “.maxrows X” kunt u bovendien het aantal weergegeven rijen beperken.
  • De CLI zorgt voor automatische aanvulling van invoer, rekening houdend met de context (invoer van trefwoorden, tabelnamen, functies, kolomnamen en bestandsnamen is voltooid).
  • De CLI heeft standaard een indicator voor de voortgang van zoekopdrachten ingeschakeld.

Bron: opennet.ru

Voeg een reactie