NoSQL چیست؟



visibility  
mode_comment   ۴

اگر در مصاحبه های استخدامی شرکت کرده باشید، به احتمال زیاد از شما پرسیده شده NoSQL چیست؟ آیا با آن به اندازه کافی آشنایی دارید؟ MongoDB چیست؟ و... در این مطلب به توضیحی در مورد پایگاه های داده NoSQL می پردازیم و با آن ها آشنا می شویم. شاید به زودی شاخ این غول مصاحبه های استخدامی برنامه نویسی را با موفقیت بشکنیم! اگر با پایگاه های داده یا دیتابیس ها آشنایی ندارید می توانید قبل از خواندن این آموزش مقاله ما با عنوان "پایگاه داده (Database) چیست؟" را مطالعه کنید.

در برنامه نویسی سنتی، پایگاه های داده معمولا از نوع SQL هستند؛ که یک پایگاه داده رابطه ای یا Relational است. پایگاه های داده رابطه ای ساده هستند و کار کردن با آن ها معمولا بی دردسر و راحت است. اما این نوع از پایگاه های داده یک مشکل بزرگ دارند. این مشکل زمانی خود را نشان داد که غول های نرم افزاری دنیا مثل گوگل، آمازون و فیسبوک احتیاج به تحلیلِ داده های با حجم و تعداد بالا یا همان Big Data پیدا کردند.

پایگاه های داده رابطه ای به دلیل نوع ساختار خود، برای تحلیل داده های بزرگ غیر بهینه، ناکارا و همینطور کند بودند. البته در بعضی موارد هم استفاده از ساختار جدولی که در پایگاه های داده رابطه ای استفاده می شود تقریبا ناممکن بود. به همین دلیل ذخیره سازی حجم زیادی از داده های بی ساختار (Non-structured Data) سرعت و کارایی این پایگاه های داده را به شدت کاهش می داد. تا اینکه پایگاه های داده NoSQL پا به عرصه گذاشتند. پس همانطور که حدس می زنید، هدف اصلی ایجاد پایگاه های داده NoSQL کار با داده های بی ساختار و حجیم است.

گفتیم که مشکل پایگاه های داده مبتنی بر SQL از نوع ساختار آن ها ناشی می شود. اما این ساختار چگونه است و چرا چنین مشکلاتی را ایجاد می کند؟ برای فهمیدن پاسخ این سوال احتیاج داریم کمی با ساختار پایگاه های داده SQL آشنا شویم.

آشنایی با ساختار پایگاه داده SQL

اگر تجربه استفاده از SQL را داشته باشید می دانید که در استفاده از آن همیشه باید تابع قوانین باشید. یعنی باید مجموعه ای از اطلاعات یکسان با مشخصات یکسان را در جداول (Table) مربوط به خود جاگذاری نمایید. در واقع باید بگوییم که در SQL باید برای این سوال ها، به ازای هر داده پاسخ مشخصی داشته باشید:

  • چه موجودیت (Entity) هایی دارید؟ اطلاعات قرار است در قالب چه دسته هایی ذخیره سازی شود؟ مثل دسته های کاربر، خبر، کامنت و... همگی نمونه هایی از موجودیت هستند. معمولا هر موجودیت در قالب یک جدول در نظر گرفته می شود.
  • هر جدول شما چه خاصیت هایی دارد؟ چه اطلاعات مشخصی را قصد دارید در آن ذخیره کنید؟ به یاد داشته باشید که این خواص باید ثابت باشند! چرا که هر کدام از این خواص به معنی یک ستون (Column) از جدول شما هستند. مثلا جدول کاربر می تواند شامل ستون های نام، نام خانوادگی، سن، پست الکترونیک و... باشد و قرار نیست این تعداد ستون ها برای هر کاربر متفاوت باشد.
  • هر داده شما چه اطلاعاتی دارد؟ هر داده جدید در قالب یک سطر (Row) جدید در جدول مورد نظرتان ذخیره می شود. به طور مثال به ازای هر کاربر جدید یک سطر با ستون های نام، نام خانوادگی، سن و... در جدول کاربران تشکیل می شود.
  • هر جدول شما چه ارتباطی (Relation) با جدول یا جداول دیگر دارد؟ مثلا هر کاربر می تواند عضوی از یک یا چند کلاس درس و هر کلاس درس می تواند شامل مجموعه ای از کاربران باشد.

تمام این مشخصات پایگاه داده شما در SQL با ساختاری به نام Schema (بخوانید اسکیما) ذخیره می شود. Schema یک ساختار ثابت است و مانند اسکلت یک ساختمان عمل می کند. همه چیز روی آن سوار و بر پایه آن تکمیل می شود. شاید تا الان فهمیده باشید که مشکل اصلی این نوع از پایگاه داده در ذخیره سازی داده های بی ساختار کجاست! در ذخیره سازی این گونه داده ها، خصوصیات هر داده همواره ثابت نیست و این باعث ناکارایی و بعضا غیر قابل استفاده شدن SQL برای آن ها می شود.

پایگاه های داده NoSQL

nosql چیست

پایگاه های داده (Not Only SQL) NoSQL  برعکس نوع SQL از ساختارهای Schema غیر ثابت یا Dynamic Schema استفاده می کنند. این باعث می شود که برنامه نویسان احتیاجی به تشکیل ساختارهای سخت گیرانه مشخص، پیش از ایجاد پایگاه های داده را نداشته باشند. این پایگاه های داده می توانند انواع مختلفی داشته باشند و برعکس SQL برای ذخیره سازی داده ها از XML یا JSON استفاده می کنند. در ادامه انواع مختلفی از پایگاه های داده NoSQL را به شما معرفی می کنیم:

  • پایگاه های داده کلید-مقدار یا Key-Value Database: در این نوع از پایگاه داده اطلاعات در قالب جفت های کلید-مقدار یا Key-Value ذخیره می شود. کلیدها نقش شناسه هر داده را بازی می کند. یعنی می توانیم با استفاده از آن ها مقادیر مختلف داده را ذخیره یا پیدا کنیم. پایگاه های داده کلید-مقدار به دلیل ساده بودن در کارکرد، پرکاربرد ترین نوع پایگاه های داده NoSQL هستند.
  • پایگاه های داده ستونی یا Wide-Column Database: شاید تصور کنید پایگاه های داده ستونی همان پایگاه های داده رابطه ای هستند. اما این فقط ظاهر این گونه پایگاه های داده است که شبیه به نوع رابطه ای است. گفتیم که در پایگاه های داده رابطه ای لازم است که تعداد و نوع ویژگی های هر موجودیت و مقادیر داخل آن مشخص و ثابت باشد. این در حالی است که در پایگاه های داده ستونی، هر ستون در رکوردهای مختلف می تواند شامل داده هایی با ساختار و نوع متفاوت باشد.
  • پایگاه های داده سندی یا Document Database: در این گونه پایگاه های داده برای ذخیره سازی داده ها از اسناد JSON یا XML استفاده می کنیم. پایگاه های داده سندی معمولا برای ذخیره سازی و استفاده از داده های پراکنده و بی ساختار استفاده می شوند.
  • پایگاه های داده گرافی یا Graph Database: در این نوع از پایگاه های داده برای ذخیره سازی موجودیت ها و روابط بین آن ها از گراف استفاده می کنیم. پایگاه های داده گرافی برای مواردی که در آن ها به ایجاد ارتباط های متعدد بین جداول احتیاج داریم بسیار مناسب هستند.
  • پایگاه های داده چند مدله یا Multimodel Database: پایگاه های داده چند مدله ترکیبی از انواع دیگر پایگاه داده هستند. در این نوع پایگاه های داده می توانیم داده ها را به روش های مختلفی ذخیره، و از آن ها استفاده کنیم.

مزیت های استفاده از NoSQL

پایگاه های داده NoSQL مزیت های بسیار زیادی دارند که آن ها را برای سیستم های بزرگ و توزیع شده تبدیل به بهترین گزینه می کند. به طور کلی می توان این مزیت ها را به این شکل خلاصه کرد:

  • مقیاس پذیری بالا (Scalability): پایگاه های داده NoSQL می توانند به راحتی با روش مقیاس پذیری افقی یا Horizontal Scaling گسترش پیدا کنند. این ویژگی باعث کم شدن پیچیدگی و هزینه مقیاس دادن به نرم افزار یا Scale کردن آن می شود.
  • کارایی بالا (Performance): در سیستم های توزیع شده NoSQL با تکثیر خودکار داده های NoSQL در سرورهای متعدد در سراسر دنیا، تاخیر در ارسال پاسخ از طرف سرور به پایین ترین حد ممکن می رسد.
  • دسترسی بالا (Availability): در سیستم های توزیع شده NoSQL به دلیل کپی شدن خودکار داده ها در سرورهای مختلف، با از دسترس خارج شدن یک یا چند سرور، پایگاه داده همچنان قابل دسترس و پاسخگو است.

نتیجه گیری

دیدیم که پایگاه های داده رابطه ای و مبتنی بر SQL گرچه از مزیت ساختار یافتگی و قانونمندی برخوردارند، اما برای سیستم های بی ساختار یا تحلیل داده های بزرگ مناسب نیستند. این به آن معنی است که مزیت آن ها در بسیاری از سیستم های بزرگ مثل موتورهای جستجو، تبدیل به بزرگترین نقطه ضعف می شود. برای حل این مشکل، پایگاه های داده NoSQL مثل MongoDB، پابه عرصه گذاشتند. پایگاه های داده NoSQL به راحتی در سیستم های توزیع شده مورد استفاده قرار می گیرند، و باعث بهبود عملکرد آن ها می شوند. آیا شما تا به حال از پایگاه های داده رابطه ای استفاده کرده اید؟ نظر شما در مورد استفاده از این نوع پایگاه های داده چیست؟

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back
7Learn Experts
comment دیدگاه کاربران
علی خسروی replyپاسخ

با سلام و خسته نباشید
واقعا مقاله کامل و مفیدی بود خیلی از شما بابت این اطلاعات تشکر میکنم منتظر مقالات بعدی شما هستیم سپاس :)‌

بنده کمی با پایگاه های داده رابطه ای و مبتنی بر SQL کار کردم و قانون مند بودن این پایگاه داده خیلی در برنامه نویسی و مخصوصا INSERT کردن داده مشکل ساز بوده و با ارور های فراوانی مواجه شدم و تایم زیادی رو برای دیباگ کردن اونها از دست دادم متاسفانه 🙁

زهرا فرحمند

سلام. خوشحالم که لذت بردید آقای خسروی عزیز ان شاءال… مقالات بیشتری در این حوزه خواهیم داشت 🙂

حمیدرضا اکبرنژاد replyپاسخ

ممنون بابت مقاله خوب و گفتار سادتون. اگه میشه درمورد mongodb بیشتر مقاله بزارید و اینکه کوئریهای پرکاربرد رو که معادل SQL هستن رو بررسی کنید. ممنون

مهدی علامه

خیلی خوشحالم که از این مطلب استفاده کردید
به زودی مطالب بیشتری در این زمنیه منتشر خواهیم کرد

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :