معماری و نوع پرس و جوها (Queries) در جریان داده‌ها

مدرس: مسعود کاویانی

در درس گذشته به این موضوع پرداخته شد که جریان داده‌ها چیست. در این درس می‌خواهیم ببینیم که چه نوع درخواست‌ها و پرس و جو‌هایی را می‌توان توسط الگوریتم‌ها و روش‌های جریان داده‌ها انجام داد. در واقع الگوریتم‌های جریان داده‌ای دو نوع پرس و جو یا همان Query را می‌توانند پاسخ دهند. پرس و جوهای مستقل که به آن‌ها پرس و جوهای Standalone می‌گویند و پرس و جوهای ad-hoc (که میتوان آن‌ها را خودمختار ترجمه کرد).

این شکل قسمت‌های مختلفی دارد. در این درس به دو نوع مختلف پرس و جوها (Standalone و ad-hoc) می‌پردازیم. گفتیم که دو نوع پرس و جو در بحث جریان داده‌ها داریم. اجازه بدهید با یک مثال این درس را جلو ببریم. اگر درس قبل را خوانده باشید، یک مثال درباره اقیانوس‌ها داشتیم. فرض کنید ما ۱میلیون حسگر یا همان Sensor مختلف در دریا قرار داده ایم و این حسگرها هر کدام در هر ثانیه ۱۰مرتبه دمای آب منطقه خود را برای ما ارسال می‌کنند. ما می‌خواهیم بیشترین دمای ثبت شده در اقیانوس را داشته باشیم. خوب این کار ساده به نظر می‌رسد. اولین بار که یک حسگر دمای خود را فرستاد، این عدد ذخیره می‌شود و هر بار که حسگر‌ها یک دمای جدیدتر فرستاد، این دما با دمای دمای ذخیره شده مقایسه می‌شود و اگر دمای جدید بیشتر بود، جایگزین دمای قبلی می‌شود. به این صورت همیشه بیشترین دما ذخیره می‌شود و یک کاربر با مشاهده این مقدار ذخیره شده، می‌تواند بفهمد که بیشترین دما چقدر بوده است. یا فرض کنید می‌خواهید میانگین دماهای ارسال شده را در سطح اقیانوس محاسبه کنید. برای این کار بایستی تعداد دماهای ارسال شده و همچنین جمع آن‌ها را داشته باشید. پس برای این کار به دو متغیر احتیاج داریم، n تعداد دماهای دریافت شده تا الان است و s که جمع دماهای دریافت شده تا الان. هر بار که داده‌ی جدید رسید متغیر n یکی اضافه می‌شود و متغیر s نیز به اندازه دمای ارسال شده اضافه می‌شود. به همین ترتیب هر بار که میانگین دما را خواستیم، n را تقسیم بر s میکنیم و سریعا به کاربر نمایش می‌دهیم. مشاهده می‌کنید که در واقع ما یک خلاصه‌ای از داده ها را جهت انجام یک سری پرس و جو خاص (مثلا همین میانگین کل دما) ذخیره می‌کنیم.

مثال‌های گفته شده تا حالا یک سری مثال از پرس و جوهای مستقل (Standalone) بود. این پرس و جو‌ها به سرعت و همیشه قابل اجرا بوده و می‌توان پاسخ آن‌ها را سریع دریافت کرد. این در حالی است که نوع دیگری از پرس و جو‌ها وجود دارد که داده‌ها باید برای پاسخ به آن‌ها آماده شوند. این دست از پرس و جوها درباره وضعیت فعلی داده‌ها هستند و به آن‌ها پرس و جوهای خودمختار یا ad-hoc گفته می‌شود.. برای مثال فرض کنید یک وب‌سایت موتور جستجو دارید هر کاربر در روز چندین عبارت را در آن جستجو می‌کند. یک پرس و جوی ad-hoc می‌تواند این باشد که عبارات یکتا همراه با تعداد تکرار آن‌ها که در بازه‌ی زمانی یک ماه اخیر جستجو شدند، کدام‌ها بوده‌اند؟ برای این کار احتمالا بایستی یک حجم عظیمی از داده‌ها ذخیره شود تا بتوان به این دست از پرس و جو‌ها پاسخ داد. یکی از تکنیک‌هایی که در بسیاری از الگوریتم‌های این حوزه مشاهده می‌شود را می‌توان این دانست که یک sliding window بایستی برای داده‌ها داشته باشیم. به این معنی که داده‌های در جریان را در یک سری بازه زمانی ذخیره کرده تا بتوانیم به این دست از پرس و جوها پاسخ دهیم. برای همین مثال بالا، می‌توان پرس و جوها را در یک بازه زمانی t، یک ماهه ذخیره کرد و هر بار که داده‌ی جدید آمد، از آخر داده‌ها (یعنی آن‌هایی که بیشتر از یک ماه پیش ذخیره شده اند) حذف کرد. به این صورت می‌توان یک sliding window برای داده‌ها ایجاد کرد و از آن استفاده نمود.

منابع این بحث و اطلاعات بیشتر

» فصل چهارم کتاب Mining Of Massive Datasets دانشگاه استنفورد

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *