پرش به محتوای اصلی
پرش به محتوای مقاله

کامپایلر Gravity: اسکن ۲۵ گیگابایتی و ۳ برابر سرعت ClickHouse

·۹ آبان ۱۴۰۵۱۶ دقیقه مطالعه
تصویر برجسته: سرعت نوری در برنامه‌نویسی - عنوان موتور پرس و جستجوی گریویتی.
تصویر برجسته: سرعت نوری در برنامه‌نویسی - عنوان موتور پرس و جستجوی گریویتی.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

نخستین موتور OLAP که در محکِ خودِ ClickHouse (ClickBench) تا ۳ برابر سریع‌تر است، با پشتیبانی کامل از لهجهٔ SQL پستگرس و معماری کامپایلر مبتنی بر IR که اسکن و فیلتر را به ۱۰ درصد سرعت نظری می‌رساند.

موتور پرس‌وجوی Gravity در انتشار pgrust v0.4-beta در محک ClickBench تا سه برابر سریع‌تر از ClickHouse اجرا شد. این موتور هم‌زمان از لهجهٔ کامل SQL پستگرس پشتیبانی می‌کند و پرس‌وجوها را به کد ماشین بهینه ترجمه می‌کند.

معماری کامپایلر Gravity

Gravity یک خط لوله چندمرحله‌ای است که پرس‌وجوی SQL را به تدریج به اسمبلی می‌رساند:

  • پرس‌وجو SQL → برنامه پستگرس (Postgres Plan)
  • برنامه پستگرس → نمودار خط لوله (Pipeline Graph)
  • نمودار خط لوله → IR لیسپی (Lisp IR)
  • IR لیسپی → اسمبلی (Assembly)

هر مرحله نمایش میانی است که به مرحله بعد پس از lowering (تبدیل به کد ماشین) می‌شود. این طراحی انعطاف‌پذیری بالا در تولید بهینه‌سازی‌های سطح پایین فراهم می‌کند. همان‌طور که در مورد استفاده از Claude برای بهینه‌سازی کوئری‌های PostgreSQL گزارش شده، تیم pgrust نیز از Claude برای نوشتن کدهای Rust بهینه در برابر فرمت ستون‌محور بهره گرفت.

از کپی-و-چسب تا IR کامل

در انتشارهای قبلی تیم pgrust از دسته‌بندی (batching)، ادغام عملگرها (operator fusion) و SIMD برای سرعت‌بخشی صدها برابرتی استفاده کرده بود. یک کامپایلر JIT کپی-و-چسب (copy-and-patch JIT) نیز استنسل‌ها (stencil) را در ۵ میکروثانیه کامپایل می‌کرد. اما چسباندن قالب‌های ازپیش‌کامپایل‌شده بدون یک نمایش میانی واقعی و تخصیص ثبات (register allocation) در کل حلقه، عملکرد زیادی را نسبت به کامپایلرهای بهینه‌ساز مانند rustc یا Clang روی میز می‌گذاشت. Gravity این محدودیت را با یک IR کامل برطرف می‌کند.

برنامه‌نویسی با سرعت نور

تیم به جای بهینه‌سازی تدریجی (bottom-up)، از سقف فیزیکی سخت‌افزار و فرمت فایل آغاز کرد و به عقب بازگشت — رویکردی که «برنامه‌نویسی با سرعت نور» نامید. برای یافتن این سقف، از Claude خواسته شد برنامه‌های Rust مستقل و به‌شدت بهینه مستقیماً در برابر فرمت ذخیره‌سازی ستون‌محور (columnar storage format) بنویسد که تنها یک ستون را اسکن و یک تجمع (sum یا count) محاسبه می‌کردند. این برنامه‌ها از تمام ترفندها — SIMD، پیش‌ واکشی (prefetching)، گشودن حلقه (loop unrolling)، کد بدون انشعاب (branchless code) — استفاده می‌کردند. سریع‌ترین آن‌ها ستون را با حدود ۲۵ گیگابایت بر ثانیه روی پردازنده‌های مدرن اسکن کرد. این عدد هدف «سرعت نور» شد.

عملکرد اسکن و فیلتر در حد فیزیکی

بینش کلیدی Gravity این است که بیشتر عملکرد یک پرس‌وجو از اسکن و فیلتر ناشی می‌شود؛ بقیه — جویین (join)، گروه‌بندی (group by)، مرتب‌سازی (sort) — معمولاً ارزان‌ترند. بنابراین Gravity روی بهینه‌سازی اسکن و فیلتر تمرکز می‌کند. برای مثال اگر روی یک ستون رشته‌ای فیلتر کنید، Gravity کدی تولید می‌کند که از دستورهای SSE یا AVX برای مقایسهٔ موازی رشته‌ها استفاده می‌کند. اگر اعداد صحیح جمع کنید، از SIMD برای جمع‌کردن موازی بهره می‌برد. نتیجه: کد تولیدشده برای اسکن و فیلتر در ۱۰ درصد از حداکثر سرعت نظری قرار می‌گیرد. بقیه پرس‌وجو توسط یک موتور عمومی‌تر اجرا می‌شود که همچنان به‌اندازه‌ای سریع است که زمان کل را غالب نمی‌کند.

پشتیبانی از پرس‌وجوهای پیچیده و گسترش‌پذیری

چون Gravity SQL را به کد ماشین کامپایل می‌کند، هر ویژگی SQL که در IR قابل بیان باشد پشتیبانی می‌شود. این یعنی پرس‌وجوهای پیچیده با جویین‌های متعدد، زیرپرس‌وجوها و توابع پنجره‌ای (window functions) هم هم‌سرعت اسکن‌های ساده اجرا می‌شوند. تیم مواردی دیده که Gravity روی پرس‌وجوهای پیچیده ۱۰ برابر از پایگاه‌داده‌های دیگر سریع‌تر است. معماری Gravity هم قابل گسترش است: نوع داده جدید، تابع جدید، عملگر جدید به IR اضافه می‌شوند بدون تغییر در تولیدکننده کد. این امکان تطبیق آسان Gravity برای کاربردهای نوظهور مانند یادگیری ماشین (machine learning) یا تحلیل سری‌های زمانی (time-series analytics) را می‌دهد.

گام بعدی شما

  • pgrust v0.4-beta را امتحان کنید و پرس‌وجوهای تحلیلی واقعی خود را روی ClickBench یا داده‌های خود بسنجید.
  • معماری IR را بررسی کنید اگر به توسعه موتورهای پرس‌وجو یا کامپایلرهای SQL علاقه دارید؛ طراحی IR ساده اما بیان‌گرا الگوی قابل تکراری است.
  • مقایسه هزینه استنتاج را در نظر بگیرید: اگر بارهای کاری تحلیلی سنگین دارید، کاهش ۳ برابر زمان اجرا مستقیماً به کاهش هزینه سخت‌افزاری و انرژی تبدیل می‌شود.
چرا این موضوع مهم است؟

Gravity نشان می‌دهد که کامپایل SQL به کد ماشین می‌تواند سرعت OLAP را به سقف فیزیکی سخت‌افزار برساند، بدون از دست دادن کامل‌بودن SQL. این ترکیب عملکرد سطح ClickHouse با انعطاف پستگرس، قواعد رقابت در پایگاه‌داده‌های تحلیلی را تغییر می‌دهد.

تأثیر برای ایران

کد منبع pgrust/Rust برای توسعه‌دهندگان ایرانی در دسترس است، اما فقدان پشتیبانی رسمی از سرویس‌های ابری و تحریم‌های مالی، استقرار در محیط تولید را چالش‌برانگیز می‌کند.

·نگاه ما
تحریریه دات‌هوش

با بازنویسی لایه اجرا از پایه به‌منظور دستیابی به حد فیزیکی سخت‌افزار، Gravity شکاف عملکرد با پایگاه‌داده‌های OLAP سنتی را می‌بندد در حالی که سازگاری کامل SQL را حفظ می‌کند. اگر این الگو رواج یابد، مرز بین موتورهای تراکنشی و تحلیلی در سطح اجرا محو خواهد شد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.