Հրատարակված է DuckDB 0.6.0, SQLite տարբերակ վերլուծական հարցումների համար

Հասանելի է DuckDB 0.6.0 DBMS-ի թողարկումը, որը համատեղում է SQLite-ի այնպիսի հատկություններ, ինչպիսիք են կոմպակտությունը, ներկառուցված գրադարանի ձևով միանալու հնարավորությունը, տվյալների բազան մեկ ֆայլում պահելը և հարմար CLI ինտերֆեյսը, գործիքներն ու օպտիմիզացումները կատարման համար: վերլուծական հարցումներ, որոնք ընդգրկում են պահված տվյալների զգալի մասը, օրինակ, որոնք համախմբում են աղյուսակների ամբողջ բովանդակությունը կամ միացնում են մի քանի մեծ աղյուսակներ: Ծրագրի կոդը բաշխվում է MIT լիցենզիայի ներքո: Մշակումը դեռ փորձնական թողարկումների ձևավորման փուլում է, քանի որ պահպանման ձևաչափը դեռ կայունացված չէ և փոխվում է տարբերակից տարբերակ:

DuckDB-ն ապահովում է առաջադեմ SQL բարբառ, որը ներառում է լրացուցիչ հնարավորություններ՝ շատ բարդ և ժամանակատար հարցումները մշակելու համար: Աջակցվում է բարդ տեսակների (զանգվածներ, կառուցվածքներ, միավորումներ) օգտագործումը և կամայական և ներդիր հարաբերակցող ենթհարցումներ կատարելու հնարավորությունը: Այն աջակցում է միաժամանակ մի քանի հարցումների գործարկմանը, հարցումների առաջադրումը անմիջապես CSV և Parquet ֆայլերից: Հնարավոր է ներմուծել PostgreSQL DBMS-ից:

Ի լրումն SQLite-ի կեղևի ծածկագրի, նախագիծը օգտագործում է PostgreSQL-ի վերլուծիչ առանձին գրադարանում, Date Math բաղադրիչը MonetDB-ից, պատուհանի գործառույթների իր սեփական իրականացումը (հիմնված Segment Tree Aggregation ալգորիթմի վրա), սովորական արտահայտությունների պրոցեսոր՝ հիմնված RE2 գրադարանը, սեփական հարցումների օպտիմիզատորը և առաջադրանքների միաժամանակյա կատարման MVCC կառավարման մեխանիզմը (Multi-Version Concurrency Control), ինչպես նաև վեկտորացված հարցումների կատարման շարժիչ՝ հիմնված Hyper-Pipelining Query Execution ալգորիթմի վրա, որը թույլ է տալիս արժեքների մեծ շարք պետք է մշակվի միանգամից մեկ գործողության ընթացքում:

Նոր թողարկման փոփոխություններից.

  • Աշխատանքները շարունակվեցին պահպանման ձևաչափի բարելավման ուղղությամբ: Իրականացվել է սկավառակի գրման լավատեսական ռեժիմ, որի դեպքում մեկ գործարքում տվյալների մեծ հավաքածու բեռնելիս տվյալները սեղմվում և գրվում են տվյալների բազայից հոսքային ռեժիմով ֆայլում՝ չսպասելով, որ գործարքը հաստատվի COMMIT հրամանով: . Երբ ստացվում է COMMIT հրամանը, տվյալներն արդեն գրված են սկավառակի վրա, իսկ երբ կատարվում է ROLLBACK, այն անտեսվում է: Նախկինում տվյալներն ի սկզբանե ամբողջությամբ պահվում էին հիշողության մեջ, իսկ երբ կատարում էին, պահվում էին սկավառակի վրա:
  • Ավելացվել է առանձին աղյուսակներում տվյալների զուգահեռ բեռնման աջակցություն, ինչը թույլ է տալիս զգալիորեն մեծացնել բեռնման արագությունը բազմամիջուկ համակարգերում: Օրինակ՝ նախորդ թողարկումում 150 միջուկային պրոցեսորի վրա 10 միլիոն տողով տվյալների բազա բեռնելը տևում էր 91 վայրկյան, սակայն նոր տարբերակում այս գործողությունն ավարտվում է 17 վայրկյանում։ Կան երկու զուգահեռ բեռնման ռեժիմներ՝ գրառումների կարգի պահպանմամբ և առանց կարգի պահպանման։
  • Տվյալների սեղմման համար օգտագործվում է FSST (Fast Static Symbol Table) ալգորիթմը, որը թույլ է տալիս փաթեթավորել տվյալները տողերի ներսում՝ օգտագործելով բնորոշ համընկնումների ընդհանուր բառարան: Նոր ալգորիթմի օգտագործումը հնարավորություն է տվել նվազեցնել թեստային տվյալների բազայի չափը 761 ՄԲ-ից մինչև 251 ՄԲ:
  • Լողացող կետով թվերը (DOUBLE և FLOAT) սեղմելու համար առաջարկվել են շիմպ և Patas ալգորիթմները: Նախկինում օգտագործված Gorillas ալգորիթմի համեմատ՝ Chimp-ն ապահովում է սեղմման ավելի բարձր մակարդակ և ավելի արագ դեկոպրեսիա: Patas ալգորիթմը զիջում է Chimp-ին սեղմման հարաբերակցությամբ, բայց շատ ավելի արագ է դեկոպրեսիայի արագությամբ, որը գրեթե չի տարբերվում չսեղմված տվյալների ընթերցումից:
  • Ավելացվեց CSV ֆայլերից տվյալները մի քանի զուգահեռ հոսքերի մեջ բեռնելու փորձարարական հնարավորություն (SET experimental_parallel_csv=true), ինչը զգալիորեն նվազեցնում է մեծ CSV ֆայլերը բեռնելու ժամանակը: Օրինակ, երբ այս տարբերակը միացված էր, 720 ՄԲ CSV ֆայլի ներբեռնման ժամանակը կրճատվեց 3.5-ից մինչև 0.6 վայրկյան:
  • Իրականացվել է ինդեքսների ստեղծման և կառավարման գործառնությունների զուգահեռ կատարման հնարավորությունը։ Օրինակ, CREATE INDEX գործողությունը 16 միլիոն գրառում ունեցող սյունակի վրա 5.92-ից կրճատվել է 1.38 վայրկյանի:
  • «COUNT(DISTINCT col)» արտահայտություն պարունակող հարցումներում ակտիվացրել է ագրեգացիոն գործողությունների զուգահեռացումը:
  • SQL-ն ավելացրել է աջակցություն UNION տեսակի համար, որը թույլ է տալիս մի քանի տեսակներ կապել մեկ տարրի հետ (օրինակ՝ «UNION(num INT, սխալ VARCHAR))»):
  • SQL-ն ապահովում է հարցումներ ձևավորելու հնարավորություն, որոնք սկսվում են «FROM» բառով՝ «SELECT»-ի փոխարեն: Այս դեպքում ենթադրվում է, որ հարցումը սկսվում է «SELECT *»-ով:
  • SQL-ն ավելացրել է աջակցություն COLUMNS արտահայտության համար, որը թույլ է տալիս կատարել գործողություն մի քանի սյունակների վրա՝ առանց արտահայտությունը կրկնօրինակելու: Օրինակ՝ «SELECT MIN(COLUMNS(*)) obs-ից;» կհանգեցնի, որ MIN ֆունկցիան կկատարվի obs աղյուսակի յուրաքանչյուր սյունակի համար, և «SELECT COLUMNS('val[0-9]+') obs-ից; «val»-ից և թվերից կազմված անվանումով սյունակների համար:
  • Ավելացվեց ցուցակներում գործողությունների աջակցություն, օրինակ՝ «SELECT [x + 1 for x-ի համար [1, 2, 3]] AS l;»:
  • Հիշողության սպառումը օպտիմիզացվել է: Լռելյայնորեն, Linux հարթակը օգտագործում է jemalloc գրադարանը հիշողության կառավարման համար: Զգալիորեն բարելավվել է հեշ միաձուլման գործողությունների կատարումը, երբ հիշողությունը սահմանափակ է:
  • Հրամանի տողի միջերեսում ավելացվել է «.mode duckbox» ելքային ռեժիմը, որը մերժում է միջին սյունակները՝ հաշվի առնելով տերմինալի պատուհանի լայնությունը (հարմար է մեծ թվով սյունակներով հարցումների արդյունքները արագ տեսողական գնահատելու համար, օրինակ՝ «SELECT * FROM tbl», որոնք նորմալ ռեժիմում տարածվում են մի քանի տողերի վրա): Օգտագործելով «.maxrows X» պարամետրը, կարող եք լրացուցիչ սահմանափակել ցուցադրվող տողերի քանակը:
  • CLI-ն ապահովում է մուտքագրման ավտոմատ լրացում` հաշվի առնելով համատեքստը (հիմնաբառերի, աղյուսակների անունների, գործառույթների, սյունակների անունների և ֆայլերի անունների մուտքագրումն ավարտված է):
  • CLI-ն ունի լռելյայն միացված հարցման առաջընթացի ցուցիչ:

Source: opennet.ru

Добавить комментарий