DuckDB 0.6.0 Published, SQLite Option para sa Analytical Query

Ang paglabas ng DuckDB 0.6.0 DBMS ay magagamit, na pinagsasama ang mga katangian ng SQLite bilang pagiging compactness, ang kakayahang kumonekta sa anyo ng isang naka-embed na library, pag-iimbak ng database sa isang file at isang maginhawang interface ng CLI, na may mga tool at pag-optimize para sa pagpapatupad. mga analytical na query na sumasaklaw sa isang mahalagang bahagi ng naka-imbak na data, halimbawa na pinagsama-sama ang buong nilalaman ng mga talahanayan o pinagsama ang ilang malalaking talahanayan. Ang code ng proyekto ay ipinamahagi sa ilalim ng lisensya ng MIT. Ang pag-unlad ay nasa yugto pa rin ng pagbuo ng mga pang-eksperimentong paglabas, dahil ang format ng imbakan ay hindi pa nagpapatatag at nagbabago mula sa bersyon patungo sa bersyon.

Nagbibigay ang DuckDB ng advanced na SQL dialect na may kasamang mga karagdagang kakayahan para sa paghawak ng napakakumplikado at nakakaubos ng oras na mga query. Sinusuportahan ang paggamit ng mga kumplikadong uri (mga array, istruktura, unyon) at ang kakayahang magsagawa ng arbitrary at nested correlated na mga subquery. Sinusuportahan nito ang pagpapatakbo ng maraming query nang sabay-sabay, direktang pagpapatakbo ng mga query mula sa CSV at Parquet file. Posibleng mag-import mula sa PostgreSQL DBMS.

Bilang karagdagan sa shell code mula sa SQLite, ang proyekto ay gumagamit ng parser mula sa PostgreSQL sa isang hiwalay na library, ang Date Math component mula sa MonetDB, ang sarili nitong pagpapatupad ng mga function ng window (batay sa Segment Tree Aggregation algorithm), isang regular na expression processor batay sa ang RE2 library, sarili nitong query optimizer, at MVCC control mechanism na sabay-sabay na pagpapatupad ng mga gawain (Multi-Version Concurrency Control), pati na rin ang vectorized na query execution engine batay sa Hyper-Pipelining Query Execution algorithm, na nagbibigay-daan sa malalaking hanay ng mga value upang maiproseso nang sabay-sabay sa isang operasyon.

Kabilang sa mga pagbabago sa bagong release:

  • Nagpatuloy ang trabaho upang mapabuti ang format ng storage. Ang isang optimistic disk writing mode ay ipinatupad, kung saan kapag naglo-load ng isang malaking set ng data sa isang transaksyon, ang data ay na-compress at nakasulat sa isang file mula sa database sa streaming mode, nang hindi naghihintay na makumpirma ang transaksyon gamit ang COMMIT command . Kapag ang isang COMMIT command ay natanggap, ang data ay nakasulat na sa disk, at kapag ang isang ROLLBACK ay naisakatuparan, ito ay itatapon. Noong nakaraan, ang data ay una nang ganap na nai-save sa memorya, at kapag ginawa, ito ay nai-save sa disk.
  • Nagdagdag ng suporta para sa parallel na pag-load ng data sa magkakahiwalay na mga talahanayan, na nagbibigay-daan sa iyo upang makabuluhang taasan ang bilis ng paglo-load sa mga multi-core system. Halimbawa, sa nakaraang release, ang pag-load ng database na may 150 milyong mga hilera sa isang 10-core na CPU ay tumagal ng 91 segundo, ngunit sa bagong bersyon ang operasyong ito ay nakumpleto sa loob ng 17 segundo. Mayroong dalawang magkatulad na mode ng paglo-load - na may pag-iingat ng pagkakasunud-sunod ng mga talaan at walang pag-iingat ng kaayusan.
  • Para sa compression ng data, ginagamit ang algorithm ng FSST (Fast Static Symbol Table), na nagbibigay-daan sa iyong mag-pack ng data sa loob ng mga string gamit ang isang karaniwang diksyunaryo ng mga tipikal na tugma. Ang paggamit ng bagong algorithm ay naging posible upang bawasan ang laki ng database ng pagsubok mula 761MB hanggang 251MB.
  • Ang mga algorithm ng Chimp at Patas ay iminungkahi upang i-compress ang mga numero ng floating point (DOUBLE at FLOAT). Kung ikukumpara sa dating ginamit na Gorillas algorithm, nagbibigay ang Chimp ng mas mataas na antas ng compression at mas mabilis na decompression. Ang algorithm ng Patas ay nahuhuli sa Chimp sa compression ratio, ngunit mas mabilis sa bilis ng decompression, na halos walang pinagkaiba sa pagbabasa ng hindi naka-compress na data.
  • Nagdagdag ng kakayahang pang-eksperimentong mag-load ng data mula sa mga CSV file sa maraming parallel stream (SET experimental_parallel_csv=true), na makabuluhang binabawasan ang oras na kinakailangan upang mag-load ng malalaking CSV file. Halimbawa, kapag pinagana ang opsyong ito, ang oras ng pag-download para sa 720 MB CSV file ay nabawasan mula 3.5 hanggang 0.6 segundo.
  • Ang posibilidad ng parallel execution ng index creation at management operations ay ipinatupad. Halimbawa, ang operasyon ng CREATE INDEX sa isang column na may 16 milyong mga tala ay nabawasan mula 5.92 hanggang 1.38 segundo.
  • Pinagana ang parallelization ng mga pagpapatakbo ng aggregation sa mga query na naglalaman ng expression na "COUNT(DISTINCT col)".
  • Nagdagdag ang SQL ng suporta para sa uri ng UNION, na nagpapahintulot sa maraming uri na maiugnay sa isang elemento (halimbawa, "UNION(num INT, error VARCHAR))").
  • Nagbibigay ang SQL ng kakayahang bumuo ng mga query na nagsisimula sa salitang "FROM" sa halip na "SELECT". Sa kasong ito, ipinapalagay na ang query ay nagsisimula sa "SELECT *".
  • Nagdagdag ang SQL ng suporta para sa expression ng COLUMNS, na nagbibigay-daan sa iyong magsagawa ng operasyon sa maraming column nang hindi kino-duplicate ang expression. Halimbawa, β€œPUMILI NG MIN(COLUMNS(*)) mula sa obs;” ay magiging dahilan upang maisakatuparan ang MIN function para sa bawat column sa obs table, at "SELECT COLUMNS('val[0-9]+') from obs;" para sa mga column na may pangalan na binubuo ng "val" at mga numero.
  • Nagdagdag ng suporta para sa mga pagpapatakbo sa mga listahan, halimbawa, β€œPUMILI [x + 1 para sa x sa [1, 2, 3]] AS l;”.
  • Ang pagkonsumo ng memorya ay na-optimize. Bilang default, ginagamit ng platform ng Linux ang library ng jemalloc para sa pamamahala ng memorya. Makabuluhang pinabuting pagganap ng mga operasyon ng pagsasama ng hash kapag limitado ang memorya.
  • Idinagdag ang ".mode duckbox" na output mode sa interface ng command line, na nagtatapon sa mga gitnang column na isinasaalang-alang ang lapad ng terminal window (angkop para sa mabilis na biswal na pagtatasa ng mga resulta ng mga query na may malaking bilang ng mga column, tulad ng "SELECT * MULA sa tbl", na sa normal na mode ay kumakalat sa maraming linya). Gamit ang parameter na ".maxrows X", maaari mo ring limitahan ang bilang ng mga row na ipinapakita.
  • Nagbibigay ang CLI ng autocompletion ng input na isinasaalang-alang ang konteksto (nakumpleto ang input ng mga keyword, pangalan ng talahanayan, function, pangalan ng column at file name).
  • Ang CLI ay may tagapagpahiwatig ng pag-unlad ng query na pinagana bilang default.

Pinagmulan: opennet.ru

Magdagdag ng komento