Versioni e SGBD DuckDB 0.6.0 është e disponueshme, duke kombinuar veçori të tillë si kompaktësia dhe mundësia e lidhjes si një bibliotekë e integruar, ruajtja e DB në një skedar të vetëm dhe një ndërfaqe CLI e lehtë për t'u përdorur, me mjete dhe optimizime për ekzekutimin e pyetjeve analitike që kapin një pjesë të konsiderueshme të të dhënave të ruajtura, për shembull, duke kryer agregimin e të gjithë përmbajtjes së tabelave ose duke bashkuar disa tabela të mëdha. Kodi i projektit shpërndahet nën licencën MIT. Zhvillimi është ende në fazën e krijimit të lëshimeve eksperimentale, pasi formati i ruajtjes ende nuk është stabilizuar dhe ndryshon nga versioni në version.
DuckDB ofron një dialekt të avancuar të gjuhës SQL, duke përfshirë mundësi shtesë për përpunimin e pyetjeve shumë të komplikuara dhe me kohëzgjatje të gjatë. Përdorimi i llojeve të ndërlikuara (array, struktura, bashkime) mbështetet dhe është e mundur të kryhen nënpyetje korrelative të rastësishme dhe të thella. Mbështetet ekzekutimi i disa pyetjeve njëherësh, ekzekutimi i pyetjeve direkt nga skedarë në formatin CSV dhe Parquet. Ka mundësi importimi nga SGBD PostgreSQL.
Përveç kodit bazë nga SQLite, projekti përdor edhe një parser të veçuar në një bibliotekë më vete nga PostgreSQL, komponentin Date Math nga MonetDB, implementimin e vet të funksioneve të dritares (mbi bazën e algoritmit Segment Tree Aggregation), një përpunues të shprehjeve të rregullta të ndërtuar mbi bibliotekën RE2, optimizuesin e vet të kërkesave, mekanizmin MVCC për menaxhimin e ekzekutimit të njëkohshëm të detyrave (Multi-Version Concurrency Control), si dhe një engine të vektorizuar për ekzekutimin e kërkesave, i bazuar në algoritmin Hyper-Pipelining Query Execution, që mundëson përpunimin e menjëhershëm të grupeve të mëdha të vlerave brenda një operacioni të vetëm.
Mes ndryshimeve në versionin e ri:
- Puna pĂ«r pĂ«rmirĂ«simin e formatit tĂ« ruajtjes Ă«shtĂ« vazhduar. ĂshtĂ« realizuar njĂ« modalitet optimist pĂ«r shkrimin nĂ« disk, ku, gjatĂ« ngarkimit tĂ« njĂ« grupe tĂ« madh tĂ« dhĂ«nash nĂ« njĂ« transaksion, tĂ« dhĂ«nat comprimohet dhe shkruhen nĂ« rrjedhĂ« nĂ« skedarin me DB-nĂ«, pa pritur pĂ«r pĂ«rfundimin e konfirmimit tĂ« transaksionit nga komandĂ«s COMMIT. GjatĂ« dhĂ«nies sĂ« komandĂ«s COMMIT, tĂ« dhĂ«nat do tĂ« jenĂ« tashmĂ« tĂ« shkruara nĂ« disk, dhe nĂ« rastin e ROLLBACK, ato do tĂ« hidhen. MĂ« parĂ«, tĂ« dhĂ«nat ruheshin fillimisht plotĂ«sisht nĂ« memorie dhe nĂ« momentin e komitit ruhej nĂ« disk.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r ngarkimin paralel tĂ« tĂ« dhĂ«nave nĂ« tabela tĂ« veçanta, duke lejuar rritjen e ndjeshme tĂ« shpejtĂ«sisĂ« sĂ« ngarkimit nĂ« sisteme me shumĂ« bĂ«rthama. PĂ«r shembull, nĂ« lĂ«shimin e kaluar, ngarkohet DB me 150 milion rreshta nĂ« njĂ« CPU me 10 bĂ«rthama nĂ« 91 sekonda, ndĂ«rsa nĂ« versionin e ri kjo operacion realizohet pĂ«r 17 sekonda. JanĂ« parashikuar dy modalitete tĂ« ngarkimit paralel - me ruajtjen e rendit tĂ« regjistrimeve dhe pa ruajtjen e rendit.
- Për kompresimin e të dhënave është përdorur algoritmi FSST (Fast Static Symbol Table), i cili lejon paketimin e të dhënave brenda vargjeve, duke përdorur një fjalor të përbashkët për përputhjet tipike. Përdorimi i algoritmit të ri ka bërë të mundur zvogëlimin e madhësisë së bazës së të dhënave testuese nga 761MB në 251MB.
- Për kompresimin e numrave me presje lundruese (DOUBLE dhe FLOAT) janë propozuar algoritmet Chimp dhe Patas. Krahasuar me algoritmin e përdorur më parë Gorillas, Chimp ofron një nivel më të lartë kompresimi dhe një shpejtësi më të shpejtë të dekompresimit. Algoritmi Patas është më i ngadalshëm sa i përket shkallës së kompresimit në krahasim me Chimp, por është ndjeshëm më i shpejtë në shpejtësinë e dekompresimit, e cila pothuajse nuk ndryshon nga leximi i të dhënave të pamodifikuara.
- ĂshtĂ« shtuar njĂ« mundĂ«si eksperimentale pĂ«r ngarkimin e tĂ« dhĂ«nave nga skedarĂ«t CSV nĂ« disa rrjedha paralel (SET experimental_parallel_csv=true), e cila zvogĂ«lon ndjeshĂ«m kohĂ«n e ngarkimit tĂ« skedarĂ«ve CSV tĂ« mĂ«dhenj. PĂ«r shembull, kur aktivizohet opsioni, koha e ngarkimit tĂ« skedarit CSV me madhĂ«si 720 MB Ă«shtĂ« zvogĂ«luar nga 3.5 nĂ« 0.6 sekonda.
- ĂshtĂ« realizuar mundĂ«sia e ekzekutimit paralel tĂ« operacioneve tĂ« krijimit dhe menaxhimit tĂ« indekseve. PĂ«r shembull, ekzekutimi i operacionit CREATE INDEX pĂ«r njĂ« kolonĂ« me 16 milion regjistrime Ă«shtĂ« zvogĂ«luar nga 5.92 nĂ« 1.38 sekonda.
- ĂshtĂ« siguruar paralelizimi i operacioneve tĂ« agregimit nĂ« kĂ«rkesat qĂ« pĂ«rmbajnĂ« shprehjen "COUNT(DISTINCT col)".
- Në SQL është shtuar mbështetje për llojin UNION, i cili lejon lidhjen e një elementi me disa lloje (për shembull, "UNION(num INT, error VARCHAR)").
- Në SQL është ofruar mundësia për të formuar kërkesa që fillojnë me fjalën "FROM" në vend të "SELECT". Në këtë rast konsiderohet se kërkesa fillon me "SELECT *".
- NĂ« SQL Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r shprehjen "COLUMNS", e cila lejon kryerjen e operacionit mbi disa kolona pa pĂ«rsĂ«ritjen e shprehjes. PĂ«r shembull, "SELECT MIN(COLUMNS(*)) from obs;" do tĂ« realizojĂ« funksionin MIN pĂ«r çdo kolonĂ« nĂ« tabelĂ«n obs, ndĂ«rsa "SELECT COLUMNS(âval[0-9]+â) from obs;" pĂ«r kolonat me emra qĂ« pĂ«rbĂ«hen nga "val" dhe numra.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r operacionet mbi lista, pĂ«r shembull, "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
- ĂshtĂ« bĂ«rĂ« optimizimi i konsumit tĂ« memories. Si parazgjedhje nĂ« platformĂ«n Linux pĂ«r menaxhimin e memories Ă«shtĂ« pĂ«rdorur libri jemalloc. JanĂ« pĂ«rmirĂ«suar ndjeshĂ«m performancat e operacioneve tĂ« bashkimit tĂ« hash-eve kur Ă«shtĂ« kufizuar madhĂ«sia e memories.
- Në ndërfaqen e komandës është shtuar një mod i daljes «.mode duckbox», i cili përjashton kolonat e mesme në përputhje me gjerësinë e dritares së terminalit (i përshtatshëm për një vlerësim të shpejtë të rezultateve të pyetjeve me numër të madh kolonash, siç është «SELECT * FROM tbl», që në modin e zakonshëm shpërndahen në disa rreshta). Me parametrin «.maxrows X» gjithashtu mund të kufizoni numrin e rreshtave të daljes.
- Në CLI është siguruar autocompletimi i hyrjes duke marrë parasysh kontekstin (përfundon hyrjen e fjalëve kyçe, emrave të tabelave, funksioneve, emrave të kolonave dhe emrave të skedarëve).
- Në CLI, njëkohësisht është përfshirë si parazgjedhje shfaqja e indikatorit të përparimit të ekzekutimit të pyetjes.
Burimi: opennet.ru
