DuckDB 0.6.0, SQLite fariant foar analytyske queries publisearre

De frijlitting fan 'e DuckDB 0.6.0 DBMS is beskikber, kombinearret sokke eigenskippen fan SQLite as kompaktens, de mooglikheid om te ferbinen yn' e foarm fan in ynbêde bibleteek, it opslaan fan de databank yn ien bestân en in handige CLI-ynterface, mei ark en optimisaasjes foar it útfieren analytyske queries dy't in wichtich part fan 'e opsleine gegevens dekke, bygelyks dy't de hiele ynhâld fan tabellen aggregearje of ferskate grutte tabellen fusearje. De projektkoade wurdt ferspraat ûnder de MIT-lisinsje. De ûntwikkeling is noch op it poadium fan it foarmjen fan eksperimintele releases, om't it opslachformaat noch net stabilisearre is en feroaret fan ferzje nei ferzje.

DuckDB leveret in avansearre SQL-dialekt dat ekstra mooglikheden omfettet foar it behanneljen fan heul komplekse en tiidslinende fragen. It gebrûk fan komplekse typen (arrays, struktueren, fakbûnen) en de mooglikheid om willekeurige en nestede korrelearjende subqueries út te fieren wurde stipe. It stipet it útfieren fan meardere queries tagelyk, it útfieren fan queries direkt fan CSV- en Parquet-bestannen. It is mooglik om te ymportearjen fanút de PostgreSQL DBMS.

Neist de shell-koade fan SQLite brûkt it projekt in parser fan PostgreSQL yn in aparte bibleteek, de Date Math-komponint fan MonetDB, syn eigen ymplemintaasje fan finsterfunksjes (basearre op it Segment Tree Aggregation-algoritme), in reguliere ekspresjeprosessor basearre op de RE2-bibleteek, in eigen query-optimizer, en in MVCC-kontrôlemeganisme simultane útfiering fan taken (Multi-Version Concurrency Control), lykas ek in vectorisearre query-útfiermotor basearre op it Hyper-Pipelining Query Execution-algoritme, wêrtroch grutte sets wearden mooglik binne te ferwurkjen yn ien kear yn ien operaasje.

Under de feroaringen yn 'e nije release:

  • It wurk bleau te ferbetterjen it opslachformaat. In optimistyske skriuwmodus foar skiif is ymplementearre, wêryn by it laden fan in grutte set gegevens yn ien transaksje de gegevens wurde komprimearre en skreaun nei in bestân fan 'e databank yn streamingmodus, sûnder te wachtsjen op' e transaksje om te befêstigjen mei it kommando COMMIT . As in COMMIT-kommando wurdt ûntfongen, binne de gegevens al op skiif skreaun, en as in ROLLBACK wurdt útfierd, wurdt it fuortsmiten. Eartiids waarden de gegevens yn earste ynstânsje folslein bewarre yn it ûnthâld, en as se ynsette, waarden se opslein op skiif.
  • Stipe tafoege foar parallel laden fan gegevens yn aparte tabellen, wêrtroch jo de ladingssnelheid signifikant kinne ferheegje op multi-core systemen. Bygelyks, yn 'e foarige release, it laden fan in databank mei 150 miljoen rigen op in 10-core CPU naam 91 sekonden, mar yn' e nije ferzje is dizze operaasje yn 17 sekonden foltôge. D'r binne twa parallelle ladenmodi - mei behâld fan 'e folchoarder fan records en sûnder behâld fan oarder.
  • Foar gegevenskompresje wurdt it FSST (Fast Static Symbol Table) algoritme brûkt, wêrtroch jo gegevens yn snaren kinne pakke mei in gewoan wurdboek fan typyske wedstriden. It gebrûk fan it nije algoritme makke it mooglik om de grutte fan 'e testdatabase te ferminderjen fan 761MB nei 251MB.
  • Chimp en Patas-algoritmen binne foarsteld om driuwende puntnûmers (DOUBLE en FLOAT) te komprimearjen. Yn ferliking mei it foarige Gorillas-algoritme leveret Chimp hegere nivo's fan kompresje en rapper dekompresje. It Patas-algoritme leit efter Chimp yn kompresjeferhâlding, mar is folle flugger yn dekompresjesnelheid, wat hast net oars is fan it lêzen fan net-komprimeare gegevens.
  • In eksperimintele mooglikheid tafoege om gegevens fan CSV-bestannen yn meardere parallelle streamen te laden (SET experimental_parallel_csv=true), wat de tiid signifikant ferminderet dy't it nimt om grutte CSV-bestannen te laden. Bygelyks, doe't dizze opsje ynskeakele wie, waard de ynlaadtiid foar in 720 MB CSV-bestân fermindere fan 3.5 nei 0.6 sekonden.
  • De mooglikheid fan parallelle útfiering fan yndeks skepping en behear operaasjes is ymplemintearre. Bygelyks, de operaasje CREATE INDEX op in kolom mei 16 miljoen records waard fermindere fan 5.92 nei 1.38 sekonden.
  • Ynskeakele parallelisaasje fan aggregaasje operaasjes yn queries befetsje de útdrukking "COUNT (DISTINCT col)".
  • SQL hat stipe tafoege foar it UNION-type, wêrtroch meardere typen kinne wurde bûn oan ien elemint (bygelyks "UNION(num INT, flater VARCHAR))").
  • SQL biedt de mooglikheid om fragen te foarmjen dy't begjinne mei it wurd "FROM" ynstee fan "SELECT". Yn dit gefal wurdt oannommen dat de query begjint mei "SELECT *".
  • SQL hat stipe tafoege foar de COLUMNS-ekspresje, wêrtroch jo in operaasje op meardere kolommen kinne útfiere sûnder de ekspresje te duplikearjen. Bygelyks, "SELECT MIN(COLUMNS(*)) from obs;" sil feroarsaakje dat de MIN-funksje wurdt útfierd foar elke kolom yn 'e obs-tabel, en "SELECT COLUMNS('val[0-9]+') út obs;" foar kolommen mei in namme besteande út "val" en sifers.
  • Stipe tafoege foar operaasjes op listen, bygelyks "SELECT [x + 1 foar x yn [1, 2, 3]] AS l;".
  • Geheugenferbrûk is optimalisearre. Standert op it platfoarm Linux De jemalloc-bibleteek wurdt brûkt foar ûnthâldbehear. De prestaasjes fan hash-gearfoegingsoperaasjes ûnder beheinde ûnthâldomstannichheden binne signifikant ferbettere.
  • Added ".mode duckbox" útfiermodus oan de kommandorigelynterface, dy't de middelste kolommen fersmyt mei de breedte fan it terminalfinster (geskikt foar fluch fisueel beoardieling fan de resultaten fan fragen mei in grut oantal kolommen, lykas "SELECT * FROM tbl", dy't yn normale modus binne ferspraat oer ferskate rigels). Mei de parameter ".maxrows X" kinne jo it oantal werjûn rigen ek beheine.
  • De CLI soarget foar autofoltôging fan ynfier mei rekken hâldend mei de kontekst (ynfier fan kaaiwurden, tabelnammen, funksjes, kolomnammen en bestânsnammen is foltôge).
  • De CLI hat in query foarútgong yndikator standert ynskeakele.

Boarne: opennet.ru

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster