۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

فراتر از SQL: 8 زبان جدید برای جستجوی داده ها

SQL برای چندین دهه بر پرس و جوی داده تسلط داشته است. زبان‌های جستجوی جدیدتر ظرافت، سادگی و انعطاف‌پذیری بیشتری را برای موارد استفاده مدرن ارائه می‌دهند.

SQL برای چندین دهه بر پرس و جوی داده تسلط داشته است. زبان‌های جستجوی جدیدتر ظرافت، سادگی و انعطاف‌پذیری بیشتری را برای موارد استفاده مدرن ارائه می‌دهند.

در سه دهه گذشته، پایگاه‌های داده و زبان پرس و جو ساختاریافته (SQL) تقریباً مترادف بودند. هر کسی که می خواست اطلاعات را از پایگاه داده بازیابی کند باید SQL را یاد می گرفت. هرکسی که می‌خواهد از یک پایگاه داده مراقبت کند یا به عنوان مدیر پایگاه داده شغلی داشته باشد، باید بر نکات ظریف آن تسلط داشته باشد.

زبان به خودی خود یک بازگشت به عقب است، فرصتی برای فکر کردن و کدنویسی همانطور که کاربران مین فریم انجام دادند. در حالی که بقیه جهان از حروف کوچک استفاده می کردند، کاربران SQL به تایپ کلماتی مانند SELECT یا WHERE ادامه دادند. حتی امروز، به نظر می رسد که تعداد کمی از کاربران تیک توک به آنها اهمیت می دهند که آنها را مسخره کنند یا بپرسند چرا آنها فریاد می زنند. اگر ALL CAPS برای سوارکاران عرشه کارت پانچ با کراوات و پیراهن های آستین کوتاه به اندازه کافی خوب بود، خوب، هنوز برای کارگر دورکار امروزی که لباس خواب خرس عروسکی می پوشد به اندازه کافی خوب است.

اما محدودیت SQL در بازیابی داده ها در حال لغزش است. پایگاه های داده جدیدی در حال ظهور هستند و برخی از آنها به زبان های کاملاً جدیدی صحبت می کنند. اینطور نیست که SQL کمتر محبوب شود. در هر صورت، SQL بیشتری از همیشه نوشته می شود. فقط این است که دنیای ذخیره‌سازی داده‌ها حتی سریع‌تر در حال انفجار است، و برخی از این رشد میل به آزمایش و انشعاب را برمی‌انگیزد.

این مقاله هشت رویکرد جدیدتر برای بازیابی داده ها را معرفی می کند. در برخی موارد، نوآوری ها صرفا جنبه زیبایی دارند. توسعه‌دهندگان سینتکس SQL را به‌روزرسانی کرده‌اند تا آن را کمی دقیق‌تر و خواندن آن آسان‌تر کنند، بنابراین جابه‌جایی بین نوشتن کد برای مرورگر و بازیابی داده‌ها، دشوارتر است. سازندگان این ابزار تاکید دارند که ساختار زیربنایی اساساً همان SQL است. هنوز هم یادگیری آن آسان خواهد بود. نگران نباشید.

ابزارهای دیگر ما را دعوت می کنند تا به روشی کاملاً متفاوت فکر کنیم. پایگاه‌های داده‌ای که بیت‌های خود را در نمودارها یا در یک سری زمانی ذخیره می‌کنند، الگوهای جدیدی را برای چگونگی تعیین آنچه که برنامه‌نویسان می‌خواهند پیدا کنند، ارائه می‌دهند.

همه این گزینه ها برای کاری که باید انجام دهید بهتر از SQL نیستند. همه آنها امکاناتی را که شما به دنبال آن هستید به دست نمی آورند. اما همه فرصتی برای تفکر متفاوت در مورد آن دریایی از بایت‌ها در برخی از سرورها را ارائه می‌دهند، فقط منتظرند تا راهی پیدا کنید تا آنچه را که نیاز دارید پیدا کنید.

GraphQL

نام GraphQL کمی گیج کننده است زیرا در واقع زبانی نیست که برای بهره برداری از همه احتمالات نمودار طراحی شده است. پایگاه های داده این بیشتر شبیه یک خلاصه نویسی زیبا برای جستجوی داده ها است که در قالب تودرتو مشابه JSON ذخیره شده است. پرس و جو فقط یک توضیح سریع از این است که نتایج چگونه باید باشند. قسمت پشتی به این لیست از فیلدها نگاه می کند، که می تواند با محدودیت هایی در مقادیر همراه باشد، و سعی می کند نتایج منطبق را پیدا کند. در جایی که SQL چگونه را مشخص می کند پایگاه داده باید یک درخواست را تکمیل کند، کاربران GraphQL به سادگی فهرستی از فیلدها را ارائه می دهند. برخی آن را “پرس و جو با مثال” می نامند.

ساختار داده ها و الگوریتم ها در جاوا: راهنمای مبتدیان

این زبان یک تطابق طبیعی برای برخی از پایگاه‌های داده JSON است، اما GraphQL همچنین برای جستجوی پایگاه‌های داده رابطه‌ای با طرح‌واره جدولی محبوب‌تر شده است. پشتی‌های هوشمند می‌توانند درخواست‌های تودرتو را به الگویی از JOIN‌های متناسب با طرح تبدیل کنند.

زبان اصلی به عنوان یک پروژه داخلی در فیس بوک شروع شد، اما پس از انتشار آن به عنوان یک پروژه منبع باز مستقل، دیگران شروع به توسعه بک اندهای GraphQL کردند. اکنون نسخه هایی وجود دارد که به تمام زبان های اصلی و بسیاری از زبان های تجربی مدرن نوشته شده اند.

PRQL

اگر به طور طبیعی نرم‌افزار را به‌عنوان خط لوله یا زبان اسمبلی در نظر می‌گیرید، ممکن است PRQL را دوست داشته باشید که مخفف Pipelined Relational Query Language (تلفظ “Prequel”) است. پرس و جوها در این زبان به صورت زنجیره ای از دستورات کوچک ساختار یافته اند. در مجموع، دستورات تنها با داده‌هایی که می‌خواهید نتیجه می‌دهند.

مشابه بسیاری از زبان های برنامه نویسی مدرن، مدل ذهنی یک پرس و جو رویکردی کاربردی دارد. ویژگی های ساده مانند متغیرها تکرار را کاهش می دهند و جریان را ساده می کنند. نتایج یک خط در یک زنجیره بلند به خط بعدی وارد می شود. اگر می‌خواهید یک مرحله را بردارید، اغلب می‌توانید آن خط را نظر دهید و بقیه خط لوله همچنان کار می‌کند.

کد PRQL در Rust به عنوان یک ترانسپایلر برای تبدیل PRQL به SQL نوشته شده است. ساختار اصلی به این صورت است که قابل توسعه باشد، بنابراین می توانید انتزاعات بیشتری را متناسب با مورد استفاده خود اضافه کنید. این سهولت آزمایش تضمین می کند که زبان به سرعت تکامل می یابد.

WebAssembly

بسیاری از توسعه دهندگان به WebAssembly (به اختصار Wasm) به عنوان ابزاری برای ایجاد برنامه های کاربردی سریع که در مرورگرهای وب اجرا می شوند فکر می کنند. هنگامی که Redpanda شروع به ساخت یک ابزار جریان داده برای جانشینی کافکا کرد، آنها می خواستند مکانیزمی را اضافه کنند که نه تنها داده ها را ارائه می دهد بلکه گهگاهی در طول مسیر آن را متحول می کند. WebAssembly انتخاب آنها بود.

Redpanda با ایجاد یک جریان داده غیرقابل تغییر و منظم به عنوان یک دفتر کل عمل می کند. رویدادها ضمیمه شده‌اند و برنامه‌نویسان می‌توانند در هر نقطه‌ای از گذشته از جریان استفاده کنند. بیشتر آنها با رویدادهای تازه ایجاد شده شروع می شوند، اما برخی ممکن است در گذشته برای ایجاد مجموعه های تاریخی شروع کنند.

Quarkus: با جاوا بومی Kubernetes شروع کنید

WebAssembly، البته، حتی از رویه های ذخیره شده که بخشی از برخی پایگاه های داده هستند، بسیار توانمندتر و سطح پایین تر است. همه توسعه‌دهندگان نمی‌خواهند کدهای بیت‌بنگینگ و در سطح بایت بنویسند. اما این گزینه جریان داده را برای ایجاد تغییراتی که بسیار فراتر از آنچه با SQL امکان پذیر است، باز می کند.

GQL

Graph Query Language یا GQL یک استاندارد پیشنهادی است که زبان‌های اعلامی مشابهی مانند Cypher، PGQL و GSQL را ادغام می‌کند. توسعه دهندگان با تعیین یک مدل خاص برای مجموعه ای از گره ها، پرس و جوها را ایجاد می کنند و سپس پایگاه داده مسئول یافتن مطابقت ها است. GQL با نمودارهای ویژگی پیچیده تری کار می کند که به جفت گره ها اجازه می دهد چندین اتصال مختلف را به اشتراک بگذارند.

این استاندارد در حال توسعه فعال است. در حال حاضر، بهترین پیاده سازی ها ابزارهای تحقیقاتی هستند که برای استقرار طولانی مدت در نظر گرفته نشده اند.

گرملین

یکی از زبان‌های اصلی برای جستجوی نمودار، Gremlin مجموعه‌ای از مراحل را برای جستجو از طریق اتصالات بین گره‌ها می‌خواهد. برخی آن را زبان «مسیر محور» یا «پیمایش نمودار» می نامند. هر پرس و جو بر اساس مراحل ساخته شده است، و هر مرحله می تواند شامل نقشه برداری از گره فعلی، فیلتر کردن یک لیست یا به نوعی جدول بندی نتیجه باشد.

زبان اغلب فقط یک نقطه شروع است. به عنوان مثال، برخی از آنها گسترش Gremlin را با تعبیه یک مفسر پایتون در داخل آن انجام می دهند تا پرس و جوها بتوانند کد پایتون را شامل شوند. . دیگران در حال تعبیه Gremlin در یک زبان برنامه نویسی استاندارد مانند جاوا هستند تا برنامه نویسان بتوانند از قدرت Gremlin از داخل آن زبان استفاده کنند.

Gremlin اولین بار برای پروژه TinkerPop آپاچی ساخته شد و توسط پایگاه‌های داده گراف تراکنشی اصلی مانند چارچوب‌های نپتون آمازون و پردازش گراف با استفاده از Apache Spark یا Hadoop.

N1QL

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

N1QL (تلفظ “نیکل”) برای آسان‌تر کردن SQL طراحی شده است. بومی ها برای کار با اشیاء JSON که ممکن است در Couchbase ذخیره شوند. یک پرس و جو پایه دارای چندین بخش است که با کلمات کلیدی SELECT، FROM و WHERE مشخص شده اند، درست مانند SQL. جزئیات تعیین مسیر در ساختار داده که داده‌ها از آن می‌آیند، با دنیای تودرتوی اشیاء JSON تنظیم و تطبیق داده می‌شوند.

برای تشویق آزمایش، N1QL یک میز ​​کار پرس و جو با یک رابط بصری برای آزمایش و اصلاح پرس و جوها. Couchbase همچنین یک گزینه جستجوی متن کامل عمومی ارائه می دهد که به طور مستقل برای جستارهای جستجوی کلمات متنی به جای داده های ساختاریافته اجرا می شود.

Google مش سرویس Istio را به CNCF اهدا می کند

مالوی

مشکل SQL، به گفته سازندگان Malloy، در جزئیات نحوی نهفته است. بیان حتی ساده ترین پرس و جو زمان می برد زیرا زبان پرمخاطب و پر از تله های عملکردی پنهان است. بنابراین، آنها یک زبان برنامه‌نویسی مدرن با پیش‌فرض‌های طبیعی و نحو ساده‌تر ایجاد کردند که می‌توان آن را در SQL کامپایل کرد، بنابراین هیچ‌کس نیازی به بازسازی پایگاه داده سهام ندارد.

نتیجه یک نحو است که شبیه GraphQL قدرتمندتر است. یک پرس و جو بیشتر شبیه یک مدل یا چشم انداز برای نتیجه است، از جمله هرگونه محدودیت، مطابقت یا پیش فرض. Malloy مقداری بهینه سازی را در پس زمینه انجام می دهد. به عنوان مثال، JOIN های هوشمندتر می توانند به طور خودکار ایجاد شوند تا از شکاف و تله عملکرد فن جلوگیری شود. برای صرفه جویی در زمان می توان سوالات فرعی را جمع کرد. شاخص ها نیز در صورت نیاز اضافه می شوند. در نتیجه، نوشتن پرس‌و‌جوها بیشتر شبیه نوشتن کدهای مدرن است، با علائم نگارشی برای مختصر نگه داشتن ساختار.

هسته منبع باز Malloy در TypeScript ساخته شده است برای گنجاندن در کد Node.js. افزونه VS Code توسعه را ساده می کند.

اساس

بیشتر زبانهای پرس و جو مستقیماً به یک پایگاه داده خاص گره خورده اند. Basis در حال ایجاد یک خط لوله بیشتر است که می تواند از منابع مختلف قبل از فیلتر کردن آنها با مخلوطی از SQL استفاده کند. و پایتون در انتهای خط لوله، صادرکنندگانی هستند که داده ها را به گزینه های استاندارد مختلفی تحویل می دهند که از کدهای در حال اجرا گرفته تا الگوریتم های هوش مصنوعی و نمودارها و داشبوردها را شامل می شود.

توسعه دهندگان در حال حاضر در حال ساخت خطوط لوله مانند این در کد خود هستند و بسیاری از پروژه ها به ساختارهای مشابه وابسته هستند. Basis یک گزینه از پیش ساخته شده را ارائه می دهد که می تواند به روش های دقیق تر سفارشی شود. ورودی ها از پرس و جوهای پایگاه داده استاندارد گرفته تا ضربه های API تا کدهای سفارشی پایتون را شامل می شود. ترانسفورماتورها به بندهای WHERE اولیه SQL محدود نمی‌شوند، زیرا می‌توانید کد پایتون را بنویسید که بیشتر از فیلتر کردن انجام می‌دهد، زیرا داده‌ها در خط لوله جریان می‌یابند.

Basis تنها یک نمونه از ابزارهای خط لوله داده جدیدتر است که فرآیند پرس و جو را برای استخراج از بیش از یک منبع، فیلتر کردن با بیش از یک زبان و ارائه داده ها در بیش از یک شکل باز می کند. این چشم انداز توانایی گرفتن داده ها از تقریباً هر منبع و ارائه آن به تقریباً هر مصرف کننده است.