توسعهٔ دیتابیسهای NoSQL (نو اس کیو ال) همراه با احساس نیاز شرکتهایی مانند فیسبوک، گوگل، آمازون و دیگر غولهای فناوری به کار کردن با حجم زیادی از دادهها آغاز شد به طوری که این دست دیتابیسها به صورت چشمگیری در حوزهٔ بیگ دیتا و اپلیکیشنهای به اصطلاح Real-time استفاده میشوند که در این مقاله با ماهیت و همچنین انواع مختلف این نوع از دیتابیسها، قابلیتها و تفاوتهای آنها آشنا خواهید شد.
NoSQL - نو اس کیو ال چیست؟
دیتابیسهای NoSQL، که گاهی تحتعنوان Not Only SQL هم شناخته میشوند، روشی برای مدیریت دادهها و طراحی پایگاهداده است که برای مجموعهٔ زیادی از دادههای نامتمرکز به کار گرفته میشوند و این در حالی است که NoSQL شامل طیف وسیعی از تکنولوژیها و معماریها میشود که این گوناگونی به خاطر نیاز به روشهایی برای حل مشکلات مقیاسپذیری و بازدهی بیگ دیتا است که در طراحی دیتابیسهای به اصطلاح Relational (رابطهای) همچون MySQL این موارد در نظر گرفته نشده است.
به طور کلی دیتابیس های SQL و NoSQL هر یک مزایا و معایب خاص خود را دارند که در مقالهی SQL با NoSQL چه تفاوت هایی دارد؟ به خوبی بیان شده است اما اساساً معماری نواسکیوال بیشتر برای کسبوکارهایی مناسب است که نیاز به دسترسی و آنالیز حجم زیادی از دادههای به اصطلاح Unstructured (بدون ساختار) دارند و یا دادههای آنها به صورت ریموت و روی چندین سرور مجازی بر بستر #کلود قرار دارد. در واقع، ایدهٔ طراحی این تکنولوژی ابتدا به ساکن توسط شرکتهای پیشرو در حوزهٔ اینترنت نظیر فیسبوک، گوگل، آمازون و ... مطرح شد که نیاز داشتند تا دادههای خود را در هر جایی از دنیا فراخوانی کنند و در عین حال مشکلی با مقیاسپذیری و رشد حجم دادهها نداشته باشند و بازدهی مناسبی میان میلیونها مجموعه داده و نیازهای متنوع کاربران خود داشته باشند.
شاخصترین مزیتهای دیتابیسهای NoSQL
این دست دیتابیسها مزیتهای متعددی را نسبت دیتابیسهای سنتی رابطهای همچون مایاسکیوال در اختیار دولوپرها قرار میدهند که تعدادی از شاخصترین آنها در ادامه آورده شدهاند که برای اغلب دیتابیسهای خانوادهٔ نواسکیوال صادق هستند:
- ساختارنیافتگی: در دیتابیسهای نواسکیوال نیازی ندارید تا ابتدا اِسکمای پایگاهدادهٔ خود را طراحی کنید تا بتوانید دادههای مورد نظرتان را در آن ذخیره کنید بلکه میتوانید شروع به ذخیرهسازی دادهها به صورت دلخواه خود کرده سپس دیتای مورد نیاز خود را فراخوانی کنید بدون آنکه نیازی باشد تا بدانید دیتابیس چگونه دادهها را ذخیره میکند و سازوکار آن به چه شکلی است (به طور کلی، به نظر میرسد که ویژگی ساختارنیافتگی مهمترین تفاوت بین دیتابیسهای نواسکیوال و دیگر دیتابیسهای رابطهای باشد.)
- مقیاسپذیری: دیتابیسهای نواسکیوال از روش مقیاسپذیری افقی پشتیبانی میکنند که این ویژگی باعث میشود تا بتوان به راحتی و بدون نیاز به ارتقاء سختافزاری، ظرفیت دیتابیس را کم و زیاد کرد. به عبارتی، این کار باعث حذف میزان زیادی از هزینهها و پیچیدگیهای طراحی اِسکمای دیتابیسهای به اصطلاح RDBMS میشود که هنگام کم و زیاد کردن ظرفیتشان، انجام چنین کاری ضروری است (اصطلاح RDBMS مخفف واژگان Relational Database Management System به معنی «سیستم مدیریت دیتابیس رابطهای» است.)
- عملکرد: بعضی از دیتابیسها طوری طراحی شدهاند که بهترین پرفومنس (عملکرد) خود را با مدلهای خاصی از سختافزارهای ذخیرهسازی و پردازشی داشته باشند و گاهی تنها با این سختافزارها سازگاری کامل دارند اما در مورد دیتابیسهای نواسکیوال خواهید توانست به راحتی و با اضافه کردن سرورهای ارزان قیمتی، که اصطلاحاً Commodity Servers نامیده میشوند، بازدهی را افزاریش دهید که این ویژگی باعث میشود تا کسبوکارهای نوپا بتوانند با استفاده از این نوع دیتابیسها، سرعت بالایی در ثبت و فراخوانی دادهها را رقم زده که مسلماً منجر به ایجاد تجربهٔ کاربری خوبی بدون صرف هزینههای کلان مرتبط با دیتابیسهای رابطهای میگردد.
- دسترسی بالا: به طور کلی، دیتابیسهای نواسکیوال به منظور ایجاد میزان دسترسی بالا و کاهش پیچیدگیهایی که به صورت پیشفرض در معماری دیتابیسهای رابطهای وجود دارند، طراحی شدهاند. بعضی از دیتابیسهای غیرمتمرکز نواسکیوال (Distributed NoSQL) از نوعی معماری تحت عنوان Masterless استفاده میکنند که به صورت خودکار دادهها را میان منابع مختلفی تقسیم میکند تا عملیات ثبت و فراخوانی، حتی در صورت از کار افتادن یکی از منابع، همچنان امکانپذیر باشد.
- دسترسی جهانی: دیتابیسهای غیرمتمرکز نواسکیوال با تکثیر خودکار دادهها در میان سرورهای متعدد، دیتاسنترها و یا فضاهای ابری میتوانند تأخیر در دسترسی را به حداقل برسانند و صرف نظر از مکان جغرافیایی کاربران، تجربهٔ کاربری یکسانی برای تمامی ایشان رقم بزنند. یکی دیگر از مزیتهای این نوع دیتابیسها، کاهش میزان قابلتوجهی از کار مدیریت دستی دیتابیس است که در دیتابیسهای رابطهای وجود دارد و حذف چنین حجمی از کار، باعث میشود که تیمهای توسعهٔ نرمافزار توجه خود را به اولویتهای کاری دیگر متمرکز کنند.
تاکنون مدلهای مختلفی از دیتابیسهای NoSQL توسط سازمانها و شرکتهای مختلفی طراحی شدهاند تا پاسخگوی نیازها و کاربریهای مختلف باشند. به طور کلی، این دیتابیسها به چهار دسته تقسیمبندی میشوند که در این مقاله به اختصار در مورد هر یک و موارد استفادهی آنها توضیح میدهیم. شما میتوانید به طور مفصل تر در مورد هر یک از دیتابیسهای نو اس کیو ال در مقالهی آشنایی با انواع دیتابیس های NoSQL مطالعه کنید. این 4 نوع عبارتاند از:
1. دیتابیسهای NoSQL مبتنی بر Key-Value
به نوعی میتوان گفت که مدل ذخیرهسازی Key-Value، سادهترین نوع دیتابیسهای نواسکیوال برای استفاده است به طوری که کاربر میتواند یک مقدار را بر اساس یک کلید خاص فراخوانی کند، یک مقدار را به یک کلید اختصاص دهد و یا یک کلید را از مجموعهای از دادهها حذف کند. مقادیر ذخیرهشده همگی از نوع آبجکتهای باینری (Blob) هستند و مجموعهٔ دیتابیس بدون در نظر گرفتن اینکه این مقدار چیست و چه مفهومی دارد، آن را ذخیره میسازد (در واقع، این مسئولیت اپلیکیشن است که بفهمد چهچیزی با چه تایپی در دیتابیس ذخیره شده است.)
از آنجایی که مدلهای مبتنی بر Key-Value همیشه از روش دسترسی Primary Key استفاده میکنند، به طور کلی بازدهی بالایی داشته و به راحتی قابلیت مقایسپذیری دارند. همچنین دیتابیسهای مبتنی بر ذخیرهسازی داده به صورت Key-Value از یک اصطلاحاً Hash Table برای ذخیره کردن Unique Key و Pointer، که در بعضی دیتابیسها اصطلاحاً Inverted Index هم نامیده میشوند، استفاده میکنند.
در این نوع دیتابیسها، هیچ رابطهای از نوع ستون وجود ندارد؛ بنابراین همین مسئله پیادهسازی پروژه را بسیار آسانتر میکند. همچنین به یاد داشته باشیم که دیتابیسهایی از جنس Key-Value (کلید-مقدار) از میزان پرفورمنس بالایی برخوردار بوده و به راحتی و بر اساس نیازهای کسبوکارهای مختلف مقیاسپذیرند که از جملهٔ این نوع دیتابیسها میتوان به Redis ،MemcacheDB و Riak اشاره کرد. به طور کلی، موارد استفادهٔ دیتابیسهای مبتنی بر Key-Value عبارتند از:
- برای ذخیرهٔ دادههای مرتبط با سِشِن کاربران لاگینشده در سیستم
- مدیریت پروفایلهای بدون ساختار کاربران
- ذخیرهٔ تنظیمات حساب کاربری
- ذخیرهٔ دادههای سبد خرید در فروشگاههای آنلاین
البته دیتابیسهای Key-Value برای همهٔ موارد استفاده هم ایدهآل نیستند؛ برای مثال، در موارد زیر بهتر است که از این نوع دیتابیسها استفاده نکنیم:
- وقتی باید یک کوئری بر اساس مقداری مشخص به دیتابیس بزنیم
- نیاز به وجود رابطهای معنادار میان مقادیر ذخیرهشده داریم
- باید عملیاتی را روی چندین کلید منحصربهفرد انجام دهیم
- کسبوکار ما نیاز دارد تا مرتباً بخشی از دادهها را بهروزرسانی کنیم
2. دیتابیسهای NoSQL مبتنی بر Document
این نوع دیتابیسها شبیه مدل قبلی (Key-Value) هستند از این لحاظ که اینجا هم یک جفت کلید-مقدار وجود دارد و داده به عنوان یک مقدار ذخیره میشود و کلید مربوط به آن هم نشانگری منحصربهفرد میباشد اما تفاوت کار در اینجا است که در مدل Document، مقدار ذخیره شده به نوعی کاملاً ساختاریافته (یا حدوداً ساختاریافته) است به طوری که این دادههای ساختاریافته به عنوان یک داکیومنت شناخته میشوند و میتوانند یکی از فرمتهای XML ،JSON، یا BSON را داشته باشند و از جمله دیتابیسهای NoSQL از جنس داکیومنت میتوان MongoDB ،Apache CouchDB و Elasticsearch را نام برد که موارد استفادهٔ آنها به شرح زیر است:
- فروشگاههای آنلاین
- سیستمهای مدیرت محتوا
- پلتفرمهای تجزیه و تحلیل دیتا
- پلتفرمهای وبلاگی
به یاد هم داشته باشیم که دیتابیسهای مبتنی بر داکیومنت (سند) انتخاب مناسبی برای مواردی که میخواهید کوئریهای پیچیدهای به پایگاهداده بزنید و یا اپلیکیشن شما نیاز به محاسبات پیچیدهای روی دیتا دارد نیست.
3. دیتابیسهای NoSQL مبتنیبر Column
در این دست دیتابیسهای نواسکیوال، دادهها به جای ذخیرهسازی در Row (ردیف) در قالب یکسری سلول (Cell) ذخیره شده سپس چند ستون از دادهها با یکدیگر همگروه میشوند و مجموعه ستونهای متعلق به یک گروه هم میتوانند به صورت مجازی بینهایت ستون را شامل شوند که میتوان در زمان اجرا و یا در زمان تعریف ساختار، آنها را ساخت.
جالب است بدانید که برای عملیات ثبت و فراخوانی دادهها، به جای سطر از ستونها استفاده میشود (مجموعه ستونها، گروهی از دادههای یکسان هستند که معمولاً همراه با هم فراخوانی میشوند.) به عنوان مثال، ما معمولاً نامکاربری، نام خانوادگی و دیگر اطلاعات کاربران را به صورت همزمان فراخوانی میکنیم ولی دستیابی به اطلاعات سفارشهای آنها در یک فروشگاه آنلاین به همراه این دست اطلاعات فراخوانی نخواهد شد.
مزیت اصلی ذخیرهسازی دادهها در ستون نسبت به دیتابیسهای رابطهای، جستجو و دستیابی سریع و تجمیع دادهها است. دیتابیسهای رابطهای، یک ردیف از داده را به عنوان یک ورودی به هم پیوسته ذخیره میکنند و ردیفهای متفاوت در مکانهای متفاوتی ذخیره میشوند اما این در حالی است که دیتابیسهای مبتنی بر ستون از جنس نواسکیوال، همهٔ سلولهای مربوط به یک ستون را به عنوان یک ورودی پیوسته ذخیره میکنند که این عمل بالتبع باعث سریعتر شدن جستجو و دستیابی به دادهها میشود. همچنین هر گروه از ستونها میتوانند با مجموعهای از ردیفها در دیتابیسهای رابطهای مقایسه شوند بدین شکل که Key همان Row است و هر Row هم شامل چندین Column میشود اما تفاوت در اینجا است که ردیفهای متفاوت نیازی ندارند که ستونهای یکسانی داشته باشند و ستونها را میتوان در هر زمان و به هر ردیفی اضافه کرد بدون اینکه نیاز باشد آنها را به ردیفهای دیگر هم اضافه نمود. به طور کلی، موارد استفادهٔ دیتابیسهای مبتنی بر Column عبارتند از:
- سیستمهای مدیریت محتوا
- پلتفرمهای وبلاگی
- سرویسهایی که دادههایی با تاریخ انقضا را در خود ذخیره میکنند
- سیستمهایی که نیاز به ریکوئستهای بسیار سنگین ثبت داده (مانند ثبت لاگهای سیستم) دارند.
از جمله از دیتابیسهای NoSQL مبتنی بر ستون میتوان Cassandra و Apache Hadoop Hbase را نام برد. به طور کلی، چنانچه نیاز به انجام کوئریهای پیچیده دارید و یا روش کوئری زدن شما به دیتابیس مرتباً تغییر میکند، نباید از دیتابیسهای NoSQL مبتنی بر Column استفاده کنید. مورد دیگری که نباید از این نوع دیتابیس استفاده کنید، زمانی است که تعریف مشخصی از سازوکار دیتابیس ندارید.
4. دیتابیسهای NoSQL مبتنیبر Graph
دیتابیسهای مبتنی بر گراف اصولاً بر اساس مدلی تحت عنوان Entity-Attribute-Value (موجودیت-ویژگی-مقدار) ساخته میشوند؛ موجودیتها به عنوان Node (گره) هم شناخته میشوند که دارای یکسری خصوصیات مخصوص به خود هستند. این یک روش بسیار انعطافپذیر برای توضیح اینکه چگونه دادهها با دیگر دادهها ارتباط دارند است در حالی که دیتابیسهای قدیمی مثل RDBMS توضیحات مربوط به هر رابطهٔ ممکن را به صورت یک فیلد حاوی Foreign Key (کلید خارجی) و یا جداول میانی ذخیره میکنند در حالی که دیتابیسهای مبتنی بر گراف این اجازه را به شما میدهند تا به صورت مجازی هر رابطهای را در لحظه تعریف کنید. از جمله دیتابیسهای NoSQL مبتنی بر گراف میتوان به Neo4j ،ArangoDB و OrientDB اشاره کرد به طوری که موارد استفادهٔ آنها شامل موقعیتهای زیر میشود:
- سیستمهای شناسایی کلاهبرداری آنلاین
- جستجوی مبتنی بر گراف
- انجام تَسکهای مختلف در حوزههای شبکه و فناوری
- شبکههای اجتماعی و ...
در این مقاله سعی شد نگاهی کلی به مفهوم دیتابیسهای NoSQL داشته باشیم و به بررسی قابلیتها و تفاوتهای آنها بپردازیم. حال نوبت به نظرات شما میرسد. آیا تجربهٔ کار با دیتابیسهای NoSQL را دارید و به نظر شما مهمترین فاکتور در استفاده یا عدم استفاده از این تکنولوژی چیست؟ نظرات، دیدگاهها و تجربیات خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.