PrestoDB یک موتور جستجوی SQL توزیعشده و متنباز است که ویژه انجام جستجوهای تحلیلی سریع بر روی دادههای با حجم متفاوت طراحی شده است. این سیستم از منابع غیررابطهای مانند سیستم فایل توزیع شده و همچنین منابع داده رابطهای پشتیبانی میکند.
پرستو به دادهها در محل ذخیرهسازی آنها، بدون اینکه نیازی به انتقال دادهها به یک سیستم تحلیلی جداگانه باشد، دسترسی دارد. اجرای جستجو بهصورت موازی بر روی یک ساختار مبتنی بر حافظه خالص انجام میشود و بیشتر نتایج در عرض چند ثانیه ارائه میشوند. بسیاری از شرکتهای معروفی مانند Facebook، Airbnb، Netflix، Atlassian و Nasdaq از آن استفاده میکنند.
تاریخچه Presto
پرستو بهعنوان یک پروژه در Facebook برای جستجوهای تحلیلی تعاملی بر روی یک انبار داده ۳۰۰ پتابایتی که با خوشههای بزرگ Hadoop/HDFS ساخته شده بود، شروع شد. قبل از توسعه آن، Facebook از Apache Hive استفاده میکرد که در سال ۲۰۰۸ ایجاد شد تا نحوه ادغام SQL در اکوسیستم Hadoop را معرفی کند. Hive تأثیر قابل توجهی بر اکوسیستم Hadoop داشت و کارهای پیچیده جاوا را به جستجوهای ساده SQL تبدیل می کرد و توانایی اجرای کار در مقیاس بالا را داشت. با این حال، برای عملکرد سریع در جستجوهای تعاملی بهینهسازی نشده بود.
در سال ۲۰۱۲، گروه زیرساخت دادههای Facebook پرستو را توسعه داد؛ یک سیستم جستجوی تعاملی که میتوانست بهسرعت در مقیاس پتابایتی کار کند. این سیستم در بهار ۲۰۱۳ در سراسر شرکت معرفی شد. در نوامبر ۲۰۱۳، Facebook، پرستو را تحت مجوز نرمافزار Apache باز کرد و آن را برای دانلود در GitHub در دسترس قرار داد. امروزه، پرستو به یک انتخاب محبوب برای انجام جستجوهای تعاملی بر روی Hadoop تبدیل شده و از سوی Facebook و سایر سازمانها استفاده می شود. بیش از هزار کارمند در Facebook پرستو را پیاده سازی می کنند. آن ها روزانه بیش از ۳۰۰۰۰ جستجو انجام میدهند و یک پتابایت داده را پردازش میکنند.
طرز کار Presto
پرستو یک سیستم توزیعشده است که بر روی Hadoop اجرا میشود و از ساختاری مشابه سیستمهای مدیریت پایگاه داده پردازش موازی کلان (MPP) استفاده میکند. این سیستم دارای یک نود (گره) هماهنگکننده است که با چندین نود کارگر همزمان کار میکند. کاربران، جستجوی SQL خود را به نود هماهنگکننده ارسال میکنند که از یک موتور جستجو و اجرای سفارشی برای تفکیک، برنامهریزی و زمانبندی یک طرح جستجوی توزیعشده در میان نودها استفاده میکند. این سیستم بهگونهای طراحی شده است که از معانی استاندارد ANSI SQL پشتیبانی کند، از جمله جستجوهای پیچیده، تجمیعها، پیوندها، پیوندهای خارجی چپ/راست، زیر جستجوها، توابع پنجرهای، شمارشهای متمایز و صدکهای (Percentile) تقریبی.
پس از جمعکردن جستجوها، پرستو درخواست را طی مراحل مختلف در میان نودهای پایانی پردازش میکند. تمام پردازشها در حافظه انجام میشود و بین مراحل در شبکه بهصورت خطی منتقل میشود تا از هرگونه بار I/O غیرضروری جلوگیری شود. افزودن نودهای بیشتر به موازیسازی بیشتر و پردازش سریعتر کمک میکند.
برای اینکه پرستو در هر منبع دادهای قابلاستفاده باشد، با انتزاع ذخیرهسازی طراحی شده است تا ساخت اتصالات قابل افزونه آسان باشد. به همین دلیل، پرستو دارای اتصالات زیادی است، از جمله به منابع غیررابطهای مانند سیستم فایل توزیعشده Hadoop (HDFS)، Amazon S3، Cassandra، MongoDB و HBase و همچنین منابع رابطهای مانند MySQL، PostgreSQ ، Amazon Redshift، Microsoft SQL Server و Teradata. دادهها در محل ذخیرهسازی خود جستجو میشوند و نیازی به انتقال آنها به یک سیستم تحلیلی جداگانه نیست.
تفاوتهای بین Presto و Hadoop
پرستو یک موتور جستجوی SQL توزیعشده و متنباز است که برای جستجوهای سریع و تعاملی بر روی دادهها در HDFS و سایر منابع طراحی شده است. بر خلاف Hadoop/HDFS، پرستو دارای سیستم ذخیرهسازی مستقل نیست؛ بنابراین، مکمل Hadoop است و سازمانها هر دو را برای حل چالشهای وسیعتر تجاری به کار میبرند. پرستو میتواند با هر پیادهسازی از Hadoop نصب شود و در توزیع Amazon EMR Hadoop بستهبندی شده است.
کاربران Presto
پرستو در مقیاس بسیار بزرگ در بسیاری از سازمانهای معروف در حال استفاده است. شما میتوانید از آن در Facebook، Airbnb، Netflix، Atlassian، Nasdaq و غیره استفاده کنید. بیش از هزار کارمند پرستو را در Facebook پیاده سازی می کنند. آن ها روزانه بیش از ۳۰۰۰۰ جستجو انجام میدهند و یک پتابایت داده را پردازش میکنند. بهطور متوسط، Netflix روزانه حدود ۳۵۰۰ جستجو در خوشههای پرستو خود انجام میدهد .Airbnb ابزار اجرای جستجوی مبتنی بر وب به نام Airpal را ساخته که روی پرستو کار میکند. جامعه بزرگ کاربران پرستو را میتوان در این فروم و در صفحه پرستو در Facebook یافت.
پیادهسازی Presto در فضای ابر
پرستو یک بار کاری ایدئال در ابر است، زیرا ابر عملکرد، مقیاسپذیری، قابلیت اطمینان، دسترسپذیری و صرفهجویی اقتصادی خوبی را فراهم میکند. یک خوشه پرستو در عرض چند دقیقه راهاندازی میشود و نیازی به نگرانی درباره تأمین نود، راهاندازی خوشه، پیکربندی پرستو یا تنظیم خوشه نیست.