پریستو یا PrestoDB چیست؟
پریستو (یا PrestoDB) یک موتور متنباز و توزیعشده اجرای کوئری SQL است که از پایه برای اجرای سریع کوئریهای تحلیلی بر روی دادههایی با هر اندازه طراحی شده است. این ابزار هم از منابع غیررابطهای مانند Hadoop Distributed File System (HDFS)، Amazon S3، Cassandra، MongoDB و HBase پشتیبانی میکند و هم از منابع داده رابطهای مانند MySQL، PostgreSQL، Amazon Redshift، Microsoft SQL Server و Teradata.
پریستو میتواند دادهها را در همان جایی که ذخیره شدهاند کوئری کند، بدون نیاز به انتقال آنها به یک سیستم تحلیلی جداگانه. اجرای کوئری به صورت موازی و با معماری کاملاً مبتنی بر حافظه انجام میشود و اغلب نتایج در چند ثانیه بازگردانده میشوند. این ابزار توسط شرکتهای شناختهشدهای مانند Facebook، Airbnb، Netflix، Atlassian و Nasdaq استفاده میشود.
تاریخچه پریستو
پریستو ابتدا بهعنوان یک پروژه در فیسبوک آغاز شد تا بتواند کوئریهای تحلیلی تعاملی را روی یک انبار داده ۳۰۰ پتابایتی، که با کلاسترهای بزرگ مبتنی بر Hadoop/HDFS ساخته شده بود، اجرا کند.
پیش از ساخت پریستو، فیسبوک از Apache Hive (که خود آن را در سال ۲۰۰۸ ایجاد و عرضه کرده بود) استفاده میکرد تا امکان اجرای کوئری با سینتکس SQL را به اکوسیستم هدوپ بیاورد. Hive تأثیر زیادی بر اکوسیستم هدوپ گذاشت، چون کار نوشتن وظایف پیچیده MapReduce در جاوا را به کوئریهای شبیه SQL ساده کرد، در حالی که توانایی اجرای آنها در مقیاس بالا را داشت. با این حال، Hive برای سرعت بالای موردنیاز در کوئریهای تعاملی بهینه نشده بود.
در سال ۲۰۱۲، گروه زیرساخت داده فیسبوک پریستو را بهعنوان یک سیستم کوئری تعاملی که بتواند در مقیاس پتابایت سریع عمل کند، ساخت. این سیستم در بهار ۲۰۱۳ در سراسر شرکت به کار گرفته شد. در نوامبر ۲۰۱۳، فیسبوک پریستو را تحت مجوز Apache Software License متنباز کرد و آن را در گیتهاب برای عموم قرار داد. امروزه پریستو به یک انتخاب محبوب برای اجرای کوئریهای تعاملی روی هدوپ تبدیل شده و مشارکتهای زیادی از فیسبوک و سایر سازمانها دریافت کرده است. نسخه فیسبوک از پریستو توسط بیش از هزار کارمند استفاده میشود که روزانه بیش از ۳۰,۰۰۰ کوئری اجرا کرده و روزانه یک پتابایت داده پردازش میکنند.
پریستو چگونه کار میکند؟
پریستو یک سیستم توزیعشده است که روی هدوپ اجرا میشود و معماری آن شبیه به یک سیستم پایگاه داده MPP (پردازش انبوه موازی) کلاسیک است. این سیستم یک نود هماهنگکننده (Coordinator) دارد که با چندین نود کارگر (Worker) در هماهنگی کار میکند.
کاربر، کوئری SQL را به هماهنگکننده ارسال میکند. هماهنگکننده با استفاده از یک موتور سفارشی برای تحلیل و اجرای کوئری، درخواست را پردازش کرده، طرح کوئری توزیعشده را آماده و زمانبندی میکند و سپس آن را بین نودهای کارگر اجرا میکند. پریستو از استاندارد ANSI SQL پشتیبانی میکند، شامل:
-
کوئریهای پیچیده
-
توابع تجمعی (Aggregations)
-
انواع مختلف Join شامل Left/Right Outer Join
-
زیرکوئریها (Sub-queries)
-
توابع پنجرهای (Window functions)
-
شمارش متمایز (Distinct counts)
-
درصدهای تقریبی (Approximate percentiles)
پس از کامپایل کوئری، پریستو درخواست را به چندین مرحله بین نودهای کارگر تقسیم میکند. تمام پردازشها در حافظه انجام شده و از طریق شبکه به صورت پایپلاین بین مراحل منتقل میشوند تا از هرگونه سربار ورودی/خروجی غیرضروری جلوگیری شود. افزودن نودهای کارگر بیشتر، میزان موازیسازی و سرعت پردازش را افزایش میدهد.
برای اینکه پریستو بتواند به هر منبع داده متصل شود، با یک لایه انتزاعی ذخیرهسازی (Storage Abstraction) طراحی شده است که ساخت کانکتورهای افزونهای را آسان میکند. به همین دلیل، پریستو کانکتورهای زیادی دارد، از جمله برای منابع غیررابطهای مثل HDFS، Amazon S3، Cassandra، MongoDB و HBase، و همچنین منابع رابطهای مانند MySQL، PostgreSQL، Amazon Redshift، Microsoft SQL Server و Teradata. دادهها همان جایی که ذخیره شدهاند کوئری میشوند و نیازی به انتقال آنها به سیستم تحلیلی دیگر نیست.
پریستو و هدوپ (Hadoop) چه تفاوتهایی دارند؟
پریستو یک موتور متنباز و توزیعشده اجرای کوئری SQL است که برای کوئریهای سریع و تعاملی روی دادههای موجود در HDFS و منابع دیگر طراحی شده است. بر خلاف Hadoop/HDFS، پریستو سیستم ذخیرهسازی اختصاصی خود را ندارد. بنابراین، پریستو مکمل هدوپ است و سازمانها معمولاً هر دو را با هم استفاده میکنند تا طیف وسیعتری از نیازهای تجاری را پوشش دهند. پریستو را میتوان با هر پیادهسازی هدوپ نصب کرد و در توزیع Hadoop موجود در Amazon EMR نیز بستهبندی شده است.
چگونه میتوان پریستو را در فضای ابری اجرا کرد؟
پریستو یک گزینه ایدهآل برای اجرای بارکاری در ابر است، زیرا ابر عملکرد، مقیاسپذیری، قابلیت اطمینان، دسترسپذیری و صرفهجویی گسترده در مقیاس را فراهم میکند. شما میتوانید یک کلاستر پریستو را در عرض چند دقیقه راهاندازی کنید، بدون اینکه نیاز باشد نگران تهیه نودها، راهاندازی کلاستر، پیکربندی پریستو یا بهینهسازی کلاستر باشید.
