مطلب ۳ (قسمت اول) : مقایسه با دیگر سیستم ها
روش MapReduce به یک نوع مکانیزم brute-force شباهت دارد که در آن به ازای هر درخواست کل مجموعه داده و یا حداقل قسمت قابل توجهی از آن مورد پردازش قرار می گیرد. MapReduce پردازشگری است که می تواند درخواست ها را بصورت گروهی و یا موردی بروی داده با سرعت قابل قبولی اجرا نماید. او نگاه افراد را نسبت به داده تغییر می دهد و این فرصت را فراهم می سازد تا با داده کارهای جدیدی انجام دهند.
برای مثال،Mailtrust ، برای پردازش لاگ ها از هدوپ استفاده نموده است. این شرکت تصمیم گرفته بود تا کاربران خود را در موقعیت های مختلف جغرافیایی مورد ارزیابی قرار دهد.
به نقل از Mailtrust:
با توجه به ارزشمند بودن این نوع داده، ما یک عملیات ماهانه MapReduce ایجاد کرده ایم تا از نتایج آن به منظور تصمیم گیری در مورد اضافه کردن میل سرور های جدید در نقاط مختلف جغرافیایی استفاده نماییم.
سیستم مدیریت پایگاه داده رابطه ای
چرا نمی توان از پایگاه داده رابطه ای با هاردیسک زیاد در تحلیل های گروهی بزرگ استفاده نمود؟ چرا MapReduce نیاز می باشد؟
جواب این سوالات را می توان در هاردیسک ها یافت: هر اندازه زمان جستجوی (Seek Time) داده بهتر شود باز هم به سرعت انتقال (Transfer Rate) آن نمی رسد. عملیات جستجو فرآیندی است که در آن head از یک نقطه به نقطه دیگر به جهت خواندن و نوشتن جابجا می شود.
اگر هنگام خواندن و یا نوشتن داده نیاز به جستجوی زیادی باشد، زمانی که صرف می شود خیلی بیشتر از زمانی است که همان داده یکباره به هاردیسک منتقل شود. به عبارت دیگر، پایگاه داده رابطه ای برای ویرایش کردن تعداد نه خیلی زیادی رکورد مناسب می باشد، اما در مقابل اگر تعداد رکورد ها خیلی زیاد باشد پایگاه داده رابطه ای در مقایسه با MapReduce که از مکانیزیم "مرتب سازی و تلفیق" استفاده می نماید گزینه خوبی نخواهد بود.
در موارد مختلف، MapReduce می تواند به عنوان یک مکمل در کنار پایگاه داده رابطه ای ظاهر شود. (تفاوت های این دو سیستم در جدول ذیل بیان شده است.) MapReduce برای تحلیل موضوعاتی که در آنها حجم بالایی از داده مورد استفاده قرار می گیرد، کاربرد دارد. اما پایگاه داده رابطه ای برای واکشی و یا ویرایش یک بخش مشخص داده مناسب عمل می نماید.MapReduce در سیستم هایی کاربرد دارد که در آن داده یکبار نوشته، اما بارها خوانده می شود، در حالی که پایگاه داده رابطه ای برای آن دسته از اطلاعات که دائما در حال تغییر هستند خوب به نظر می رسد.
|
پایگاه داده رابطه ای |
MapReduce |
سایز داده |
گیگابایت |
پتابایت |
دسترسی |
تعاملی و یا گروهی |
گروهی |
تغییرات |
خواندن و نوشتن نامحدود |
نوشتن یک بار، خواندن زیاد |
ساختار |
شمای غیر قابل تغییر |
شمای پویا |
یکپارچگی |
بالا |
پایین |
رشدپذیری |
غیر خطی |
خطی |
"نوع ساختار" داده، دیگر تفاوتی است که بین MapReduce و پایگاه داده رابطه ای وجود دارد. داده ساختار یافته داده ای است که دارای فرمت از پیش تعیین شده مشخصی می باشد، مانند فایل XML و یا جداول پایگاه داده رابطه ای که از یک شمای از پیش تعیین شده پیروی می نمایند. اینجا قلمرو پایگاه داده رابطه ای می باشد. داده نیمه ساختار یافته، به عبارت دیگر، قالب سفت و سختی ندارد، البته ممکن است از شمای از پیش تعریف شده اختیاری (به عنوان یک راهنما برای رسیدن به فرمت داده)، استفاده نماید: برای مثال، یک Spreadsheet، که در آن ساختار متشکل است از تعدادی cell که در کنار هم قرار گرفته (Grid)، اگر چه هر cell به تنهایی می تواند هر نوع داده را در خود نگهداری کند. داده فاقد ساختار از هیچگونه فرمتی تبعیت نمی کند، برای مثال، متن ساده و یا تصویر. از آنجایی که MapReduce به منظور تفسیر داده در زمان پردازش طراحی شده است، لذا در بخش داده فاقد ساختار و یا نیمه ساختار یافته بسیار خوب عمل می نماید. به عبارت دیگر، ورودی های "Key & Value" که مختص MapReduce می باشند از ویژگی های ذاتی داده نیستند، بلکه توسط فردی که عملیات تحلیل را انجام می دهد انتخاب می شوند.
به منظور حفظ یکپارچگی و جلوگیری از تکراری شدن داده رابطه ای، اغلب آن را نرمال سازی می نمایند. از آنجایی که خواندن یک رکورد در MapReduce می تواند به صورت غیر محلی صورت پذیرد، در نتیجه نرمال سازی برای او ایجاد مشکل می نماید،
یک فایل لاگ متشکل است از تعدادی رکورد که در آن نرمال سازی مفهومی ندارد. برای مثال، اگر یک کاربر چندین بار باعث ایجاد لاگ شود، به ازای هر بار اطلاعات آن در یک رکورد جدید تکرار می شود. به همین دلیل این نوع فایل یکی از بهترین مواردی است که MapReduce می تواند بروی آن اجرا شود.
MapReduce یک مدل برنامه نویسی است که به صورت خطی رشد می کند. یک برنامه نویس دو تابع یکی برای نگاشت (map) و دیگری برای کاهش (reduce) می نویسد. هر کدام از آنها نگاشتی از یک مجموعه "Key & Value" برای دیگری ایجاد می نماید.
این توابع مستقل از حجم داده و یا محدوده کلاستر پردازش کننده، نوشته می شوند. بنابراین بدون هیچگونه تغییری می توانند با هر میزان داده (کم و یا زیاد) به اجرا در آیند. مهمتر آنکه، اگر حجم داده ورودی را دو برابر کنیم، منطقی است که سرعت پردازش دو برابر کاهش یابد. اما اگر در کنار آن اندازه کلاستر را هم دو برابر کنیم، سرعت پردازش مثل حالت اول خواهد شد. این قضیه در مورد پایگاه داده رابطه ای صدق نمی کند.
با گذشت زمان، تفاوت های بین MapReduce و پایگاه داده رابطه ای کم کم از بین می رود. بطوریکه می توان انتظار داشت برخی از ایده های MapReduce در پایگاه داده رابطه ای ایجاد شوند و همچنین از طرف مقابل، امکان تولید Query های سطح بالا در MapReduce باعث می شود تا برنامه نویسان پایگاه داده رابطه ای مشتاق به استفاده از آن گردند.
Hadoop: The Definitive Guide by Tom White
استفاده از این مطلب با ذکر منبع بلامانع می باشد.
مثلا در مطلب زیر:
"از آنجایی که خواندن یک رکورد در MapReduce می تواند به صورت غیر محلی صورت پذیرد، در نتیجه نرمال سازی برای او ایجاد مشکل می نماید"
خواندن یک رکورد بصورت غیر محلی یعنی چه؟موفق باشی.