در [بخش اول] این مقاله مقدمه داشتیم بر بحث BigData و NoSQL. در این بخش به ادامه مطلب خواهیم پرداخت.
با توسعه قابلیت های پردازشی، نیاز به ثبت و تحلیل حجم وسیع داده ها اساسی شد. آنچه پیش از این تنها از پس سوپر کامپیوترها و شرکت های کمی بر می آمد، اکنون به لطف تکنولوژی Cloud Computing برای همه در دسترس و میسر است. انقلاب Big Data از شرکت های پیشتاز مانند Google, Facebook و یاهو و آمازون شروع شد. این شرکت ها نیاز به تحلیل داده های بسیار عظیم به صورت آنی داشتند. لذا هرکدام به صورت جداگانه چارچوب هایی را طراحی کردند. این تکنولوژی ها می توانند حجم عظیمی از اطلاعات را در کسری از ثانیه به صورت کارآمد و کم هزینه بازیابی و پردازش کنند. برای مثال شاید به بالای صفحه نتایج گوگل دقت کرده باشید که مثلاً می نویسد "150.000.000 نتیجه در 0.01 ثانیه به دست آمد". شرکتهای بزرگ اینترنت، از جمله گوگل (BigTable)، آمازون (Dynamo)، لینکدین (Project Voldemort)، فیس بوکCassandra و HBase سورس فورژ (MongoDB)، اوبونتو (CouchDB) طراحی و راه اندازی گروه پایگاه داده NoSQL را بر عهده دارند. بخش قابل توجهی از این پروژه ها متن باز و آزاد است. در این قسمت چند نمونه از این پلتفرم ها را بررسی خواهیم کرد.
این پلتفرم توسط گوگل طراحی شده. هدف از طراحی این پلتفرم اجرای کارآمد مجموعه ای از توابع و دستورات روی حجم عظیمی از اطلاعات به صورت دسته ای بود. این پلتفرم دارای دو جزء است: جزء اول که Map نام دارد و وظیفه محول شده را روی تمام سیستم های توزیع شده به صورت کارامدی پخش و مدیریت می کند. اگر خطایی برای یکی از سرورها پیش آید این قسمت خطارا مدیریت می کند و مانع افساد عملیات می شود. این قسمت وظایف را به گونه ای عادلانه بین سرورها تقسیم بندی می کند تا به سرورها به یک اندازه بار تحیمل شود (این بحث را Load Balancing) می گویند.جزء دوم نیز Reduce است که پس از اتمام عملیات، نتایج را از سرورهای مختلف جمع آوری می کند و به شکل معنی داری در اختیار ما قرار می دهد.
این پلتفرم نیز توسط شرکت محبوب گوگل طراحی شده. این سیستم یک سیستم ذخیره سازی توزیع شده است، و برای ذخیره حجم عظیم از اطلاعات ساختیافته روی سیستم های توزیع شده استفاده می شود. برخلاف پایگاههای داده رابطه ای BigTable یک سیستم توزیع شده چندبعدی پایدار و از نوع Stored Map است. و برای ذخیره داده های حجیم روی چند سرور استفاده می شود.
یک چارچوب نرم افزاری است که توسط شرکت Appache طراحی شده و از MapReduce و BigTable اشتقاق یافته. این پلتفرم به برنامه های مبتنی بر MapReduce اجازه اجرا روی کلاسترهای وسیعی از سرورها را می دهد. این چارچوب طراحی شد تا کار پردازش را به به صورت موازی بین سرورها انجام دهد و تاخیر ناشی از موازی سازی را به حداقل برساند. این پلتفرم دو قسمت اصلی دارد. بخش File System که پتابایت ها اطلاعات را می تواند ذخیره و مدیریت کند و موتور MapReduce که نتایج را به صورت دسته ای پردازش می کند.
در تکنولوژی BigData معمولا از پایگاه های داده از نوع NoSQL استفاده می شود. در این قسمت مزایای استفاده از این پایگاه های داده را نسبت به پایگاه های داده رابطه ای ذکر خواهیم کرد. اولین و مهم ترین مزیت عدم طراحی شمای (الگو) خاص برای داده هاست و در این سیستم، داده های ورودی می توانند هر موقع تغییر نوع پیدا کرده و سیستم خودش را با آن مطابق می کند. دومین مزیت قابلیت چند بخشی شدن خودکار و تشخیص هوشمند یکپارچگی بوده که در SQL طراح باید چند سرور بودن را در طراحی خود حتما لحاظ می کرد و بر طبق آن شمای پایگاه داده را پیاده سازی می کرد ولی در سیستم NoSQL چند سرور بودن بخشی از روال کاری است.
سومین مزیت هم که در سیستم قبلی حرفی از آن زده نشده بود وجود Cache برای افزایش سرعت بازیابی اطلاعات می باشد که همانند پردازنده در مواجه شدن با منابع مشابه و یکسان که آنها را در Cache نگهداری می کرد در سیستم NoSQL هم داده های پراستفاده در Cache نگهداری می شوند. پس استفاده از NoSQL باعث افزایش سرعت در طراحی و اجرای پایگاه داده شده و همچنین محدودیت های قالب قدیمی را از میان برمی دارد که بیشتر مورد نیاز دنیای امروز و آینده اطلاعات و داده ها می باشد. به صورت کلی این سیستم ها کاملاً با مفاهیم BigData خود را وقف داده اند و بسیار مناسب پردازش ابری هستند.
همانند هر سیستمی NoSQL هم معایبی دارد و شاهکلیدی برای رفع تمامی مشکلات پایگاه داده ای نمی باشد، یکی از مهمترین معایب نوظهور بودن و نبود استاندارد کلی و خاص برای پیاده سازی و طراحی آن می باشد که باعث شده هر توسعه دهنده با توجه به دانش خود و نیازهای که دارد دست به ساخت شیوه ای با طرح NoSQL نماید که بدلیل تازگی آن دارای معایب متعددی هم خواهد بود. از معایب دیگر NoSQL منحصر بودن برای داده های امروزی است، که بیشتر بصورت ابری (Cloud Data)نگهداری می شود است و برای داده های قدیمی آنچنان مانند SQL نمی تواند نظم و ترتیب داشته باشد.
گمان می کنم تا کنون اهمیت BigData را به خوبی درک کرده باشید. در طول این مقاله هرازگاهی از نیاز سرعت صحبت کردیم؛ و گفتیم که اکثر پایگاه های داده رابطه ای امروزی پاسخگوی این سرعت بسیار بالا نیستند. از طرفی از حجم زیاد داده نیست سخن به میان آوردیم که بازهم دیتابیس های معمول توان ذخیره این میزان داده را به صورت عملی ندارند. پس از آن نیز از تنوع حرف زدیم و گفتیم که پایگاه های داده رابطه ای تنها قادر به ذخیره داده های ساختیافته و از پیش تعریف شده هستند. همین موارد کافیست که اهمیت این مقوله را برای شما توجیه کند اما برای درک بهتر، اطلاعات مفصل تری را خواهیم داد.
همانطور که قبلاً نیز ذکرشد، زبان SQL و پیادهسازیهای مختلف آن مانند MySQL ، SQL Server، Oracle و... در دهههای متمادی برای تمام نیازهای ذخیرهسازی و بازیابی داده کاربران و توسعهدهندگان یک راه حل اساسی بودهاند. اما در سال 2010، نیازمندیهاییمطرح شده و مورد توجه قرارگرفتند که با استفاده از مدل رابطهای سنتی قابل دستیابی نبودند. از آنجا که مسائل جدید به ابزارهای جدید نیازدارند، مجموعهای بزرگ از ابزارها پا به عرصه وجود گذاشته و موردتوجه بسیاری قرارگرفتند. دسترسپذیری بالا، مقیاسپذیریافقی، قابلیت تکثیر (Replication)، طراحی بدون Schema و قابلیت Map Reduce از جمله زمینههایی هستند که توسط مجموعهای جدید از پایگاههای داده و تحت عنوان کلی NoSQL در حال توسعه و آزمایش هستند تا نیازهای روزافزون بازار را پاسخ گویند.
برای بسیاری از کاربردهای معمولی، هنوز پایگاههای دادهای سنتی بهترین راه حل هستند و نباید آنها را تمام شده تصور كرد. در واقع NoSQL یک پدیده نوظهور است و جهت حل مشکلات امروزی و نوظهور مطرح شده، اما اگر بخواهیم مشکلات و مسائل عادی (مانند سیستم اتوماسیون یک اداره) را حل کنیم بهترین گزینه همان پایگاه های داده رابطه ای خواهند بود. در بسیاری از موارد، انتخاب یک پایگاه داده NoSQL برای کاربردهای معمولی و روزمره موجب افت شدید عملکرد و عدم پایداری مجموعه و قابلیت اطمینان بسیار پایین میشود. همچنین به علت تعدد ابزارهای توسعهداده شده در این زمینه، گاهی اوقات تشخیص محدودیتها و مزیت ها در استفاده از یک ابزار، بسیار مشکل است؛ و انتخاب راه حل مناسب در محیطهای رابطهای یا غیر رابطهای یک یا چند سروری، سردرگم کننده خواهد بود. در این جا قصد داریم شما را با کاربردهای مناسب BigData آشنا کنیم؛ و شما را در انتخاب صحیح تکنولوژی یاری دهیم. برای انتخاب صحیح تکنولوژی مورد استفاده کافیست از مثلث Nathan Hurst استفاده کنیم. این مثلث در شکل زیر مفصلا نمایش داده شده.
در این دیاگرام سه گوشه اصلی نشانگر ثبات (Consistency)، در دسترس بودن (Availability) و قابلیت بخش بخش سازی (Partition Tolerance) هستند.Consistency در اینجا یعنی همه کلاینتها همواره به دادههای مشابه دسترسی داشته باشند.در دسترس بودن یا Availability یعنی همه کلاینتها در هر موقعیتی امکان خواندن و نوشتن را داشته باشند.قابلیت بخش بخش سازی یا Partition Tolerance نیز به معنای این است که سیستم کلی بتواند در تمام بخشهای شبکه فیزیکی و روی سرورهای مختلف در مکانهای جغرافیایی دور از هم کار کند.
بر اساس نظریه CAP، تنها دو عنصر از این سه عنصر در سیستمهای واقعی قابل انتخاب هستند و بر همین اساس، برای داشتن هر جفت مشخصه، میتوان از پایگاه داده ای که روی هر یک از ضلع ها آمده استفاده کرد. همانطور که در راهنمای این تصویر می بینید، پیشنهادهای مختلف براساس رنگشان دسته بندی شده اند، برای مثال گزینه های با رنگ قرمز از نوع پایگاه های داده رابطه ای هستند و گزینه های آبی از نوع جفت Key-Value می باشند.
اگر نیاز به پایگاه های داده با دردسترس پذیری بالا هستید که همیشه و از هر مکانی قابل دسترسی باشند گزینه های سمت راست مثلث را به شما توصیه می کنیم. این موارد به شدت در مدل سنتی با کمبودهایی مواجه هستند و پایگاههای دادهای NoSQL از عهده اجرای آنها بهخوبی برمیآیند. چنین سیستمهایی که از طریق مجموعههای خوشهسازی شده و با پیکربندی Redundant پیاده سازی میشوند، بیش از هر چیز به مقیاس پذیری افقی و امکان توسعه روی ماشینهای مختلف شبکه نیاز دارند. با مدلهای ارائه شده جدید توسط پایگاههای دادهای مانند Riak و Cassandra انطباق بیشتری داشته و کارایی بالاتری ارائه میكنند. دادههایی که باید در نقاط مختلف جغرافیایی با هم همگامسازی شوند:
چنین دادههایی که در کلاسترهای مختلف یک شبکه بزرگسازمانی با دفاتر مختلف پراکنده در سطح جغرافیایی وسیع موجودند و نیاز است تا همواره و با بالاترین سرعت و کمترین هزینه ممکن با هم همگام سازی شوند، به خوبی در مجموعههای سنتی رابطهای قابل پیادهسازی نیستند و در صورت انجام این کار، هزینههای بسیاری را در برخواهند داشت. در نقطه مقابل، پایگاه دادهای Memcached به خوبی از عهده اجرای چنین عملیاتی با کمترین هزینه و بالاترین کارایی برمیآید. در این حالت باید پایگاه های داده موجود در قاعده مثلث را انتخاب کنید.
برخلاف پایگاه داده های رابطه ای که همگی از یک مدل رابطه ای پیروی می کنند، انواع مختلفی از پایگاه داده های NoSQL موجود می باشند که هرکدام برای ذخیره داده ها و کاربردهای خاصی استفاده می شوند. در این بخش شما را با انواع این پایگاه های داده و کاربرد هرکدام آشنا می کنیم.
این پایگاه داده ها اساسی ترین نوع پایگاه های داده NoSQL هستند. این پایگاه های داده همچون یک دیکشنری عمل می کنند، در این پایگاه های داده نه ساختاری وجود دارد و نه رابطه ای. در این معماری تنها یک کلید داریم (که همچون کلید اصلی در پایگاه های داده رابطه ای عمل می کند) و یک مقدار داریم که مقدار معادل آن کلید را باز می گرداند. معمولاً برای نگهداری اطلاعات ساده استفاده می شود ولی گاهی اوقات ممکن است اطلاعات ذخیره شده بسیار هم پیچیده باشند.
مزایا:
نمونه های معروف: Redis, MemcacheDB
پایگاه های داده ستونی با کمی توسعه پایگاه های داده KeyValue بوجود آمدند. این سیستم در واقع بجای یک جفت کلیدمقدار، برای هر رکورد در خود چندین جفت کلید/مقدار می تواند داشته باشد. این پایگاه های داده نیازی به ساختار از پیش تعیین شده برای اطلاعات خود ندارند و هر رکورد می تواند چندین ستون مختلف با صفات متفاوت داشته باشد. این معماری را مانند یک آرایه چند بعدی (مکعبی) در نظر بگیرید که برای هر کلید اجازه پیوست کردن هزاران نوع جفت مقدار متفاوت را می دهد. این پایگاه های داده برای ذخیره میزان وسیع و متفاوتی از رکوردها با مقادیر بسیار وسیع از مقادیر در این دیتابیس خیلی خوب جواب میدهد.
نمونه های معروف: Cassandra و HBase.
معماری این پایگاه داده ها همانند ستونی است، با این تفاوت که امکان ذخیره با عمق بیشتری (از نظر تودرتو بودن جفت کلیدها) را می دهد. این معماری امکان ذخیره سند در سند در سند در.... را می دهد. هر گونه اطلاعاتی در این معماری می توانند یک سند باشند، از متن ساده گرفته تا یک ایمیل یا عکس و ... . اما با وجود قدرت بسیار بالایی که این نوع پایگاه های داده نسبت به موارد قبلی دارند، اما خواندن و نوشتن در آنها بسیار وقت گیر است. به دلیل اینکه میزان بی شماری سند را می توان درون یکدیگر قرار داد، عمل خواندن باعث می شود تمام این اسناد بازیابی شوند و در هنگام نوشتن هم تمام این توشه دوباره نوشته شود. این باعث می شود کارائی این پایگاه های داده پایین بیاید. این پایگاه داده ها برای ذخیره مقدار زیادی داده های بی ربط مفیداند.
نمونه های معروف:Couchbase، CouchDB، MongoDB.
در نهایت نوع آخر پایگاه های داده NoSQL را معرفی می کنیم که البته جالب ترین نوع آنها هم هست. این پایگاه داده از نوع Graph Based است. این نوع معماری به داده ها از دیدی کاملا متفاوت نسبت به مدلهای قبلی نگاه می کند. این مدل، داده ها را مانند یک گراف به هم مرتبط می کند، و ساختار یک درخت یا گراف را را به آنها می دهد. در این پایگاه داده، رکوردها هنگام درج در پایگاه داده توسط یک یا چند صفت به هم مرتبط می شوند؛ لذا انجام عملیات ریاضی و اتسنتاج وقایع از آنها بسیار ساده تر از مدل های دیگر است.
نمونه های معروف:OrientDB، Neo4J.
امیدوارم از این بحث نیز استفاده لازم را برده باشید. سپاسگذارم!!!
نویسنده : محمود جنامی
منبع : انجمن تخصصی فناوری اطلاعات ایران
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود