DuckDB 0.6.0 Eldonita, SQLite Opcio por Analizaj Demandoj

La liberigo de DuckDB 0.6.0 DBMS disponeblas, kombinante tiajn ecojn de SQLite kiel kompaktecon, la kapablon konekti en la formo de enigita biblioteko, stokante la datumbazon en unu dosiero kaj oportuna CLI-interfaco, kun iloj kaj optimumigoj por ekzekuti. analizaj demandoj kovrantaj signifan parton de la stokitaj datenoj, ekzemple kiuj agregas la tutan enhavon de tabeloj aŭ kunfandas plurajn grandajn tabelojn. La projektkodo estas distribuita sub la MIT-licenco. La evoluo ankoraŭ estas en la stadio de formado de eksperimentaj eldonoj, ĉar la stokadformato ankoraŭ ne estis stabiligita kaj ŝanĝiĝas de versio al versio.

DuckDB provizas altnivelan dialekton de SQL, kiu inkluzivas kromajn kapablojn por trakti tre kompleksajn kaj tempopostumajn demandojn. La uzo de kompleksaj tipoj (aroj, strukturoj, sindikatoj) kaj la kapablo efektivigi arbitrajn kaj nestitajn korelaciajn subdemandojn estas subtenataj. Ĝi subtenas ruli plurajn demandojn samtempe, ruli demandojn rekte de CSV kaj Parquet dosieroj. Eblas importi el la PostgreSQL-DBMS.

Aldone al la ŝelkodo de SQLite, la projekto uzas analizilon de PostgreSQL en aparta biblioteko, la Date Math-komponenton de MonetDB, sian propran efektivigon de fenestraj funkcioj (surbaze de la algoritmo de Segment Tree Aggregation), regula esprimprocesoro bazita sur la RE2-biblioteko, sia propra konsultoptimumiganto, kaj MVCC-kontrolmekanismo samtempa plenumo de taskoj (Multi-Version Concurrency Control), same kiel vektorigita demanda ekzekutmotoro bazita sur la Hyper-Pipelining Query Execution-algoritmo, kiu permesas grandajn arojn de valoroj esti procesita tuj en unu operacio.

Inter la ŝanĝoj en la nova eldono:

  • Laboro daŭre plibonigis la stokadformaton. Optimisisma diskreĝimo estis efektivigita, en kiu ŝarĝante grandan aron da datumoj en unu transakcio, la datumoj estas kunpremitaj kaj skribitaj al dosiero de la datumbazo en fluanta reĝimo, sen atendi ke la transakcio estu konfirmita per la COMMIT-komando. . Kiam COMMIT-komando estas ricevita, la datumoj jam estas skribitaj al disko, kaj kiam ROLLBACK estas efektivigita, ĝi estas forĵetita. Antaŭe, la datumoj komence estis tute konservitaj en memoron, kaj kiam ili estis faritaj, ĝi estis konservita en disko.
  • Aldonita subteno por paralela ŝarĝo de datumoj en apartajn tabelojn, kio ebligas al vi signife pliigi ŝarĝrapidecon en plurkernaj sistemoj. Ekzemple, en la antaŭa eldono, ŝarĝi datumbazon kun 150 milionoj da vicoj sur 10-kerna CPU daŭris 91 sekundojn, sed en la nova versio ĉi tiu operacio estas kompletigita en 17 sekundoj. Estas du paralelaj ŝarĝreĝimoj - kun konservado de la ordo de rekordoj kaj sen konservado de ordo.
  • Por datumkunpremado, la algoritmo FSST (Fast Static Symbol Table) estas uzata, kiu permesas vin paki datumojn ene de ŝnuroj uzante komunan vortaron de tipaj kongruoj. La uzo de la nova algoritmo ebligis redukti la grandecon de la testa datumbazo de 761MB ĝis 251MB.
  • Ĉimpanzo- kaj Patas-algoritmoj estis proponitaj por kunpremi glitkomajn nombrojn (DOUBLE kaj FLOAT). Kompare kun la antaŭa Gorillas-algoritmo, Ĉimpanzo disponigas pli altajn nivelojn de kunpremo kaj pli rapidan malkunpremadon. La Patas-algoritmo postrestas malantaŭ Chimp en kunprema proporcio, sed estas multe pli rapida en malkunpremrapideco, kiu preskaŭ ne diferencas de legado de nekunpremitaj datumoj.
  • Aldonis eksperimentan kapablon ŝargi datumojn de CSV-dosieroj en plurajn paralelajn fluojn (SET experimental_parallel_csv=true), kiu signife reduktas la tempon necesan por ŝargi grandajn CSV-dosierojn. Ekzemple, kiam ĉi tiu opcio estis ebligita, la elŝuta tempo por 720 MB CSV-dosiero estis reduktita de 3.5 ĝis 0.6 sekundoj.
  • La ebleco de paralela ekzekuto de indeksaj kreado kaj administradoperacioj estis efektivigita. Ekzemple, la operacio CREATE INDEX sur kolumno kun 16 milionoj da registroj estis reduktita de 5.92 al 1.38 sekundoj.
  • Ebligita paraleligo de agregaciaj operacioj en demandoj enhavantaj la esprimon "COUNT(DISTINCT col)".
  • SQL aldonis subtenon por la UNION-tipo, kiu permesas plurajn tipojn esti ligitaj al unu elemento (ekzemple, "UNION(num INT, eraro VARCHAR))").
  • SQL disponigas la kapablon formi demandojn, kiuj komenciĝas per la vorto "FROM" anstataŭ "SELECT". En ĉi tiu kazo, oni supozas, ke la demando komenciĝas per "SELECT *".
  • SQL aldonis subtenon por la esprimo COLUMNS, kiu ebligas al vi fari operacion sur pluraj kolumnoj sen duobligi la esprimon. Ekzemple, "ELEKTU MIN(KOLONONS (*))) el obs;" igos la MIN-funkcion esti ekzekutita por ĉiu kolumno en la obs-tabelo, kaj "SELECT COLUMNS('val[0-9]+') from obs;" por kolumnoj kun nomo konsistanta el "val" kaj nombroj.
  • Aldonita subteno por operacioj en listoj, ekzemple, "SELECT [x + 1 por x en [1, 2, 3]] AS l;".
  • Memorkonsumo estis optimumigita. Defaŭlte, la Linukso-platformo uzas la jemalloc-bibliotekon por memoradministrado. Signife plibonigita agado de hash-kunfandaj operacioj kiam memoro estas limigita.
  • Aldonita ".mode duckbox" eligo-reĝimo al la komandlinia interfaco, kiu forĵetas la mezajn kolumnojn konsiderante la larĝon de la fina fenestro (taŭga por rapide vide taksi la rezultojn de demandoj kun granda nombro da kolumnoj, kiel "SELECT * DE tbl”, kiuj en normala reĝimo estas disvastigitaj sur pluraj linioj). Uzante la parametron ".maxrows X", vi povas aldone limigi la nombron de montrataj vicoj.
  • La CLI disponigas aŭtomatan kompletigon de enigo konsiderante la kuntekston (enigo de ŝlosilvortoj, tabelnomoj, funkcioj, kolonnomoj kaj dosiernomoj estas kompletigita).
  • La CLI havas demandan progresindikilon ebligita defaŭlte.

fonto: opennet.ru

Aldoni komenton