DuckDB 2.0.0 LTS "آب دارچینی"
آدرس مقاله: https://duckdb.org/2026/10/21/announcing-duckdb-200 آدرس نظرات: https://news.ycombinator.com/item?id=50181136 امتیاز: 296 # نظرات: 31
TL;DR: تیم DuckDB خوشحال است که اعلام کند که امروز DuckDB نسخه 2.0.0 LTS را با نام رمز "Cinnamon Teal" (Spatula cyanoptera) منتشر می کنیم. این بزرگترین ویژگی منتشر شده ما تا کنون بوده است، و یک نسخه صیقلی از پروتکل Quack، I/O ناهمزمان، نوع درجه یک VARIANT، حالت عامل، تریگرها، تجزیهکننده SQL توسعهیافته و موارد دیگر را ارائه میکند که از زمان DuckDB 1.5 تا کنون از نزدیک به 20000 commit ساخته شده است.
ما مفتخریم که DuckDB 2.0.0 را با نام رمز "Cinnamon Teal" پس از Spatula cyanoptera، یک اردک قهوه ای مایل به قرمز که در غرب آمریکا یافت می شود، منتشر کردیم.
در حالی که DuckDB 1.0 تماما در مورد ثبات و سازگاری با عقب بود، DuckDB 2.0 بیش از هر چیز یک ویژگی منتشر شده است. در این پست وبلاگ، نکات برجسته را خلاصه میکنیم و سپس تغییرات اساسی و نحوه مهاجرت را مرور میکنیم. ما بسیاری از ویژگیهای جدید را در «پیشنمایش DuckDB v2.0» به نمایش گذاشتیم که هر یک را با عمق بیشتری پوشش میدهد. برای یادداشتهای انتشار کامل، به صفحه انتشار در GitHub مراجعه کنید.
نکته برای نصب نسخه جدید، لطفا به صفحه نصب مراجعه کنید. برخی از مشتریان، مانند CLI و Python، در حال حاضر در دسترس هستند. سایر کتابخانههای سرویس گیرنده (مانند Go، R، جاوا) و برخی از برنامههای افزودنی ممکن است چند روز طول بکشد تا به دلیل تغییرات اضافی و دورههای بررسی مورد نیاز منتشر شوند.
با این نسخه، در حال حاضر سه خط DuckDB در دسترس است. DuckDB 2.0 یک نسخه پشتیبانی بلندمدت (LTS) با پشتیبانی حداقل تا اکتبر 2027 است. نسخه قبلی LTS، نسخه 1.4، هنوز تا اواخر نوامبر 2026 پشتیبانی میشود. برای اطمینان از انتقال روان و دادن زمان کافی برای آزمایش، ما دوره پشتیبانی DuckDB 1.5 را تا مارس 2027 تمدید کردیم و آن را نیز به طور مؤثر به نسخه LTS تبدیل کردیم. برای جزئیات، به تقویم انتشار مراجعه کنید.
برای یافتن راه خود در مورد اسناد برای همه ویژگیهای جدید، ما همچنین یک صفحه «چه خبرهای جدید در Docs for 2.0» منتشر کردیم که هر ویژگی را در زیر به اسناد آن پیوند میدهد.
DuckDB از روز اول یک پایگاه داده در حال پردازش بوده است. در DuckDB 1.5.3، که در ماه مه منتشر شد، پروتکل Quack را معرفی کردیم که به شما امکان می دهد DuckDB را در یک راه اندازی سرویس گیرنده-سرور سنتی اجرا کنید، همراه با پسوند quack، که پروتکل بومی DuckDB را پیاده سازی می کند، بنابراین هر فرآیند DuckDB می تواند پایگاه داده های خود را ارائه دهد.
DuckDB 2.0.0 نسخه صیقلی پروتکل Quack را با بهبود عملکرد و پایداری قابل توجهی ارائه می دهد. همچنین بیانیه جدید CONNECT را معرفی می کند که امکان اتصال و جابجایی به یک پایگاه داده از راه دور را در یک دستور واحد برای ارگونومی بهتر فراهم می کند:
برای سادگی، این مثال سرور و کلاینت را روی یک ماشین اجرا می کند. به طور پیش فرض، سرور فقط در لوکال هاست گوش می دهد. برای پذیرش اتصالات از سایر ماشینها، سرور را روی لوکال هاست نگه دارید و آن را پشت یک پروکسی معکوس پایان دهنده TLS قرار دهید. گزینه allow_other_hostname که مستقیما سرور را نشان می دهد، فقط برای آزمایش در نظر گرفته شده است.
دستور CONNECT به Quack محدود نمی شود: جلسه شما را به هر پایگاه داده راه دوری که از آن پشتیبانی می کند، از جمله PostgreSQL و MySQL اشاره می کند. برای این موارد، بهینهساز کنترل از راه دور جدید بهجای کشیدن جداول روی سیم، درخواستها را مستقیما به سرور راه دور ارسال میکند.
CLI همچنین دارای میانبرهایی برای تنظیم یک جفت مشتری-سرور Quack است: آرگومان های جدید -serve و -connect یک سرور Quack را شروع می کنند یا مستقیما از خط فرمان به یکی متصل می شوند:
DuckDB 2.0 ورودی/خروجی ناهمزمان را برای خواندن فایلهای پارکت و CSV معرفی میکند. لایه I/O اکنون به طور مستقل از لایه پردازش پرس و جو مقیاس می شود و در پس زمینه خوانده می شود و درخواست های متعدد را در جریان نگه می دارد. این به معنای موازی بودن بسیار بیشتر برای خواندن از راه دور و پرس و جوهای سریعتر در ذخیره سازی اشیا مانند s3:// است.
ما طرح را به طور مفصل در یک پست وبلاگ اختصاصی توضیح دادیم. در آن پست، ما توان عملیاتی شبکه را در طول یک پرس و جو با و بدون ورودی/خروجی ناهمزمان نشان دادیم:
توان عملیاتی شبکه استفاده بیشتر و زمان اجرا کوتاه تر بهتر است.
نوع VARIANT داده های نیمه ساختار یافته و بدون طرح واره مانند JSON را در حالی که عملکرد اجرای ستونی را حفظ می کند، ذخیره می کند. بنابراین میتوانید آن را بهعنوان JSON در استروئیدها در نظر بگیرید: یک ستون VARIANT میتواند دادههایی با شکلهای متفاوت در هر ردیف ذخیره کند، اما برخلاف JSON یک قالب متنی نیست.
DuckDB 1.5 قبلا VARIANT را معرفی کرده بود، اما DuckDB 2.0 به طور کامل آن را یکپارچه می کند. DuckDB 2.0 ساختار رایج در دادههای شما را شناسایی میکند و آنها را "تکه" میکند، بنابراین به خوبی فشرده میشود و سریع اجرا میشود. خط لوله سرتاسر کار می کند، از اجرای خرد شده مستقیما خارج از ذخیره سازی تا خواندن و نوشتن VARIANT خرد شده برای پارکت، که توسط خانواده ای از توابع variant_* پشتیبانی می شود. به عنوان مثال:
عوامل برنامه نویسی مانند Claude Code، Codex و Cursor به طور فزاینده ای DuckDB CLI را از طرف کاربران خود هدایت می کنند. 2.0 CLI تشخیص میدهد که توسط یک عامل اجرا میشود و به حالت عامل تغییر میکند: جداول Markdown فشرده را بهجای جعبههای پرشده چاپ میکند، به وضوح میگوید زمانی که نتیجه کوتاه شده است، درخواستهای فرار را زود متوقف میکند و خطاها را بهعنوان JSON گزارش میکند.
پرس و جوهای SQL طولانی مدت هزینه مورد انتظار خود را قبل از اجرا گزارش می دهند، بنابراین عامل می تواند تصمیم بگیرد که آیا منتظر بماند یا خیر. در آزمایشهای ما روی TPC-H، حالت عامل مقدار خروجی DuckDB را که مدل باید بخواند تا 59 درصد کاهش داد. می توانید آن را برای آزمایش دستی با استفاده از پرچم -agent روشن کنید یا به نماینده خود دستور دهید تا با استفاده از پرچم -no-agent آن را خاموش کند.
DuckDB همیشه از یک تجزیه کننده مشتق شده از PostgreSQL استفاده کرده است. در نسخه 2.0، تجزیه کننده مدرن و قابل توسعه مبتنی بر PEG ما، که به عنوان یک ویژگی انتخاب کردن در DuckDB 1.5 معرفی شد، به صورت پیش فرض تبدیل می شود. برنامههای افزودنی اکنون میتوانند به خود گرامر متصل شوند (ایدهای که ما ابتدا در تحقیق خود در مورد تجزیهکنندههای توسعهپذیر در زمان اجرا بررسی کردیم)، پس انتظار داشته باشید که برنامههای افزودنی که نحو کاملا جدید SQL را نشان میدهند. اکنون پیامهای خطا با مکانهای منبع دقیق ارائه میشوند. برای جزئیات، به مستندات تجزیه کننده PEG مراجعه کنید. تجزیه کننده جدید به گونه ای طراحی شده است که با نسخه قدیمی سازگار باشد، بنابراین نباید متوجه تعویض آن شوید. اگر این کار را می کنید، لطفا یک مشکل را مطرح کنید.
در عین حال، با اجرای SET enable_legacy_parser = true می توانید با استفاده از پسوند legacy_parser به تجزیه کننده قدیمی برگردید. .
تجزیه کننده قدیمی از زمان اولین commit خود در سال 2018 به DuckDB خدمت کرده بود. گرامر آن با YACC/Bison که تجزیه کننده LALR(1) تولید می کند، ایجاد شد، بنابراین با رشد DuckSQL، حتی اضافه های کوچک می توانند با قوانین موجود برخورد کنند و تضادها را افزایش دهند/کاهش یا کاهش دهند. گرامر PEG با امتحان کردن جایگزین ها به ترتیبی که نوشته شده اند از این امر جلوگیری می کند، بنابراین افزودن نحو دیگر خطر شکستن قوانین نامرتبط را ندارد. پایتون برای همین انعطافپذیری به تجزیهکننده مبتنی بر PEG در نسخه 3.9 منتقل شد.
DuckDB 2.0 یک C API اصلاح شده نسخه 2 را ارائه می دهد که به طور قابل توجهی قدرتمندتر از نسخه قبلی خود است و اجزایی مانند سیستم های فایل و توابع جدول را در معرض برنامه های افزودنی قرار می دهد. قبل از علامتگذاری بهعنوان پایدار، میخواهیم آن را در این زمینه آزمایش کنیم، بنابراین لطفا آن را امتحان کنید و بازخورد خود را برای ما ارسال کنید!
همچنین میتوانید مخازن برنامههای افزودنی مورد اعتماد خود را ثبت و میزبانی کنید، بنابراین یک سازمان میتواند برنامههای افزودنی خود را میزبانی کند و امضا کند و آنها را نصب و بارگذاری کند، درست مانند موارد داخلی:
مخزن یک نام، یک پیشوند URL و یک یا چند کلید عمومی RSA است که برای امضای پسوندهای ارائه شده از آن مورد اعتماد هستند. پیشوند می تواند به هر چیزی که DuckDB می تواند بخواند اشاره کند: یک مسیر محلی، https، s3، شما آن را نام ببرید. در زمان CREATE، DuckDB کلیدهای عمومی مخزن را واکشی می کند و آنها را در تعریف مخزن پین می کند و اثر انگشت SHA-256 هر کلید را چاپ می کند تا بتوانید آن را با کلیدهای منتشر شده خارج از باند مقایسه کنید.
این ویژگی هنوز در حال انجام است و نحو آن ممکن است در نسخه های بعدی تغییر کند. برای جزئیات بیشتر، صفحه مخازن افزونه را ببینید.
افزونههای اصلی DuckDB چندین ویژگی جدید، اصلاحات و بهینهسازی عملکرد را نیز ارائه میکنند. اینها برای همه فهرستها در اینجا بسیار زیاد هستند، بنابراین ما فقط تعدادی از آنها را برجسته میکنیم و در هفتههای آینده در پستهای وبلاگ اختصاصی آنها را پوشش خواهیم داد:
DuckDB 2.0 محرک ها را ارائه می دهد: عبارت CREATE TRIGGER با محرک های قبل و بعد، برای هر سطر و برای هر بیانیه، جداول انتقال از طریق ارجاع به جدول قدیمی/جدید، چندین تریگر در هر رویداد، بازگشت در جدول های راه اندازی شده و DRIGEROP. مورد استفاده کلاسیک جداول ممیزی است که در آن یک ماشه تغییراتی را که در پاسخ به اصلاح جدول تغییر کرده را ثبت می کند. برخی از ترکیبها، مانند قبل از ... برای هر ردیف و بهروزرسانی ... برای هر ردیف، هنوز پشتیبانی نمیشوند. محدودیت ها را ببینید
محرک ها همچنین می توانند نماهای مادی شده را به صورت تدریجی حفظ کنند! به عنوان مثال، برای پیگیری میانگین سنی افراد به ازای هر ملیت در جدول age_statistics، میتوانید از دو محرک - یکی برای درج و دیگری برای حذف عملیات استفاده کنید و مجموع و شمارش را در کنار میانگین ذخیره کنید.
هنگام درج، ردیفهای جدید را به ازای هر ملیت جمع میکنیم و آنها را در age_statistics ادغام میکنیم و برای هر ملیت جدید یک ردیف اضافه میکنیم:
در هنگام حذف، ردیفهای حذف شده را کم میکنیم و یک ملیت را به محض اینکه آخرین نفر از آن خارج شد، حذف میکنیم:
محرکها ما را یک قدم به دیدگاههای تحققیافته نزدیکتر میکنند، یک مورد قدیمی در بخش «کار آینده» نقشه راه ما.
مثل همیشه، گویش SQL دوستانه DuckDB همچنان در حال رشد است. چند مورد دلخواه از این چرخه انتشار:
موارد دیگر وجود دارد: DuckDB 2.0.0 از FETCH FIRST با استاندارد SQL پشتیبانی می کند و UNNEST را در بند GROUP BY امکان پذیر می کند. همچنین ادغام و به روز رسانی به خوبی تعریف شده را تضمین می کند.
DuckDB 2.0 با مجموعه کوچکی از تغییرات شکسته همراه است. برای اکثر کاربران، ارتقاء ساده است، اما استقرارهای پیچیده ای که بسیاری از فرآیندهای DuckDB را اجرا می کنند، نیاز به مراقبت بیشتری دارند. فرمت ذخیره سازی محتمل ترین منبع مشکلات است: نسخه های DuckDB قبل از 2.0 نمی توانند فایل های پایگاه داده ایجاد شده توسط DuckDB 2.0 را بخوانند. DuckDB 2.0 همچنان میتواند فایلهای پایگاه داده موجود شما را بخواند و بنویسد، و این فایلها برای نسخههای قدیمیتر قابل خواندن هستند. ما توصیه می کنیم قبل از تغییر تولید، نسخه 2.0.0 را روی یک سیستم سایه آزمایش کنید.
و اگر حجم کاری شما از نظر ماموریت حیاتی است، ممکن است بخواهید منتظر انتشار اولین پچ باشید که در نوامبر عرضه می شود.
برای جزئیات کامل، به راهنمای مهاجرت مراجعه کنید.
پس از دوره طولانی DuckDB در C++11، DuckDB 2.0 اکنون به یک کامپایلر C++17 نیاز دارد.
ما همچنین به Clang به عنوان کامپایلر پیشفرض برای بیلدهای انتشار خود تغییر دادیم. در لینوکس و macOS، DuckDB و برنامههای افزودنی اصلی آن با Clang ساخته شدهاند. در ویندوز، CLI با Clang ساخته شده است، در حالی که اکثر برنامه های افزودنی هسته هنوز با MSVC ساخته می شوند. ممکن است در آینده بیلدهای ویندوز بیشتری را به Clang منتقل کنیم، اما این نیاز به تغییرات بیشتری دارد.
مهرهای زمانی، تقویمها و ردهبندیهای آگاه از منطقه زمانی همیشه توسط کتابخانه ICU ارائه میشوند. در نسخه 2.0، کتابخانه ICU به طور کامل از بین رفته است: افزونه icu اکنون خود مناطق زمانی، تقویم ها و تلفیقی ها را پیاده سازی می کند، با داده های منطقه زمانی که مستقیما از پایگاه داده IANA ساخته شده و تا حدود 45 کیلوبایت فشرده شده است.
همه چیز دقیقا مانند قبل کار می کند و پیاده سازی بومی نیز سریعتر است. اگر مشکلی پیدا کردید، لطفا به ما اطلاع دهید!
نحو قدیمی تک پیکان لامبدا ( x -> x + 1 ) اکنون به طور پیش فرض غیرفعال است. به جای آن از سینتکس به سبک پایتون استفاده کنید:
با SET lambda_syntax = 'enable_single_arrow' می توانید به طور موقت سینتکس قدیمی را دوباره فعال کنید. . هم پرچم و هم نحو تک پیکانی به طور کامل در نسخه 2.1 حذف خواهند شد.
ساخت ادغام، که کل کد منبع DuckDB را در یک هدر و یک فایل منبع واحد جمع میکند، اکنون منسوخ شده است. ادغام بیش از حد بزرگ شده است که در اکثر موارد به طور واقع بینانه مفید نیست.
ما به تدریج osx_amd64 را از لیست پلتفرم های کاملا پشتیبانی شده حذف می کنیم. در حال حاضر، DuckDB و برنامههای افزودنی هسته هنوز ساخته و پشتیبانی میشوند، اما افزونههای انجمن دیگر برای این پلتفرم ساخته نمیشوند. DuckDB 2.1 پشتیبانی از osx_amd64 را متوقف خواهد کرد.
این ها چند نکته برجسته بودند، اما ویژگی ها و پیشرفت های بیشتری در این نسخه وجود دارد. از زمان DuckDB 1.5 تقریبا 20000 تعهد توسط بسیاری از مشارکتکنندگان انجام شده است که ویژگیهای کوچکتر و همچنین بهبود عملکرد و قابلیت استفاده را ارسال کرده است. یادداشتهای انتشار کامل را میتوانید در GitHub پیدا کنید.
ما میخواهیم از جامعه خود برای گزارشهای دقیق و بازخوردهایی که باعث این نسخه شده است تشکر کنیم و از همکاران ما تشکر ویژه داریم!
متن اصلی (انگلیسی)
DuckDB 2.0.0 LTS “Cinnamon Teal”
Article URL: https://duckdb.org/2026/10/21/announcing-duckdb-200 Comments URL: https://news.ycombinator.com/item?id=50181136 Points: 296 # Comments: 31