درآمدی بر انواع مختلف دیتابیس‌های NoSQL

درآمدی بر انواع مختلف دیتابیس‌های NoSQL

‌توسعه دیتابیس‌های NoSQL همراه با احساس نیاز شرکت‌هایی مانند فیسبوک، گوگل، آمازون و دیگر غول‌های فناوری به کار کردن با حجم زیادی از داده‌ها آغاز شد. دیتابیس‌های NoSQL به‌صورت چشمگیری در حوزهٔ کلان داده (Big Data) و اپلیکیشن‌های به‌اصلاح Real-time استفاده می‌شوند که در این مقاله با انواع مختلف این نوع از دیتابیس‌ها، قابلیت‌ها و تفاوت‌های آن‌ها آشنا خواهیم شد.

دیتابیس‌های NoSQL که گاهی تحت‌عنوان Not Only SQL هم شناخته می‌شود، روشی برای مدیریت داده‌ها و طراحی دیتابیس است که برای مجموعهٔ زیادی از داده‌های نامتمرکز به‌کار گرفته می‌شوند. NoSQL که شامل محدودهٔ وسیعی از تکنولوژی‌ها و معماری‌ها می‌شود، به‌دنبال روشی برای حل مشکلات مقیاس‌پذیری و بازدهی بیگ دیتا است که در طراحی دیتابیس‌های به‌اصطلاح Relational (رابطه‌ای) همچون MySQL این موارد درنظر گرفته نشده است!

تکنولوژی NoSQL، به‌خصوص برای سازمان‌هایی مناسب است که نیاز به دسترسی و آنالیز حجم زیادی از داده‌های به‌اصطلاح Unstructured (بدون ساختار) دارند و یا داده‌هایی که به‌صورت ریموت و روی چندین سرور مجازی بر بستر کلود قرار دارند.

تکنولوژی NoSQL، در اصل توسط شرکت‌های پیشرو در اینترنت نظیر فیسبوک، گوگل، آمازون و ... ایجاد شد و مورد استفاده قرار گرفت که نیاز داشتند داده‌های خود را در هرجایی از دنیا فراخوانی کنند و در‌عین‌حال مشکلی با مقیاس‌پذیری و رشد حجم داده‌ها نداشته باشند و بازدهی مناسبی میان میلیون‌ها مجموعه داده و کاربر خود داشته باشند.

شاخص‌ترین مزیت‌های دیتابیس‌های NoSQL
این دست دیتابیس‌ها مزیت‌های متعددی را نسبت دیتابیس‌های قدیمی رابطه‌ای همچون MySQL در اختیار دولوپرها قرار می‌دهند؛ تعدادی از ویژگی‌های اصلی دیتابیس‌های NoSQL در ادامه آورده شده است که برای اغلب دیتابیس‌ها از نوع NoSQL صدق می‌کنند که عبارتند از:

ساختارنیافتگی: در دیتابیس‌های NoSQL، شما نیازی ندارید که ابتدا اسکمای دیتابیس خود را طراحی کنید تا بتوانید داده‌های موردنظرتان را در آن ذخیره کنید؛ شما می‌توانید شروع به کدنویسی کرده و داده‌ها را در دیتابیس خود ذخیره کنید و سپس آن‌ها را فراخوانی کنید بدون آن‌که نیازی باشد که بدانید دیتابیس چگونه داده‌ها را ذخیره می‌کند و سازوکار آن به چه شکلی است. در‌عین‌حال، اگر نیاز به استفادهٔ حرفه‌ای از این نوع دیتابیس‌ها دارید، می‌توانید به‌صورت دستی شروع کنید به سفارشی کردن ساختار آن‌ها. به‌طورکلی، ویژگی ساختارنیافتگی شاید مهمترین تفاوت بین دیتابیس‌های NoSQL و دیگر دیتابیس‌های رابطه‌ای باشد.

مقیاس‌پذیری: دیتابیس‌های NoSQL از روش مقیاس‌‌پذیری افقی پشتیبانی می‌کنند که این ویژگی باعث می‌شود تا بتوان به‌راحتی و بدون نیاز به ارتقاء سخت‌افزاری، ظرفیت دیتابیس را کم و زیاد کرد. این کار باعث حذف میزان زیادی از هزینه‌ها و پیچیدگی‌های طراحی اسکمای دیتابیس‌های به‌اصطلاح RDBMS می‌شود که هنگام کم و زیاد کردن ظرفیتشان، انجام چنین کاری ضروری است (اصطلاح RDBMS مخفف واژگان Relational Database Management System به‌معنی سیستم مدیریت دیتابیس رابطه‌ای است).

پرفورمنس: بعضی از دیتابیس‌ها طوری طراحی شده‌اند که بهترین عملکرد خود را با مدل‌های خاصی از سخت‌افزارهای ذخیره‌سازی و پردازشی داشته باشند و گاهی تنها با این سخت‌افزارها کار می‌کنند! در مورد دیتابیس‌های NoSQL، شما می‌توانید به‌راحتی و با اضافه کردن سرورهای ارزان قیمتی که اصطلاحاً Commodity Servers نامیده می‌شوند، بازدهی را افزاریش دهید. این ویژگی باعث می‌شود که کسب‌وکارها بتوانند بااستفاده از این نوع دیتابیس‌ها، سرعت بالایی در ثبت و فراخوانی داده‌ها را رقم زده که مسلماً منجر به ایجاد تجربهٔ کاربری خوبی بدون صرف هزینه‌های اضافی مربوط طراحی دستی دیتابیس‌های رابطه‌ای می‌گردد.

دسترسی بالا: به‌طور‌کلی، دیتابیس‌های NoSQL به‌منظور ایجاد میزان دسترسی بالا و کاهش پیچیدگی‌هایی که به‌صورت پیش‌فرض در معماری دیتابیس‌های رابطه‌ای وجود دارند طراحی شده‌اند. بعضی از دیتابیس‌های غیرمتمرکز نواس‌کیوال (Distributed NoSQL) از نوعی معماری تحت‌عنوان Masterless استفاده می‌کنند که به‌صورت خودکار داده‌ها را میان منابع مختلفی تقسیم می‌کند تا عملیات ثبت و فراخوانی حتی درصورت از کار افتادن یکی از منابع، همچنان امکان‌پذیر باشند.

دسترسی جهانی: دیتابیس‌های غیرمتمرکز NoSQL با تکثیر خودکار داده‌ها در میان سرورهای متعدد، دیتاسنترها و یا فضاهای ابری می‌توانند تأخیر در دسترسی را به‌حداقل برسانند و صرف‌نظر از مکان جغرافیایی کاربران، تجربهٔ کاربری یکسانی برای کاربران رقم بزنند. یکی دیگر از مزیت‌های این نوع دیتابیس‌ها، کاهش میزان قابل‌توجه‌ای از کار مدیریت دستی دیتابیس است که در دیتابیس‌های رابطه‌ای وجود دارد و حذف این حجم از کار، باعث می‌شود که تیم‌های توسعهٔ نرم‌افزار توجه خود را به اولویت‌های کاری دیگر متمرکز کنند.

انواع دیتابیس‌های NoSQL
تاکنون مدل‌های مختلفی از دیتابیس‌های NoSQL توسط سازمان‌ها و شرکت‌های مختلفی طراحی شده‌اند تا پاسخگوی نیازها و کاربری‌های مختلف باشند. به‌طور‌کلی، این دیتابیس‌ها به ۴ دسته تقسیم‌بندی می‌شوند که عبارتند از:

دیتابیس‌های NoSQL مبتنی‌بر Key-Value
به‌نوعی می‌توان گفت که مدل‌ ذخیره‌سازی Key-Value (کلید-مقدار)، ساده‌ترین نوع دیتابیس‌های NoSQL برای استفاده هستند؛ درواقع، کاربر می‌تواند یک مقدار را براساس یک کلید خاص دریافت کند، یک مقدار را به یک کلید اختصاص دهد و یا یک کلید را از مجموعه داده‌ها حذف کند.

مقدارهای ذخیره شده همگی از نوع آبجتک‌های باینری یا به‌اصطلاح Blob هستند و مجموعهٔ دیتابیس بدون درنظر گرفتن این‌که این مقدار چیست و چه مفهومی دارد، آن‌را ذخیره می‌سازد (درواقع، این مسئولیت اپلیکیشن است که بفهمد چه‌چیزی با چه تایپی در دیتابیس ذخیره شده است).

از آنجایی که مدل‌های ذخیره‌ای Key-Value همیشه از روش دسترسی کلید اصلی (Primary Key) استفاده می‌کنند، به‌طورکلی بازدهی بالایی دارند و به‌راحتی قابلیت مقایس‌پذیری دارند؛ دیتابیس‌های Key-Value از یک اصطلاحاً Hash Table برای ذخیره کردن کلیدهای منحصر‌به‌فرد (Unique Keys) و اشاره‌گرها -که در بعضی دیتابیس‌ها اندیس وارونه یا Inverted Index هم نامیده می‌شوند- که مربوط به هر مقدار داده‌ای هستند استفاده می‌کنند.

در این نوع دیتابیس‌ها، هیچ رابطه‌ای از نوع ستون وجود ندارد، بنابراین همین مسئله امر پیاده‌سازی پروژه را بسیار آسان‌تر می‌کند. همچنین به یاد داشته باشیم که دیتابیس‌های Key-Value از میزان پرفورمنس بالایی برخوردار بوده و به‌راحتی و براساس نیازهای کسب‌و‌کارها، قابل مقیاس‌پذیری هستند. از جملهٔ این نوع دیتابیس‌ها می‌توان Redis ،MemcacheDB و Riak اشاره کرد.

موارد استفادهٔ دیتابیس‌های مبتنی‌بر Key-Value
- برای ذخیرهٔ داده‌های مرتبط با Session کاربران لاگین شده در سیستم
- مدیریت پروفایل‌های بدون ساختار کاربران
- ذخیرهٔ تنظیمات حساب کاربری
- ذخیرهٔ داده‌های سبد خرید در فروشگاه‌های آنلاین

البته دیتابیس‌های Key-Value برای همهٔ موارد استفاده هم ایده‌آل نیستند؛ برای مثال، در مواردی زیر بهتر است که از این نوع دیتابیس‌ها استفاده ننماییم:
- وقتی باید یک کوئری براساس مقداری مشخص به دیتابیس بزنیم
- نیاز به وجود رابطه‌ای معنادار میان مقادیر ذخیره‌شده داریم
- باید عملیاتی را روی چندین کلید منحصربه‌فرد انجام دهیم
- کسب‌وکار ما نیاز دارد که مرتباً بخشی از داده‌ها را به‌روزرسانی کنیم

دیتابیس‌های NoSQL مبتنی‌بر Document
این نوع دیتابیس‌ها شبیه مدل قبلی یعنی Key-Value هستند از این لحاظ که اینجا هم یک جفت کلید-مقدار وجود دارد و داده به‌عنوان یک مقداری ذخیره می‌شود و کلید مربوط به آن هم نشانگری منحصر‌به‌فرد است اما تفاوت کار در این‌جا است که در مدل ذخیره براساس Document (سند)، مقدار ذخیره شده به‌نوعی کاملاً ساختاریافته یا حدوداً ساختاریافته است.

این داده‌های ساختاریافته یا نیمه ساختار‌یافته به‌عنوان یک سند شناخته می‌شوند و می‌توانند یکی از فرمت‌های XML ،JSON، یا BSON را داشته باشند. از جمله دیتابیس‌های NoSQL مبتنی‌بر سند می‌توان MongoDB ،Apache CouchDB و Elasticsearch را نام برد.

موارد استفادهٔ دیتابیس‌های مبتنی‌بر Document
- فروشگاه‌های آنلاین
- سیستم‌های مدیرت محتوا
- پلتفرم‌های تجزیه و تحلیل دیتا
- پلتفرم‌های وبلاگی

به یاد هم داشته باشیم که دیتابیس‌های مبتنی‌بر سند انتخاب مناسبی برای مواردی که می‌خواهید کوئری‌های پیچیده‌ای به دیتابیس بزنید و یا اپلیکیشن شما نیاز به محاسبات پیچیده‌ای روی دیتا دارد نیست.

دیتابیس‌های NoSQL مبتنی‌بر Column
در دیتابیس‌های NoSQL مبتنی‌بر Column (ستون-محور)، داده‌ها به‌جای ذخیره‌سازی در Row (ردیف) در قالب سلول‌هایی (Cell) ذخیره می‌شوند که به‌صورت چند ستون از داده با یکدیگر هم‌گروه می‌شوند. مجموعه ستون‌های متعلق به یک گروه هم می‌توانند به‌صورت مجازی بی‌نهایت ستون را شامل شوند که می‌توان در زمان اجرا و یا در زمان تعریف ساختار آن‌ها را ساخت.

جالب است بدانید که برای عملیات ثبت و فراخوانی داده‌ها، به‌جای سطر از ستون‌ها استفاده می‌شود! مجموعه ستون‌ها، گروهی از داده‌های یکسان هستند که معمولاً همراه باهم فراخوانی می‌شوند؛ به‌عنوان‌ مثال، ما معمولاً نام‌کاربری، نام خانوادگی و دیگر اطلاعات کاربران را به‌صورت هم‌زمان فراخوانی می‌کنیم ولی دستیابی به اطلاعات سفارش‌های آن‌ها -در یک فروشگاه آنلاین- به‌همراه این دست اطلاعات فراخوانی نخواهد شد.

مزیت اصلی ذخیره‌سازی داده‌ها در ستون نسبت به دیتابیس‌های رابطه‌ای، جستجو و دستیابی سریع و تجمیع داده‌ها است. دیتابیس‌های رابطه‌ای، یک Row (ردیف) از داده را به‌عنوان یک ورودی به‌هم پیوسته ذخیره می‌کنند؛ ردیف‌های متفاوت در مکان‌های متفاوتی ذخیره می‌شوند اما این در‌حالی است که دیتابیس‌های مبتنی‌بر ستون، همهٔ سلول‌های مربوط به یک ستون را به‌عنوان یک ورودی پیوسته ذخیره می‌کنند که این عمل درنتیجه باعث سریع‌تر شدن جستجو و دستیابی به داده‌ها می‌شود.

هر گروه از ستون‌ها می‌توانند با مجموعه‌ای از ردیف‌ها در دیتابیس‌های رابطه‌ای مقایسه شوند بدین شکل که Key همان Row است و هر Row هم شامل چندین ستون می‌شود اما تفاوت در اینجا است که ردیف‌های متفاوت نیازی ندارند که ستون‌های یکسانی داشته باشند و ستون‌ها را می‌توان در هر زمان و به هر ردیفی اضافه کرد بدون این‌که نیاز باشد آن‌ها را به ردیف‌های دیگر هم اضافه نمود.

موارد استفادهٔ دیتابیس‌های مبتنی‌بر Column
- سیستم‌های مدیریت محتوا
- پلتفرم‌های وبلاگی
- سرویس‌هایی که داده‌هایی با تاریخ انقضا را در خود ذخیره می‌کنند
- سیستم‌هایی که نیاز به ریکوئست‌های بسیار سنگین ثبت داده -مانند ثبت لاگ‌های سیستم- دارند.

در‌صورتی‌که نیاز به انجام کوئری‌های پیچیده دارید و یا روش کوئری زدن شما به دیتابیس مرتباً تغییر می‌کند، نباید از دیتابیس‌های NoSQL مبتنی‌بر Column استفاده کنید. مورد دیگری که نباید از این نوع دیتابیس استفاده کنید زمانی است که تعریف مشخصی از سازوکار دیتابیس ندارید! از جمله از دیتابیس‌های NoSQL مبتنی‌بر ستون هم می‌توان Cassandra و Apache Hadoop Hbase را نام برد.

دیتابیس‌های NoSQL مبتنی‌بر Graph
دیتابیس‌های مبتنی‌بر گراف اصولاً براساس مدلی تحت‌عنوان Entity-Attribute-Value (موجودیت-ویژگی-مقدار) ساخته می‌شوند؛ موجودیت‌ها به‌عنوان Node (نُود یا نقطه) هم شناخته می‌شوند که دارای یکسری خصوصیات مخصوص به خود هستند.

این یک روش بسیار انعطاف‌پذیر برای توضیح این‌که چگونه داده‌ها با دیگر داده‌ها ارتباط دارند است؛ درحالی‌که دیتابیس‌های قدیمی مثل RDBMS توضیحات مربوط به هر رابطهٔ ممکن را به‌صورت یک فیلد حاوی Foreign Key (کلید خارجی) و یا جداول میانی ذخیره می‌کنند، دیتابیس‌های مبتنی‌بر گراف این اجازه را به شما می‌دهند که به‌صورت مجازی هر رابطه‌ای را در لحظه تعریف کنید. نمونه‌ دیتابیس‌های NoSQL مبتنی‌بر گراف Neo4j ،ArangoDB و OrientDB هستند.

موارد استفادهٔ دیتابیس‌های مبتنی‌بر Graph
- سیستم‌های شناسایی کلاهبرداری‌های آنلاین
- جستجوی مبتنی‌بر گراف
- انجام تسک‌ها در حوزه‌های شبکه و فناوری
- شبکه‌های اجتماعی و ...

در این مقاله سعی شد نگاهی کلی به مفهوم دیتابیس‌های NoSQL داشته باشیم و به بررسی قابلیت‌ها و تفاوت‌های آن‌ها بپردازیم. حال نوبت به نظرات شما می‌رسد. آیا تجربهٔ کار با دیتابیس‌های NoSQL را دارید؟ به‌نظر شما مهمترین فاکتورها در استفاده کردن یا نکردن از این تکنولوژی‌ چیست؟ نظرات، دیدگاه‌ها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع