اصطلاح NoSQL نامی عمومی است که به مجموعهای از پایگاههای داده اطلاق میشود که از زبان پرسوجوی ساختیافته SQL (سرنام Structured Query Language) یا مدل داده رابطهای استفاده نمیکنند. گاهی این اصطلاح را مخفف Not Only SQL میدانند تا تأکید کنند که طرفداران انواع پایگاههای داده غیررابطهای معتقدند که پایگاههای داده رابطهای سنتی تنها راه موجود برای ذخیرهسازی داده نیستند، اما این به آن معنا نیست که به خودی خود انتخاب نادرستی باشند.
جنبش NoSQL چیست؟
این اصطلاح نخستینبار توسط اریک اوانس از Rackspace به کار رفت. او که یکی از توسعهدهندگان کاساندرا است، پس از آن از به کار بردن این اصطلاح خودداری میکند و به جای آن مایل است اصطلاح BigData یا دادههای عظیم را به کار ببرد تا این گروه از پایگاههای داده را نه براساس چیزی که نیستند (سازگار با SQL) بلکه براساس کاری که میکنند (مدیریت مقادیر عظیم داده) تعریف کند. دوره استفاده از این اصطلاح کموبیش به پایان رسیده است چرا که بسیار گیجکننده است و به نظر میرسد باعث میشود راجع به مجموعهای از پایگاههای داده بحث کنیم که در عمل میزان شباهت میان اهداف، ایدههای طراحی و قابلیتهای آنها بسیار اندک است. بهتر است بگذاریم کاساندرا همان کاساندرا، CouchDB همان CouchDB و Riak همان Riak بماند.
اهمیت و کاربرد
عبارت NoSQL یک مفهوم برای مشخصسازی یک موج خلاقانه است که در دنیای پایگاههای دادهای در حال وقوع است. با مطرح شدن این مفهوم، طوفانی از تبادل نظر، هیجان و بحث و گفتوگو در محافل فنی به راه افتاد که به یقین تا مدتها باقی خواهد ماند. اما چرا NoSQL این همه سروصدا به پا کرده است؟ این مفهوم برای یک توسعهدهنده برنامههای کاربردی چه معنایی دارد؟ همانطور که قبلاً نیز ذکرشد، زبان SQL و پیادهسازیهای مختلف SQL RDBMS Relational Database Management Systems مانند MySQL ،PostgreSQL ،Oracle و… دهههای متمادی برای تمام نیازهای ذخیرهسازی و بازیابی داده کاربران و توسعهدهندگان یک راه حل اساسی بودهاند. اما در سال 2010، نیازمندیهاییمطرح شده و مورد توجه قرارگرفتند که با استفاده از مدل رابطهای سنتی قابل دستیابی نبودند. از آنجا که مسائل جدید به ابزارهای جدید نیازدارند، مجموعهای بزرگ از ابزارها پا به عرصه وجود گذاشته و موردتوجه بسیاری قرارگرفتند. دسترسپذیری بالا، مقیاسپذیریافقی، قابلیت تکثیر (Replication)، طراحی بدون Schema و قابلیت Map Reduce از جمله زمینههایی هستند که توسط مجموعهای جدید از پایگاههای داده و تحت عنوان کلی NoSQL در حال توسعه و آزمایش هستند.
برای درک بیشتر اهمیت NoSQL باید به چالشهای موجود امروزی بر سر راه پایگاههای داده بیشتر توجه کرد. هماکنون با توسعه فناوریهای مختلف و قابلیت نمونهبرداری و تولید حجم عظیمی از دادهها، امکان ذخیرهسازی و تحلیل آنها چالشی بزرگ به شمار میآید. دادههایی مانند دادههای هواشناسی، فعالیتهای آنلاین کاربران یا تحلیلهای اقتصادی در قالب پایگاههای دادهای سنتی کارایی چندانی نخواهند داشت و در ذخیرهسازیهای بدون قالب و توزیع شدهای مانند هادوپ به بهترین روش کار خواهندکرد. همچنین، امروزه سرویسدهندگان بسیاری به ذخیرهسازی و ارائه محتوای عظیم باینری به کاربران خود در شبکه نیاز دارند که در نوع خود، چالشی بسیار بزرگ به شمار میآید. کارایی بسیار بالا در ذخیرهسازی و ارائه دادههای باینری مانند اسناد PDF و فایلهای MP3، در مقیاس وسیع، یکی از بهترین کاربردهایی است که پایگاههای دادهای NoSQL شایستگی خود را در فراهمکردن آن به اثبات رساندهاند. یک نمونه مناسب در این زمینه، خدمات Amazon S3 است. با این اوصاف، موارد ذکر شده تنها چالش پیش روی توسعهدهندگان و سرویسدهندگان نیست. ذخیرهسازی، مدیریت و بازیابی دادههای گذرا که در بعضی موارد در مقیاس بالایی در برنامههای کاربردی امروزی تولید میشوند نیز یکی دیگر از چالشهای امروزی است که راه حل مدیریت مناسب آنها را پایگاههای دادهای NoSQL ارائهکردهاند. این پایگاههای داده، در مدیریت دادههایی نظیر متغیرهای یک Session در وب، قفلهای دادهای و آمار کوتاه مدت، جایگاه بسیارخوبی کسب کردهاند. نمونه مناسبی برای این کاربرد، پایگاه دادهای Memcached است. اما نکتهای که باید در این میان به آن توجه کرد آن است که یک توسعهدهنده، باید برای کاری که میخواهد انجام دهد، ابزار مناسب را انتخابکند. به این معنا که برای بسیاری از کاربردهای معمولی، هنوز پایگاههای دادهای سنتی بهترین راه حل هستند و نباید آنها را تمام شده تصور کرد. همانطور که قبلاً نیز گفته شد، پایگاههای دادهای NoSQL برای مواردی خاصمناسب هستند که در بالا به آنها اشاره شد و موجب افزایش کاراییکل مجموعه نرمافزاری میشوند. در بسیاری از موارد، انتخاب یک پایگاه داده NoSQL برای کاربردی خاص موجب افت شدید عملکرد و عدم پایداری مجموعه و قابلیت اطمینان بسیار پایین میشود. به همین دلیل و به علت تعدد ابزارهای توسعهداده شده در این زمینه، گاهی اوقات تشخیص محدودیتها و مصالحههایی که باید در استفاده از یک ابزار درنظر گرفت، بسیار مشکل شده و انتخاب راه حل مناسب در محیطهای رابطهای یا غیر رابطهای یک یا چند سروری، سردرگم کننده خواهد بود. به همین منظور، یک دیاگرام مناسب برای انتخاب راه حل مناسب توسط ناتان هورست (Nathan Hurst) براساس نظریه CAP طراحی شده که در شکل زیر آن را مشاهده میکنید.
در این دیاگرام سه گوشه اصلی نشانگر ثبات (Consistency)، در دسترس بودن (Availability) و قابلیت بخش بخش سازی (Partition Tolerance) هستند. ثبات در اینجا یعنی همه کلاینتها همواره به دادههای مشابه دسترسی داشته باشند، در دسترس بودن یعنی همه کلاینتها امکان خواندن و نوشتن را داشته باشند و قابلیت بخش بخش سازی نیز به معنای این است که سیستم کلی بتواند در تمام بخشهای شبکه فیزیکی کارکند. بر اساس نظریه CAP، تنها دو عنصر از این سه عنصر در سیستمهای واقعی قابل انتخاب هستند و بر همین اساس، برای داشتن هر جفت مشخصه، میتوان راهحلی را که روی ضلع مشترک آنها آورده شده است، انتخاب کرد. بررسی کامل این دیاگرام خود محتاج توضیح و تبیین بسیاری است که در حوصله این مقاله نمیگنجد. راهکارهای NoSQL، برای مسائلی بسیار فراتر از دنیای سنتی پایگاههای دادهای بهکارمیروند و عملکردی به شدت بهتر از همتایان سنتی خود ارائهمیکنند. لازم به تأکید است که گذار به سمت راهکارهای NoSQL، به دلیل مشکلات و محدودیتهای زبان SQL نبوده است، بلکه بهدلیل محدودیتهای مدل رابطهای پایگاه دادهای است. زمینههایی که این پایگاههای دادهای مناسب آنها هستند و از خود شایستگی بیشتری در آنها نشان میدهند، به ترتیب در ادامه آورده شدهاند:
دادههای با توالی نوشتن بالا و توالی خواندن کم:
همانند شمارندههای بازدید صفحات وب، دستگاههای وقایعنگار یا تلسکوپهای فضایی. در این حالت، ذخیره دادهها یا بهصورت جفتهای دادهای key-value (همانند آنچه در Redis اتفاق میافتد) انجام میگیرد یا به صورت Document Oriented (همانند مدل مورد استفاده MongoDB) صورت میپذیرد.
دادههای با توالی خواندن بالا و توالی نوشتن بسیارکم:
همانند دادههایگذرا و کش شدهای از تصاویر، اسناد و HTML رندر شده با دسترسی تکراری. چنین دادههایی در پایگاهداده Memcached که برای ذخیره موقت دادههای گذرا مورد استفاده قرار میگیرد، به خوبی مورد پردازش قرار میگیرند. پایگاههای دادهای Cassandra و HBase نیز در زمینه جستوجوی دادههای عظیم شایستگیهای بسیاری دارند و راهحلهای پیشرفتهای نظیر Hadoop و Hive نمونههایی مناسب برای استفاده در زمینه تحلیل دادهها به شمار میروند.
کاربردهایی با نیازمندیهای در دسترس بودن بالا (High Availability) و با توقف خدمات (Downtime) بسیارکم:
این موارد به شدت در مدل سنتی با کمبودهایی مواجه هستند و پایگاههای دادهای NoSQL از عهده اجرای آنها بهخوبی برمیآیند. چنین سیستمهایی که از طریق مجموعههای خوشهسازی شده و با پیکربندی Redundant پیاده سازی میشوند، بیش از هر چیز به مقیاس پذیری افقی و امکان توسعه روی ماشینهای مختلف شبکه نیاز دارند. با مدلهای ارائه شده جدید توسط پایگاههای دادهای مانند Riak و Cassandra انطباق بیشتری داشته و کارایی بالاتری ارائه میکنند.
دادههایی که باید در نقاط مختلف جغرافیایی با هم همگامسازی شوند:
چنین دادههایی که در کلاسترهای مختلف یک شبکه بزرگسازمانی با دفاتر مختلف پراکنده در سطح جغرافیایی وسیع موجودند و نیاز است تا همواره و با بالاترین سرعت و کمترین هزینه ممکن با هم همگام سازی شوند، به خوبی در مجموعههای سنتی رابطهای قابل پیادهسازی نیستند و در صورت انجام این کار، هزینههای بسیاری را در برخواهند داشت. در نقطه مقابل، پایگاه دادهای Memcached به خوبی از عهده اجرای چنین عملیاتی با کمترین هزینه و بالاترین کارایی برمیآید.
دادههای بزرگ تجاری یا مرتبط با تحلیل وب که شما (schema)ی خاصی ندارند:
چنین دادههایی تقریباً شکل و قالب از پیش تعیین شدهای ندارند و براساس محتوای متغیر موجود روی وب تولید میشوند و در بیشتر موارد به فعالیتکاربران و سیستمهای نرمافزاری مرتبط وابستههستند. اغلب نیاز است تا چنین دادههایی به خوبی ذخیرهسازی شوند (ترجیحاً بهصورت موازی) و امکانات پرسوجوپذیری غنی در اختیار بگذارند تا به خوبی قابل تحلیل باشند. مشخص است که سیستمهای سنتی دادهای که برای ذخیرهسازی و بازیابی نیاز به داشتن یک شمای از پیش تعیین شده و ثابت دارند به خوبی از عهده چنینعملیاتی برنمیآیند و به استفاده از راهکارهای جدید در این زمینه نیاز است. راه حل هادوپ یکی از بهترین گزینهها برای کارکرد بهعنوان مدیر چنین دادههایی است.
راهحلهای NoSQL در بسیاری از شرکتهایی که خدمات «وب اجتماعی» ارائه میکنند، به کار گرفته شده و به سرعت در حال گسترش است. این امر به دلیل سختی زیاد و محدودیتهای سیستمهای کاملاً رابطهای در برآوردهکردن نیازهای دادهای آنها است. با نگاهی به نیازمندیهای مقیاس پذیری یکی از شبکههای اجتماعی به راحتی میتوانیم به این امر واقف شویم. این نیازمندیها عبارتند از:
- 570 میلیون مشاهده صفحات در ماه
- آپلود بیش از سه میلیارد عکس در ماه
- پردازش و ارائه بیش از 1.2میلیون عکس در ثانیه
- ارائه 25 میلیون نوع محتوا که با استفاده از 30 هزار سرور انجام میپذیرد.
با این نیازمندیها، که به یقین با نیازمندیهای یک دپارتمان حسابداری در دهه 1950 تفاوتهای بسیاری دارد، این شبکه اجتماعی خود را با مجموعهای غنی از ابزارها تطبیقداده است که هر کدام یکی از بهترین نمونههای پیشرو در حوزه پایگاههای دادهای NoSQL محسوب میشوند:
Memcached:
این شبکه اجتماعی با استفاده از هزاران سرور Memcached، دهها ترابایت داده کششده گذرا را در هر لحظه پردازشکرده و خدمات مرتبط را به کاربران خود ارائه میکند.
Cassandra که هم اکنون با HBase جایگزینشده است:
با استفاده از این پایگاههای دادهای این شبکه اجتماعی عملیات ذخیرهسازی گسترده طیف وسیعی از دادهها بدون داشتن هیچ نقطه خطا دار یا مشکل داری در مجموعه عظیمی از ماشینهای محاسباتی را به بهترین نحو به اجرا در میآورد.
Hadoop و Hive:
با استفاده از این ابزارهای پیشرفته، این شبکه اجتماعی تحلیل دادههای عظیم و تحلیلهای بازاری و تبلیغاتی را با کارایی بالایی به انجام میرساند.
“گذار به سمت راهکارهای NoSQL، به دلیل مشکلات و محدودیتهای زبان SQL نبوده است، بلکه بهدلیل محدودیتهای مدل رابطهای پایگاه دادهای است.”
“دادههایی مانند دادههای هواشناسی، فعالیتهای آنلاین کاربران یا تحلیلهای اقتصادی در قالب پایگاههای دادهای سنتی کارایی چندانی نخواهند داشت و در ذخیرهسازیهای بدون قالب و توزیع شدهای مانند هادوپ به بهترین روش کار خواهندکرد.”
با توجه به موارد ذکر شده در بالا، میتوان معماری دادهای جدید و کارا را کلید رشد و توسعه سریع این شبکه اجتماعی دانست که بهعنوان دلیل اصلی مقیاس پذیری خوب آن نیز به شمار آورد. عاملی که زمینه رشد و توسعه شرکتهای بزرگ دیگری مانند یاهو، Foursquare و Twitter را نیز به ارمغان آورده است. با اینکه اینگونه شرکتها در زمینه استفاده از این فناوری پیشگام هستند، اما هسته اصلی فناوری NoSQL به کار گرفته شده در بسیاری از کاربردهای موجود بهصورت کلی در دسترس همگان قرار دارد که در بیشتر موارد بهصورت اپن سورس نیز توسعه داده شدهاند. به همین دلیل، طیف وسیعی از توسعه دهندگان در برنامههایکاربردی و تجاری خود در حال آزمایش و تطبیق با این فناوری نوپا هستند و به زودی شاهد موج عظیمی از بهکارگیری چنین فناوریهایی در گوشه و کنار دنیای نرم افزارها خواهیم بود.