انتشار DuckDB 0.6.0 DBMS در دسترس است، با ترکیبی از ویژگیهای SQLite مانند فشردهبودن، قابلیت اتصال در قالب یک کتابخانه جاسازی شده، ذخیره پایگاه داده در یک فایل و یک رابط CLI مناسب، با ابزارها و بهینهسازیها برای اجرا. پرس و جوهای تحلیلی که بخش قابل توجهی از داده های ذخیره شده را پوشش می دهد، به عنوان مثال که کل محتوای جداول را جمع می کند یا چندین جدول بزرگ را ادغام می کند. کد پروژه تحت مجوز MIT توزیع شده است. توسعه هنوز در مرحله شکل گیری نسخه های آزمایشی است، زیرا فرمت ذخیره سازی هنوز تثبیت نشده است و از نسخه ای به نسخه دیگر تغییر می کند.
DuckDB یک گویش پیشرفته SQL را ارائه می دهد که شامل قابلیت های اضافی برای رسیدگی به پرس و جوهای بسیار پیچیده و وقت گیر است. استفاده از انواع پیچیده (آرایهها، ساختارها، اتحادیهها) و توانایی اجرای زیرپرسشهای همبسته دلخواه و تودرتو پشتیبانی میشود. این برنامه از اجرای چندین پرس و جو به طور همزمان، اجرای پرس و جوها به طور مستقیم از فایل های CSV و Parquet پشتیبانی می کند. امکان وارد کردن از DBMS PostgreSQL وجود دارد.
علاوه بر کد پوسته SQLite، این پروژه از تجزیهکننده PostgreSQL در یک کتابخانه جداگانه، مؤلفه Date Math از MonetDB، پیادهسازی توابع پنجره (براساس الگوریتم Segment Tree Aggregation)، یک پردازشگر عبارت منظم بر اساس استفاده میکند. کتابخانه RE2، بهینه ساز پرس و جو خود، و مکانیسم کنترل MVCC اجرای همزمان وظایف (کنترل همزمانی چند نسخه)، و همچنین یک موتور اجرای پرس و جو بردار بر اساس الگوریتم اجرای پرس و جو Hyper-Pipelining، که به مجموعه مقادیر زیادی اجازه می دهد. یکباره در یک عملیات پردازش شود.
از جمله تغییرات نسخه جدید:
- کار برای بهبود فرمت ذخیره سازی ادامه یافت. حالت خوشبینانه نوشتن دیسک پیاده سازی شده است، که در آن هنگام بارگذاری مجموعه بزرگی از داده ها در یک تراکنش، داده ها فشرده شده و در یک فایل از پایگاه داده در حالت پخش، بدون انتظار برای تایید تراکنش با دستور COMMIT، نوشته می شود. . هنگامی که یک فرمان COMMIT دریافت می شود، داده ها قبلاً روی دیسک نوشته می شوند و هنگامی که یک ROLLBACK اجرا می شود، دور ریخته می شود. پیش از این، داده ها در ابتدا به طور کامل در حافظه ذخیره می شدند و پس از انجام تعهد، در دیسک ذخیره می شدند.
- پشتیبانی از بارگذاری موازی داده ها در جداول جداگانه اضافه شده است که به شما امکان می دهد سرعت بارگذاری را در سیستم های چند هسته ای به میزان قابل توجهی افزایش دهید. به عنوان مثال، در نسخه قبلی، بارگذاری یک پایگاه داده با 150 میلیون ردیف در یک CPU 10 هسته ای 91 ثانیه طول می کشید، اما در نسخه جدید این عملیات در 17 ثانیه انجام می شود. دو حالت بارگذاری موازی وجود دارد - با حفظ ترتیب سوابق و بدون حفظ نظم.
- برای فشردهسازی دادهها، از الگوریتم FSST (جدول نمادهای استاتیک سریع) استفاده میشود که به شما امکان میدهد دادهها را در داخل رشتهها با استفاده از یک فرهنگ لغت مشترک از منطبقات معمولی بستهبندی کنید. استفاده از الگوریتم جدید امکان کاهش حجم پایگاه داده آزمایشی را از 761 مگابایت به 251 مگابایت فراهم کرد.
- الگوریتم های شامپانزه و پاتاس برای فشرده سازی اعداد ممیز شناور (DOUBLE و FLOAT) پیشنهاد شده اند. در مقایسه با الگوریتم Gorillas قبلی، Chimp سطوح بالاتری از فشردهسازی و رفع فشار سریعتر را ارائه میکند. الگوریتم Patas در نسبت فشرده سازی از Chimp عقب تر است، اما در سرعت رفع فشرده سازی بسیار سریع تر است، که تقریباً هیچ تفاوتی با خواندن داده های فشرده نشده ندارد.
- یک قابلیت آزمایشی برای بارگیری دادهها از فایلهای CSV در جریانهای موازی متعدد (SET experimental_parallel_csv=true) اضافه شده است، که بهطور قابلتوجهی زمان بارگیری فایلهای CSV بزرگ را کاهش میدهد. به عنوان مثال، زمانی که این گزینه فعال بود، زمان دانلود یک فایل CSV 720 مگابایتی از 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(*)) from obs;" باعث می شود تابع MIN برای هر ستون در جدول obs و "SELECT COLUMNS('val[0-9]+') from obs;" برای ستون هایی با نام متشکل از "val" و اعداد.
- پشتیبانی برای عملیات در لیستها اضافه شد، به عنوان مثال، "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
- مصرف حافظه بهینه شده است. به طور پیش فرض، پلتفرم لینوکس از کتابخانه jemalloc برای مدیریت حافظه استفاده می کند. بهبود قابل توجهی عملکرد عملیات ادغام هش زمانی که حافظه محدود است.
- حالت خروجی «.mode duckbox» به رابط خط فرمان اضافه شد، که ستونهای میانی را با در نظر گرفتن عرض پنجره ترمینال حذف میکند (مناسب برای ارزیابی سریع نتایج جستجوها با تعداد زیادی ستون، مانند «SELECT * FROM tbl» که در حالت عادی در چندین خط پخش می شوند). با استفاده از پارامتر ".maxrows X"، می توانید تعداد ردیف های نمایش داده شده را نیز محدود کنید.
- CLI تکمیل خودکار ورودی را با در نظر گرفتن زمینه فراهم می کند (ورودی کلمات کلیدی، نام جدول، توابع، نام ستون ها و نام فایل تکمیل شده است).
- CLI دارای نشانگر پیشرفت پرس و جو است که به طور پیش فرض فعال شده است.
منبع: opennet.ru