DuckDB 0.6.0, SQLite-változat analitikai lekérdezésekhez közzétéve

Elérhető a DuckDB 0.6.0 DBMS kiadása, amely az SQLite olyan tulajdonságait egyesíti, mint a tömörség, a beágyazott könyvtár formájában történő csatlakozás lehetősége, az adatbázis egyetlen fájlban való tárolása és egy kényelmes CLI felület, a végrehajtáshoz szükséges eszközökkel és optimalizálással a tárolt adatok jelentős részét lefedő elemző lekérdezések, például amelyek a táblák teljes tartalmát összesítik, vagy több nagy táblát egyesítenek. A projekt kódját az MIT licence alatt terjesztik. A fejlesztés még a kísérleti kiadások kialakításának szakaszában tart, mivel a tárolási formátum még nem stabilizálódott, és verzióról verzióra változik.

A DuckDB egy fejlett SQL dialektust biztosít, amely további lehetőségeket is tartalmaz a nagyon összetett és időigényes lekérdezések kezelésére. Az összetett típusok (tömbök, struktúrák, uniók) használata, valamint tetszőleges és egymásba ágyazott korrelációs részlekérdezések végrehajtása támogatott. Támogatja több lekérdezés egyidejű futtatását, közvetlenül a CSV és Parquet fájlokból. Lehetőség van a PostgreSQL DBMS-ből importálni.

A projekt az SQLite-ből származó shell-kódon kívül egy külön könyvtárban lévő PostgreSQL elemzőt, a MonetDB Date Math komponensét, az ablakfüggvények saját implementációját (a Segment Tree Aggregation algoritmus alapján), egy reguláris kifejezés-processzort használ a MonetDB-ből. a RE2 könyvtár, a saját lekérdezésoptimalizáló és a feladatok egyidejű végrehajtását biztosító MVCC vezérlő mechanizmus (Multi-Version Concurrency Control), valamint a Hyper-Pipelining Query Execution algoritmuson alapuló vektorizált lekérdezés-végrehajtó motor, amely nagy értékkészleteket tesz lehetővé egy műveletben egyszerre kell feldolgozni.

Az új kiadás változásai között:

  • Folytatódott a munka a tárolási formátum javításán. Optimista lemezírási mód került megvalósításra, amelyben nagy adathalmaz egy tranzakcióban történő betöltésekor az adatok tömörítésre kerülnek és streaming módban fájlba íródnak az adatbázisból anélkül, hogy megvárnák a tranzakció COMMIT paranccsal történő megerősítését. . Amikor egy COMMIT parancs érkezik, az adatok már a lemezre vannak írva, és a ROLLBACK végrehajtásakor eldobják. Korábban az adatok kezdetben teljesen a memóriába, majd véglegesítéskor lemezre kerültek.
  • Hozzáadott támogatás az adatok párhuzamos betöltéséhez külön táblákba, ami lehetővé teszi a betöltési sebesség jelentős növelését többmagos rendszereken. Például az előző kiadásban egy 150 millió soros adatbázis betöltése 10 magos CPU-n 91 másodpercig tartott, az új verzióban viszont 17 másodperc alatt fejeződik be ez a művelet. A párhuzamos betöltésnek két módja van - a rekordok sorrendjének megőrzésével és a sorrend megőrzése nélkül.
  • Az adattömörítéshez az FSST (Fast Static Symbol Table) algoritmust használjuk, amely lehetővé teszi az adatok karakterláncokba történő becsomagolását a tipikus egyezések közös szótárával. Az új algoritmus segítségével a tesztadatbázis mérete 761 MB-ról 251 MB-ra csökkenthető.
  • Csimpánz és Patas algoritmusokat javasoltak a lebegőpontos számok tömörítésére (DOUBLE és FLOAT). Az előző Gorillas algoritmushoz képest a Chimp magasabb szintű tömörítést és gyorsabb dekompressziót biztosít. A Patas algoritmus a tömörítési arányban elmarad a Chimp mögött, de a dekompressziós sebességben sokkal gyorsabb, ami szinte semmiben sem különbözik a tömörítetlen adatok kiolvasásától.
  • Kísérleti lehetőség hozzáadva CSV-fájlokból több párhuzamos adatfolyamba (SET experimental_parallel_csv=true), ami jelentősen csökkenti a nagy CSV-fájlok betöltésének idejét. Ha például ezt az opciót engedélyezte, egy 720 MB-os CSV-fájl letöltési ideje 3.5 másodpercről 0.6 másodpercre csökkent.
  • Megvalósult az indexkészítési és -kezelési műveletek párhuzamos végrehajtásának lehetősége. Például a CREATE INDEX művelet egy 16 millió rekordot tartalmazó oszlopon 5.92 másodpercről 1.38 másodpercre csökkent.
  • Engedélyezve az összesítési műveletek párhuzamosítását a „COUNT(DISTINCT col)” kifejezést tartalmazó lekérdezésekben.
  • Az SQL hozzáadta az UNION típus támogatását, amely lehetővé teszi több típus egy elemhez való kötését (például „UNION(num INT, error VARCHAR)”).
  • Az SQL lehetőséget biztosít olyan lekérdezések kialakítására, amelyek a „SELECT” helyett „FROM” szóval kezdődnek. Ebben az esetben azt feltételezzük, hogy a lekérdezés "SELECT *"-vel kezdődik.
  • Az SQL hozzáadta a COLUMNS kifejezés támogatását, amely lehetővé teszi egy művelet végrehajtását több oszlopon a kifejezés megkettőzése nélkül. Például: „SELECT MIN(COLUMNS(*)) from obs;” hatására a MIN függvény végrehajtásra kerül az obs tábla minden oszlopában, és a "SELECT COLUMNS('val[0-9]+') from obs;" "val"-ból és számokból álló névvel rendelkező oszlopokhoz.
  • Támogatás hozzáadva a listákon végzett műveletekhez, például „SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • A memóriafogyasztás optimalizálva lett. Alapértelmezés szerint a Linux platform a jemalloc könyvtárat használja a memóriakezeléshez. Jelentősen javult a hash összevonási műveletek teljesítménye korlátozott memória esetén.
  • A „.mode duckbox” kimeneti mód hozzáadva a parancssori felülethez, amely a terminálablak szélességét figyelembe véve elveti a középső oszlopokat (alkalmas a nagyszámú oszlopot tartalmazó lekérdezések eredményeinek gyors vizuális értékelésére, mint például a „SELECT * FROM tbl”, amelyek normál módban több sorban vannak elosztva). A „.maxrows X” paraméter használatával emellett korlátozhatja a megjelenített sorok számát.
  • A CLI biztosítja a bevitel automatikus kiegészítését a kontextus figyelembevételével (a kulcsszavak, táblanevek, függvények, oszlopnevek és fájlnevek bevitele befejeződött).
  • A CLI alapértelmezés szerint engedélyezve van a lekérdezés folyamatjelzője.

Forrás: opennet.ru

Hozzászólás