DuckDB 0.6.0, tahliliy so'rovlar uchun SQLite varianti chop etildi

DuckDB 0.6.0 DBMS versiyasi mavjud bo'lib, u SQLite-ning ixchamligi, o'rnatilgan kutubxona ko'rinishida ulanish qobiliyati, ma'lumotlar bazasini bitta faylda saqlash va qulay CLI interfeysi, bajarish uchun asboblar va optimallashtirish kabi xususiyatlarini birlashtiradi. saqlangan ma'lumotlarning muhim qismini qamrab oluvchi analitik so'rovlar, masalan, jadvallarning butun tarkibini jamlaydigan yoki bir nechta katta jadvallarni birlashtiradi. Loyiha kodi MIT litsenziyasi ostida tarqatiladi. Rivojlanish hali eksperimental nashrlarni shakllantirish bosqichida, chunki saqlash formati hali barqarorlashtirilmagan va versiyadan versiyaga o'zgaradi.

DuckDB juda murakkab va ko'p vaqt talab qiluvchi so'rovlarni boshqarish uchun qo'shimcha imkoniyatlarni o'z ichiga olgan rivojlangan SQL dialektini taqdim etadi. Murakkab turlardan foydalanish (massivlar, tuzilmalar, birlashmalar) va ixtiyoriy va ichki o'zaro bog'liq bo'lgan pastki so'rovlarni bajarish qobiliyati qo'llab-quvvatlanadi. U bir vaqtning o'zida bir nechta so'rovlarni bajarishni qo'llab-quvvatlaydi, so'rovlarni CSV va Parket fayllaridan to'g'ridan-to'g'ri bajarish. PostgreSQL DBMS dan import qilish mumkin.

SQLite-ning qobiq kodiga qo'shimcha ravishda, loyiha alohida kutubxonada PostgreSQL-dan tahlil qiluvchi, MonetDB-ning Date Math komponenti, oyna funktsiyalarining o'ziga xos amalga oshirilishi (Segment Tree Aggregation algoritmi asosida), oddiy ifoda protsessoridan foydalanadi. RE2 kutubxonasi, o'zining so'rovlar optimallashtiruvchisi va MVCC boshqaruv mexanizmi bir vaqtning o'zida vazifalarni bajarish (Multi-Version Concurrency Control), shuningdek, katta qiymatlar to'plamiga imkon beruvchi Hyper-Pipelining Query Execution algoritmiga asoslangan vektorlashtirilgan so'rovlarni bajarish mexanizmi. bir operatsiyada birdaniga qayta ishlanadi.

Yangi versiyadagi o'zgarishlar quyidagilardan iborat:

  • Saqlash formatini yaxshilash ishlari davom ettirildi. Optimistik disk yozish rejimi joriy etildi, unda bitta tranzaksiyada katta ma'lumotlar to'plami yuklanganda ma'lumotlar COMMIT buyrug'i bilan tranzaksiya tasdiqlanishini kutmasdan, oqim rejimida ma'lumotlar bazasidan faylga siqiladi va yoziladi. . COMMIT buyrug'i qabul qilinganda, ma'lumotlar allaqachon diskka yoziladi va ROLLBACK bajarilganda, u o'chiriladi. Ilgari, ma'lumotlar dastlab to'liq xotiraga saqlangan va amalga oshirilganda diskda saqlangan.
  • Ko'p yadroli tizimlarda yuklash tezligini sezilarli darajada oshirish imkonini beruvchi alohida jadvallarga ma'lumotlarni parallel yuklash uchun qo'shimcha yordam. Misol uchun, avvalgi versiyada 150 yadroli protsessorga 10 million qatorli ma'lumotlar bazasini yuklash 91 soniya davom etgan bo'lsa, yangi versiyada bu operatsiya 17 soniyada yakunlanadi. Parallel yuklashning ikkita rejimi mavjud - yozuvlar tartibini saqlash bilan va tartibni saqlamasdan.
  • Ma'lumotlarni siqish uchun FSST (Fast Static Symbol Table) algoritmi qo'llaniladi, bu sizga odatiy moslashuvlarning umumiy lug'atidan foydalangan holda ma'lumotlarni satrlar ichida to'plash imkonini beradi. Yangi algoritmdan foydalanish testlar bazasi hajmini 761 MB dan 251 MB gacha qisqartirish imkonini berdi.
  • Suzuvchi nuqta raqamlarini (DOUBLE va FLOAT) siqish uchun Chimp va Patas algoritmlari taklif qilingan. Ilgari ishlatilgan Gorillas algoritmi bilan solishtirganda, Chimp yuqori darajadagi siqishni va tezroq dekompressiyani ta'minlaydi. Patas algoritmi siqilish nisbati bo'yicha Chimp'dan orqada qoladi, lekin dekompressiya tezligida ancha tezroq, bu siqilmagan ma'lumotlarni o'qishdan deyarli farq qilmaydi.
  • CSV fayllaridan maʼlumotlarni bir nechta parallel oqimlarga yuklash uchun eksperimental imkoniyat qoʻshildi (SET experimental_parallel_csv=true), bu katta CSV fayllarni yuklash uchun ketadigan vaqtni sezilarli darajada qisqartiradi. Masalan, ushbu parametr yoqilganda, 720 MB hajmli CSV faylni yuklab olish vaqti 3.5 dan 0.6 soniyagacha qisqardi.
  • Indekslarni yaratish va boshqarish operatsiyalarini parallel ravishda bajarish imkoniyati amalga oshirildi. Masalan, 16 million yozuvga ega ustunda CREATE INDEX operatsiyasi 5.92 dan 1.38 soniyagacha qisqartirildi.
  • “COUNT(DISTINCT col)” ifodasini o‘z ichiga olgan so‘rovlarda jamlash operatsiyalarini parallellashtirish yoqilgan.
  • SQL UNION turini qo'llab-quvvatladi, bu bir nechta turlarni bitta elementga bog'lash imkonini beradi (masalan, "UNION(num INT, xato VARCHAR))").
  • SQL "SELECT" o'rniga "FROM" so'zi bilan boshlanadigan so'rovlarni shakllantirish imkoniyatini beradi. Bunday holda, so'rov "SELECT *" bilan boshlanadi deb taxmin qilinadi.
  • SQL-da COLUMNS ifodasini qo'llab-quvvatlash qo'shildi, bu sizga ifodani takrorlamasdan bir nechta ustunlar ustida operatsiyani bajarish imkonini beradi. Masalan, “obs dan MIN(COLUMNS(*)) ni tanlang;” obs jadvalidagi har bir ustun uchun MIN funksiyasi bajarilishiga olib keladi va "obs dan USTUNLAR('val[0-9]+') ni tanlang;" "val" va raqamlardan iborat nomga ega ustunlar uchun.
  • Roʻyxatlar boʻyicha operatsiyalarni qoʻllab-quvvatlash qoʻshildi, masalan, “SELECT [x+1 for x in [1, 2, 3]] AS l;”.
  • Xotira iste'moli optimallashtirildi. Odatiy bo'lib, Linux platformasi xotirani boshqarish uchun jemalloc kutubxonasidan foydalanadi. Xotira cheklangan bo'lsa, xeshni birlashtirish operatsiyalarining ishlashi sezilarli darajada yaxshilandi.
  • Buyruqlar qatori interfeysiga terminal oynasining kengligini hisobga olgan holda o'rta ustunlarni tashlab yuboradigan ".mode duckbox" chiqish rejimi qo'shildi (ko'p sonli ustunlar bilan so'rovlar natijalarini tez vizual baholash uchun javob beradi, masalan, "SELECT *" FROM tbl”, normal rejimda bir nechta satrlarga yoyilgan). ".maxrows X" parametridan foydalanib, siz ko'rsatilgan qatorlar sonini qo'shimcha ravishda cheklashingiz mumkin.
  • CLI kontekstni hisobga olgan holda kiritishni avtomatik to'ldirishni ta'minlaydi (kalit so'zlar, jadval nomlari, funktsiyalar, ustun nomlari va fayl nomlarini kiritish tugallangan).
  • CLI sukut bo'yicha yoqilgan so'rovning borishi ko'rsatkichiga ega.

Manba: opennet.ru

a Izoh qo'shish