JetBrains برای اضافهکردن امکان اجرای یک query روی چند database در DataGrip، بهجای ساخت موتور اختصاصی، DuckDB را درون این ابزار قرار داده است. نتیجه این است که دادههای PostgreSQL، MySQL، MongoDB یا هر database پشتیبانیشده دیگری میتوانند بدون راهاندازی زیرساخت اضافه، در یک query با هم join شوند.
این قابلیت پاسخی به یکی از درخواستهای قدیمی کاربران است: ترکیب دادههای اتصالهای مختلف در یک query. DataGrip از قبل میتوانست query را روی هر اتصال جداگانه اجرا کند، اما موتوری نداشت که نتیجههای آنها را به هم مرتبط کند. قابلیتهای کار با database در دیگر IDEهای JetBrains هم بهصورت plugin ارائه میشوند؛ بنابراین کاربرد این امکان به خود DataGrip محدود نیست.
تیم برای حل مسئله، Apache Calcite، پردازش مستقیم query با PSI و DuckDB را بررسی کرد. PSI نمایش داخلی ساختار کد در ابزارهای JetBrains است. بهگفته Ilia Epelbaum از تیم DataGrip، سادگی اتصال DuckDB به قابلیتهای موجود، دلیل اصلی انتخاب آن بود. امکان ثبت یک table function سفارشی به تیم اجازه داد DuckDB را به سازوکار اجرای query در DataGrip متصل کند.
DuckDB در مقایسه با گزینههای سبکتری مانند H2، قابلیتهای بیشتری هم داشت؛ از جمله بهینهسازیهایی مانند projection pushdown. طبق توضیح تیم، گسترش برخی گزینههای embedded بررسیشده به native code یا پیادهسازی پیچیده نیاز داشت. در این مسیر، JetBrains مجبور نشد موتور اجرای query میان چند database را خودش بنویسد و نگهداری کند.
حضور DuckDB از کاربر پنهان نیست. query مربوط به join میان اتصالها با SQL dialect آن نوشته میشود و DataGrip این موضوع را مشخص میکند. JetBrains همچنین DuckDB را بهعنوان یک SQL dialect مستقل پشتیبانی میکند و Epelbaum در اضافهکردن syntax highlighting، از جمله برای syntax معرفیشده در DuckDB 2.0، مشارکت داشته است.
این راهکار هنوز نسخه اولیه است. تیم میخواهد ابتدا استفاده واقعی کاربران را بررسی کند و سپس بهرهگیری بیشتری از بهینهسازیهای DuckDB داشته باشد. استفاده از DuckDB برای خواندن منبعهای داده مبتنی بر فایل نیز در برنامه قرار دارد؛ این بخش هنوز بهعنوان مسیر آینده مطرح شده است.



