DuckDB 0.6.0, argitaratutako kontsulta analitikoetarako SQLite aldaera

DuckDB 0.6.0 DBMS bertsioa eskuragarri dago, SQLite-ren propietate hauek konbinatuz, trinkotasuna, liburutegi txertatu baten moduan konektatzeko gaitasuna, datu-basea fitxategi batean gordetzea eta CLI interfaze erosoa, exekutatzeko tresna eta optimizazioekin. Biltegiratutako datuen zati esanguratsu bat hartzen duten kontsulta analitikoak, adibidez, taulen eduki osoa batzen dutenak edo hainbat taula handi batzen dituztenak. Proiektuaren kodea MIT lizentziapean banatzen da. Garapena bertsio esperimentalak eratzeko fasean dago oraindik, biltegiratze formatua oraindik egonkortu gabe dagoelako eta bertsio batetik bestera aldatzen baita.

DuckDB-k SQL dialekto aurreratu bat eskaintzen du, eta oso galdera konplexuak eta denbora asko behar dituztenak kudeatzeko gaitasun gehigarriak biltzen ditu. Mota konplexuen erabilera (matrizeak, egiturak, batasunak) eta korrelaziozko azpikontsulta arbitrarioak eta habiaratuak exekutatzeko gaitasuna onartzen dira. Hainbat kontsulta aldi berean exekutatzen ditu, CSV eta Parquet fitxategietatik zuzenean kontsultak exekutatzen. Posible da PostgreSQL DBMStik inportatzea.

SQLite-ko shell-kodeaz gain, proiektuak PostgreSQL-ren analizatzaile bat erabiltzen du beste liburutegi batean, MonetDB-ko Date Math osagaia, leiho-funtzioen inplementazio propioa (Segment Tree Aggregation algoritmoan oinarrituta), adierazpen erregular prozesadorea. RE2 liburutegia, bere kontsulta-optimizatzailea eta MVCC kontrol-mekanismoa zereginen aldibereko exekuzioa (Multi-Version Concurrency Control), baita Hyper-Pipelining Query Execution algoritmoan oinarritutako kontsulta exekutatzeko motor bektorializatu bat ere, balio multzo handiak ahalbidetzen dituena. eragiketa batean aldi berean prozesatu behar da.

Argitalpen berriaren aldaketen artean:

  • Biltegiratze formatua hobetzeko lanek jarraitu zuten. Disko idazteko modu baikorra ezarri da, zeinean datu-multzo handi bat transakzio batean kargatzean, datuak konprimitu eta datu-baseko fitxategi batean idazten dira streaming moduan, transakzioa COMMIT komandoarekin konfirmatu arte itxaron gabe. . COMMIT komando bat jasotzen denean, datuak dagoeneko diskoan idazten dira, eta ROLLBACK bat exekutatzen denean, baztertu egiten da. Aurretik, datuak hasiera batean guztiz gordetzen ziren memorian, eta konprometitzean, diskoan gordetzen ziren.
  • Datuak taula bereizietan paraleloan kargatzeko laguntza gehitu da, eta horrek karga-abiadura nabarmen handitzeko aukera ematen du nukleo anitzeko sistemetan. Adibidez, aurreko bertsioan, 150 nukleoko CPU batean 10 milioi errenkada dituen datu-base bat kargatzeak 91 segundo behar zituen, baina bertsio berrian eragiketa hau 17 segundotan burutzen da. Bi kargatzeko modu paralelo daude: erregistroen ordena gordeta eta ordena gorde gabe.
  • Datuen konpresiorako, FSST (Fast Static Symbol Table) algoritmoa erabiltzen da, eta horri esker, kateen barruan datuak biltzeko aukera ematen du bat-etortze arrunten hiztegi arrunta erabiliz. Algoritmo berriaren erabilerari esker, probaren datu-basearen tamaina 761MB-tik 251MBra murriztea ahalbidetu zuen.
  • Chimp eta Patas algoritmoak proposatu dira koma mugikorreko zenbakiak (DOUBLE eta FLOAT) konprimitzeko. Aurreko Gorillas algoritmoarekin alderatuta, Chimp-ek konpresio maila handiagoak eta deskonpresio azkarragoa eskaintzen ditu. Patas algoritmoa Chimpren atzetik geratzen da konpresio-erlazioan, baina askoz azkarragoa da deskonpresio-abiaduran, eta hori ez da ia desberdina konprimitu gabeko datuak irakurtzen.
  • CSV fitxategietako datuak korronte paralelo anitzetan kargatzeko gaitasun esperimental bat gehitu da (SET experimental_parallel_csv=true), eta horrek CSV fitxategi handiak kargatzeko behar duen denbora nabarmen murrizten du. Adibidez, aukera hau gaituta zegoenean, 720 MBko CSV fitxategi baten deskarga-denbora 3.5etik 0.6 segundora murriztu zen.
  • Indizeak sortzeko eta kudeatzeko eragiketak paraleloki gauzatzeko aukera ezarri da. Adibidez, CREATE INDEX eragiketa 16 milioi erregistro dituen zutabe batean 5.92tik 1.38 segundora murriztu zen.
  • "COUNT(DISTINCT col)" esapidea duten kontsultetan agregazio-eragiketen paralelizazioa gaitu da.
  • SQL-k UNION motarako euskarria gehitu du, mota asko elementu batera lotzea ahalbidetzen duena (adibidez, "UNION(num INT, error VARCHAR))").
  • SQL-k "HAUTATU" hitzarekin hasten diren kontsultak sortzeko gaitasuna ematen du. Kasu honetan, kontsulta "SELECT *"-rekin hasten dela suposatzen da.
  • SQL-k COLUMNS adierazpenaren euskarria gehitu du, eta horri esker, hainbat zutabetan eragiketa bat egin dezakezu adierazpena bikoiztu gabe. Esate baterako, "HAUTETU MIN (ZUTABAK (*))) obs-etik;" obs taulako zutabe bakoitzerako MIN funtzioa exekutatuko du, eta "HAUTEZI ZUTABEAK('val[0-9]+') obs-etik;" "val" eta zenbakiz osatutako izena duten zutabeetarako.
  • Zerrendetako eragiketetarako euskarria gehitu da, adibidez, "HAUSTU [x + 1 x for [1, 2, 3]] AS l;".
  • Memoria-kontsumoa optimizatu da. Lehenespenez, Linux plataformak jemalloc liburutegia erabiltzen du memoria kudeatzeko. Memoria mugatuta dagoenean hash-a batzeko eragiketen errendimendua nabarmen hobetu da.
  • Komando-lerroko interfazeari ".mode duckbox" irteera modua gehitu da, zeinak erdiko zutabeak baztertzen dituen terminal-leihoaren zabalera kontuan hartuta (zutabe ugari dituzten kontsulten emaitzak bisualki azkar ebaluatzeko egokia da, hala nola "HAUTETU * FROM tbl”, modu normalean hainbat lerrotan banatuta daudenak). ".maxrows X" parametroa erabiliz, gainera, bistaratzen diren errenkada kopurua muga dezakezu.
  • CLI-k sarrerak automatikoki osatzea eskaintzen du testuingurua kontuan hartuta (gako-hitzak, taulen izenak, funtzioak, zutabe-izenak eta fitxategi-izenak sartzen dira).
  • CLIak lehenespenez gaituta dauka kontsultaren aurrerapenaren adierazlea.

Iturria: opennet.ru

Gehitu iruzkin berria