تصور کنید به جای استفاده از نرمافزارهای گرافیکی سنگین، تنها با نوشتن یک دستور SELECT در یک پایگاهداده، یک منظره سهبعدی واقعگرایانه خلق کنید. این اتفاق افتاده است و حالا مرز بین مدیریت داده و پردازش گرافیکی کمرنگتر از هر زمان دیگری است.
بر اساس مستندات منتشر شده در ۱ جولای ۲۰۲۶، توسعهدهندگان موفق شدند با استفاده از کلیکهاوس (ClickHouse) یک سیستم رهیافت پرتویی یا پت-تریسر (Path Tracer) بسازند که مناظر تولیدی و متون کرومی را بهطور کامل از طریق پرسوجوها محاسبه میکند. نکته کلیدی این است که این پیادهسازی «خالص» است؛ یعنی یک دستور SELECT واحد، هر پیکسل را بدون نیاز به کدهای خارجی یا توابع تعریفشده توسط کاربر (UDF) محاسبه میکند.
در این رویکرد، پایگاهداده دیگر یک جدول ساده از رکوردها نیست، بلکه شبیه به یک واحد پردازش گرافیکی (GPU) — یعنی سختافزاری که میلیونها محاسبه کوچک را همزمان انجام میدهد تا تصویر روی صفحه ظاهر شود — عمل میکند. موتور رندر در این سیستم، هر پیکسل را به عنوان یک ردیف در دیتابیس میبیند. با استفاده از تابع numbers_mt(width * height * samples)، برای هر جفت (پیکسل، نمونه) یک ردیف ایجاد میشود و بدین ترتیب، موتور محاسبات سنگین ریاضی را روی تمام هستههای CPU موجود به صورت موازی پخش میکند. نمونهها از طریق GROUP BY pixel میانگینگیری میشوند و ستونهای r، g، b حاصل (در بازه [۰, ۱]) به همراه ستونهای صریح مختصات x و y، مستقیماً از طریق فرمت خروجی تصویر بومی کلیکهاوس به یک فایل PNG نوشته میشوند. از آنجایی که مختصات با استفاده از pixel % width و intDiv(pixel, width) به صورت صریح تعریف شدهاند، خروجی نیازی به دستور ORDER BY ندارد و این امر تضمین میکند که عملیات به صورت کاملاً موازی باقی بماند.
موتور فنی و سازوکارهای مهندسی
برای عبور از محدودیتهای زبان SQL، این پروژه از چندین ترفند پیچیده مهندسی استفاده کرده است:
- جبر خطی با توپلها: بردارها به صورت
Tuple(Float64, Float64, Float64)نمایش داده میشوند. موتور از توابعی مانندdotProduct(ضرب داخلی)،L2Normalize(نرمالسازی L2)،tuplePlus(جمع توپلها) وtupleMultiplyByNumber(ضرب توپل در عدد) استفاده میکند. این توابع در قالب نامهای مستعار کوتاه و لامبدا مانندva،vs،vm،vd،vn،vcوvrefبستهبندی شدهاند تا خوانایی پرسوجو حفظ شود. - حلقه بازگشت (The Bounce Loop): در حالی که اولین نسخه از این پروژه از CTEهای بازگشتی (
WITH RECURSIVE) استفاده میکرد، موتور فعلی برای تکرار رویrange(maxDepth)از تابعarrayFoldبهره میبرد. در هر مرحله از این تکرار (Fold)، هر پرتو دقیقاً یک بازتاب آینهای را طی میکند. این یک حلقه داخلی در هر ردیف است، به این معنی که ردیفها مستقل از یکدیگر باقی میمانند. - اتصال مقادیر (Value Binding): لایههای لامبدای کلیکهاوس از نوع Call-by-name هستند که اگر مقداری به عنوان پارامتر پاس داده شود، میتواند منجر به انفجار درخت پرسوجو (Query Tree) شود. برای جلوگیری از این مشکل، مقادیر میانی با استفاده از ساختار
arrayMap(x -> body, [expr])[1]به صورت Value-bound تثبیت میشوند؛ این کار در واقع یک اتصال «let» از طریق ایجاد یک آرایه تکعضوی ایجاد میکند.

هندسه و مدلسازی محیط
صحنه با استفاده از هندسه صلب سازندهای (CSG) طراحی شده است. حروف کلمه "ClickHouse" به صورت متون شیشهای و کرومی رندر شدهاند که از نظر سبک، یادآور پت-تریسر کارتویزیکای شرکت پیکسار اثر اندرو کنسلر است. جزئیات هندسی شامل موارد زیر است:
- استوانهها: میلههای گرد با کلاپهای تخت که برای خطوط مستقیم حروف مانند 'l' ،'i' ،'k' ،'H' ،'u' و خط افقی حرف 'e' به کار رفتهاند.
- توره (Tori): برای حروف گرد مانند 'C' ،'c' ،'o' ،'u' ،'s' و 'e' استفاده شده و از طریق میدان فاصله علامتدار (SDF) آنها رندر (Ray-march) شدهاند. بازشوهای حروفی مانند 'C' و 's' با تفریق یک باکس (جعبه) از حلقه ایجاد شدهاند.
- کرهها: برای نقطه روی حرف 'i' و یک «سیاره» کرومی (که با تفریق یک کره از کره دیگر ساخته شده) استفاده شدهاند.

- متراعات (Parallelepipeds): جعبههای جهتدار (Oriented boxes) که برای خطوط با سطح تخت در دسترس هستند.
علاوه بر متن، یک زمین (Terrain) با استفاده از حرکت براونی کسری (fBm) تولید شده است که به صورت z = amp · fBm(x, y) تعریف میشود. این فرآیند چندین اکتاو از نویز مقدار شبکهای (Lattice value-noise) را با هم جمع میکند. پرتوهای دوربین در برابر این سطح رندر میشوند. برای بهینهسازی سرعت و جلوگیری از ایجاد اثر پلهای (Step-banding)، عملیات March در نقاط خالی هوا جهش میکند (از جایی شروع میشود که پرتو به حداکثر ارتفاع زمین میرسد) و سپس برخورد با سطح را به صورت خطی درونیابی میکند.

سیستم رنگبندی این محیط طبق یک طیف ارتفاعی (Color Ramp) است که از آب $\rightarrow$ شن $\rightarrow$ چمن $\rightarrow$ سنگ $\rightarrow$ برف تغییر میکند. مدل نورپردازی نیز ترکیبی از یک خورشید گرم و نور محیطی سرد آسمان است که دارای مه فاصله (Distance Fog) در افق و سایههای محاسبهشده (Marched Shadows) برای هر دو موردِ خود-سایه زمین و سایههای ایجاد شده توسط حروف است.

پروژه همچنین شامل یک انیمیشن به نام "ClickBulb" است که در آن یک چراغ رومیزی (که تماماً از کرههای SQL ساخته شده) به درون صحنه میپرد، پشت بنر میرود و به بیننده نگاه میکند. هر فریم از این ویدیو، در واقع یک اجرای مجزا از همان پرسوجوی SQL است که برای رسیدن به کیفیت کامل ویدیو، یک بار برای هر فریم اجرا شده است.

تحلیل عملکرد و مقایسه
تمامی فایلها در دایرکتوری queries/ به صورت مستقل و پارامتری هستند. اندازه تصویر از طریق getSetting (با استفاده از --output_format_image_width و --output_format_image_height) خوانده میشود و تعداد نمونهها برای هر پیکسل به عنوان پارامتر {SAMPLES:UInt32} پاس داده میشود. برای مثال، تصویر اصلی با رزولوشن ۲۵۶۰ در ۱۲۰۰ و ۸ نمونه برای هر پیکسل رندر شده است.
تستهای انجام شده روی پایگاههای داده مختلف، تفاوتهای فاحشی را در قابلیتها نشان داد:
- کلیکهاوس: موتور اصلی که با بهرهگیری از
arrayFoldرندرینگ سریع و موازی را فراهم میکند. - CedarDB: عملیاتی بود، اما ۳۳ برابر کندتر از کلیکهاوس بود و با باگهای متعددی دستوپنجه نرم میکرد (که در
cedardb/issues#71به آنها اشاره شده است). - DuckDB: به طور کامل غیرعملیاتی بود؛ این دیتابیس حتی نتوانست تصاویر با کوچکترین رزولوشن را با استفاده از آرایهها یا CTEهای بازگشتی پردازش کند.
این تجربه فرضیه سنتی درباره «کاربرد دیتابیس» را میشکند. با اثبات اینکه رندرینگ پیچیده سهبعدی بدون UDFها ممکن است، کارایی کلیکهاوس در پردازش عددی خام (Numerical Throughput) برجسته میشود. این رویکرد در بهینهسازی لایههای پردازش، مشابه تلاشی است که پروژههایی نظیر HelixDB برای حذف لایههای اضافی ذخیرهسازی در عاملهای هوش مصنوعی انجام میدهند تا نرخ بهرهوری را افزایش دهند. این پروژه دیتابیس را به یک موتور محاسباتی همهمنظوره برای کارهای بهشدت موازی تبدیل میکند؛ مشابه سایر آزمایشهای SQL مانند NoiSQL برای موسیقی یا شبیهساز RISC-V کلیک-وی (Click-V).
گام بعدی شما
- اگر میخواهید تجربه کنید، میتوانید از مولدهای پایتون (
gen.pyوgen_fold.py) استفاده کنید. - این مولدها یک آرگومان پنجم اختیاری میپذیرند تا متنهای دلخواه را با استفاده از یک فونت بیت-مپی ۷ رديفي رندر کنند. برای مثال، اجرای دستور
python3 generators/gen_fold.py 640 256 16 4 "HELLO SQL" > hello.sqlپرسوجویی تولید میکند که میتواند مستقیماً به یک نمونه محلی کلیکهاوس ارسال (Pipe) شود. - بررسی کنید که آیا توابع ریاضی داخلی دیتابیس شما قابلیت جایگزینی با منطقهای پیچیده گرافیکی را دارد یا خیر.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است؛ برای درک اینکه چگونه تراشهها این حجم از داده را جابهجا میکنند، به تحلیل ما درباره معماری GPUهای نسل جدید مراجعه کنید.




گفتگو