دیتابیس NoSQL و انواع آن چیست؟ آیا باید آن را جایگزین SQL کنیم؟

NoSQL چیست؟

آیا تاکنون از خود پرسیده اید گوگل چگونه در کسری از ثانیه در میلیاردها صفحه اینترنت جستجو میکند؟ آیا از SQL استفاده میکند؟ مسلما خیر, از تکنولوژی جدیدی به نام NoSQL استفاده میکند!

رایج ترین دسته دیتابیس ها امروزه بر مبنای SQL میباشند و اینگونه دیتابیس ها “ارتباطی” یا “relational” نامیده میشوند.

اما با پیشرفت تکنولوژی طی سالیان اخیر نیاز به پردازش و ذخیره سازی بهینه تر , سرعت بالا و عدم امکان استفاده از جداول (Table) در بسیاری از پروژه های بزرگ احساس میشد. از طرفی ذخیره سازی حجم بالایی از داده های بدون ساختار (non-structured data) در دیتابیس های SQL باعث کاهش شدید سرعت و کارایی دیتابیس میگردد. از این رو تکنولوژی جدیدی به نام NoSQL با اهدافی متفاوت ارائه شد. هدف اصلی NoSQL ذخیره سازی و کار با داده های بدون ساختار و حجیم میباشد.

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

ساختار و عملکرد SQL

SQL
قبل از پرداختن به ساختار NoSQL باید کمی با SQL دقیق تر آشنا شویم.

دیتابیس های SQL نحوه عملکرد سازمان یافته و سفت و سخت تری در ذخیره سازی و دریافت اطلاعات دارند. اگر تاکنون با SQL کار کرده باشید میدانید که اطلاعات درون جداول (Tables) – ستون ها (Columns) – سطرها (Rows) ذخیره میشوند.

به زبان ساده در SQL:

هر سطر (Row) نقش یک رشته ورودی یا خروجی را دارد.

هر ستون (Column) نقش یک خصوصیت یا شاخص را دارد.

هر جدول (Table) نقش یک خوشه اطلاعات با خصوصیات مشترک را دارد.

همچنین در SQL میتوانیم هر جدول را به جدول دیگری ارتباط بدهیم و جداول مرتبط با هم بسازیم.

تمامی این ارتباطات و ساختارهای داده ای مرتبط با هم در پشت صحنه توسط دیتابیس به واسطه ساختاری به نام Schema ذخیره میشوند. اما به علت ثابت بودن ماهیت دیتابیس های SQL , ساختار هر دیتابیس مانند پی ساختمان توسط Schema ثابت تعریف شده است. (Predefined Schema)

این قائده مندی و ساختاردهی در بسیاری از موارد کاربردی و مفید میباشد. در کل SQL بسیار پایدار (Stable) و مناسب برای داده های خصوصیت دار و ساختاریافته میباشد. اما در مورد ذخیره سازی داده های بسیار بزرگ و بدون ساختار مشخص, ناگهان نقاط قوت آن به نقاط ضعف تبدیل میشوند و چهارچوب ها و مقررات سفت و سخت ذخیره سازی و کار با داده ها در SQL باعث محدود شدن قابلیت ذخیره سازی اطلاعات متفاوت در کنار هم و کاهش چشمگیر کارایی و سرعت میگردد.

ساختار و عملکرد NoSQL

خلاء ایجاد شده توسط نقاط ضعف SQL در کار با داده های حجیم باعث ایجاد و توسعه NoSQL شد.

NoSQL قابلیت مدیریت کردن و کار با حجم بسیار عظیمی از داده ها را داراست. مشخصا در آن برای کار با داده ها از زبان SQL استفاده نمیشود. بلکه به صورت بسیار ساده و روان از XML یا JSON برای این منظور استفاده میگردد.

از آنجایی که NoSQL باید بتواند انواع مختلف داده های بدون ساختار مشخص را ذخیره کند, در ساختار داخلی آن از “Schema پویا و قابل تغییر” یا “Dynamic Schema” استفاده شده است. این خصوصیت امکان تغییر در ساختار ذخیره سازی داده ها را فراهم کرده و انعطاف فراوانی به دیتابیس در کار با داده های گوناگون و حجیم میدهد.

با این حال از نقاط ضعف NoSQL میتوان به عدم امکان کار با کوئری های پیچیده اشاره کرد. همچنین به نسبت دقت بالای SQL در NoSQL امکان بروز خطاهایی با احتمال بسیار پایین در موقع ثبت و تغییر داده ها وجود دارد. (ریسک پیش آمدن حالت های پیش بینی نشده توسط مدیر دیتابیس, هر چند اندک وجود دارد. مدیر دیتابیس باید با شناخت کامل خصوصیات دیتابیس خود, آن را جهت حفط یکپارچگی داده ها به صورت صحیح مدیریت کند.)

دسته های مختلفی از دیتابیس های NoSQL تاکنون ساخته شده اند. در ادامه به بررسی هر کدام میپردازیم.

انوع مختلف NoSQL

دیتابیس های NoSQL کلید و مقدار (Key-value NoSQL):

در اینگونه دیتابیس ها از یک کلید (Key) که نقش شناسه هر داده را بازی میکند به منظور دریافت و ذخیره سازی داده (Value) استفاده میشود. این دسته به علت سادگی کارکرد پر استفاده ترین نوع دیتابیس های NoSQL میباشد.

دیتابیس های NoSQL اسناد (Document NoSQL):

اینگونه دیتابیس ها به منظور ذخیره سازی و کار با اسنادی با فرمت های XML, JSON , … به کار میروند. از دیتابیس های اسنادی NoSQL به منظور ذخیره سازی داده های بدون ساختار مشخص با پراکندگی بالا استفاده میشود.

دیتابیس های NoSQL چند ستونه (Wide-column NoSQL):

دیتابیس های چند ستونه در نگاه اول همانند دیتابیس های SQL از جدول و ستون و سطر استفاده میکنند. اما عملکرد آن های ارتباطی به جداول SQL ندارد! فقط ظاهر جداول آن ها تا حدی شبیه ساختار جداول SQL میباشد. بر خلاف SQL هر ستون میتواند شامل داده هایی با فرمت و ساختار متفاوت باشد. به عبارتی دیگر نوع تعریف و فرمت یک ستون میتواند در هر سطر متفاوت باشد. این دیتابیس ها انعطاف بسیار بالایی در ثبت و کار با داده های بسیار عظیم و متفاوت دارند.

دیتابیس های NoSQL گرافی (Graph NoSQL):

دیتابیس های گرافی به منظور ذخیره سازی حجم زیادی از داده های ارتباطی (Relational data) طراحی شده اند. به زبان ساده میتوان اینگونه دیتابیس ها را مانند گرافی شامل “داده ها -> راس ها” و “ارتباط ها -> یال ها” در یک گراف هندسی در نظر گرفت. از این دسته دیتابیس ها در ذخیره سازی انواع معماری های داده های شبکه ای نیز استفاده میشود.
graph - گراف

دیتابیس های NoSQL متغیر یا چند مدله (MultiModel NoSQL):

دیتابیس های چند مدله امکان ذخیره سازی و کار با داده ها را در چندین حالت متفاوت فراهم میکنند. اینگونه دیتابیس ها میتوانند تلفیقی از انوع دیگر دیتابیس های NoSQL باشند. (مانند Key-value و گرافی)

NoSQL جایگزین کامل SQL نیست!

باید دقت داشت که NoSQL و SQL هر کدام کاربردهای متفاوتی دارند. همانطور که گفته شد SQL دقت بالاتری در هنگام کار با داده های کوچک دارد و برای کار با داده های ساختاریافته طراحی شده است. در حالی که NoSQL برای کار با داده های کلان و بدون ساختار مشخص طراحی شده است.

از جمله سیستم هایی که SQL در آن ها بهینه عمل میکند میتوان به موارد زیر اشاره کرد:

  • سیستم های مدیریت سطح دسترسی (Access Control). (مثال: مدیریت کاربران سایت و سیستم ها)
  • سیستم های تراکنش بانکی

از جمله سیستم هایی که NoSQL در آن ها بهینه عمل میکند میتوان به موارد زیر اشاره کرد:

  • کلان داده (Big data)
  • موتورهای جستجوگر
  • سیستم های مانیتورینگ و پویش شبکه

چرا سازمان ها نیاز به مهاجرت به NoSQL دارند؟

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

چنین امری سازمان ها را ملزم به بروزرسانی سیستم های سنتی مدیریت دیتابیس (DBMS) به سیستم های نوینی میکند, که امکان بررسی و آنالیز داده هایی عظیم که هر لحظه افزوده میشوند را داشته باشد.

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

مهاجرت از SQL به NoSQL گرچه فرایندی سخت و هزینه بر میباشد, اما با تشخیص صحیح مدیر دیتابیس باعث بهینه تر شدن عملکرد چشمگیر سیستم های اطلاعاتی میشود. قابلیت توسعه و پایداری بالای NoSQL در کار کردن با حجم داده های بالا, با SQL قابل قیاس نیست.

معرفی برخی از دیتابیس های NoSQL

  • Aerospike: اگر به دنبال دیتابیس Key-value بسیار قدرتمند برای کلاسترینگ میگردید aerospike گزینه مناسبی میباشد. این دیتابیس از لحاظ حجم پردازش داده  و سرعت بالاترین رتبه را در Benchmark بدست آورده است. ذخیره سازی اطلاعات در این دیتابیس به صورت ادغامی از Ram و SSD صورت میگیرد.
    aerospike
  • Redis: یک دیتابیس Key-value که برای حجم کار کوچکتر به نسبت aerospike مناسب میباشد. تمامی اطلاعات این دیتابیس در Ram ذخیره میشوند. این دیتابیس قابلیت کلاستر شدن ندارد!
    redis
  • MongoDB: مونگو معروف ترین دیتابیس NoSQL است و برای ذخیره سازی اسناد (Documents) استفاده میشود. اگر نیار به ذخیره سازی حجم بالایی از داده های مختلف و پراکنده را دارید مونگو گزینه مناسبی برای شماست. کار کردن با مونگو به نسبت ساده است و اگر قصد شروع کار و آشنایی با NoSQL ها را دارید شخصا آن را پیشنهاد میکنم.
    mongodb - مونگو
  • Cassandra: این دیتابیس از قوی ترین دیتابیس های NoSQL میباشد و توسط Apache ارائه شده است. دیتابیس Cassandra در دسته Wide-column قرار دارد. قابلیت های بسیار خاص و بالا, Cassandra را از بسیاری از NoSQLهای دیگر برتر میکند. گرچه سرعت پردازش Aerospike از Cassandra بیشتر است اما قابلیت های فراوان و انعطاف بالای Cassandra به عقیده بسیاری آن را قدرتمندترین NoSQL کرده است.
    cassandra
  • Neo4j: دیتابیسی بر پایه گراف (Graph) که برای ذخیره سازی ساختمان داده های مختلف شبکه ای و داده های ارتباطی بسیار مناسب میباشد.
    neo4j

29 نظر دیتابیس NoSQL و انواع آن چیست؟ آیا باید آن را جایگزین SQL کنیم؟

  1. فاطمه

    سلام
    نمی دونم چرا سوال من رو نشون نمیده
    سوالم اینه که کدوم یک از انواع پایگاه داده های nosql از نظر سرعت نوشتن بهتر هستند
    هم سرعت بالاتری تو نوشتن داشته باشه هم پایدار تر باشه در نوشتن (time out ندهد)

    پاسخ
  2. خانه اندروید

    سلام وقت بخیر
    تشکر از مقاله خوب شما
    در پاسخ به این موضوع :
    متاسفانه این علم روز جهانی در داخل کشورمان تاکنون زیاد مورد بحث و استفاده قرار نگرفته است.

    اسنپ و تپسی و الو پیک و …
    از این قابلیت استفاده می کنند و از دیتابیس mongodb
    با احترام.

    پاسخ
    1. شایان کریمی

      با سلام
      بله مسلما برخی شرکت ها و استارت آپ ها از این دسته دیتابیس ها استفاده میکنند اما همچنان در ایران شاهد شناخت و استفاده چشمگیری از NoSQL نیستیم. همچنین اخیرا در برخی دانشگاه ها این موضوع به اختصار آموزش داده میشود.
      در زمان نوشتن این مقاله, به زبان پارسی مقالات چندانی در این رابطه موجود نبود و همچنان نیز مقالات فنی و حرفه ای زیادی در این رابطه موجود نیست. در صورت تمایل کاربران مقالات تخصصی تری در این رابطه ارائه خواهم کرد.
      با سپاس از توجه شما

      پاسخ
  3. عاطفه

    خیلی مقاله ی عالی ای بود و بسیار عالی نگارش شده بود . ممنون از وقتی که برای تهیه اش گذاشتین

    پاسخ
  4. omid

    با سلام
    ممنون از مقاله خوبتون اگر ممکن هست یه صورت دوره ایی در مورد هر یک از دیتابیسها توضیحات بیشتری قرار بدید.

    پاسخ
  5. محمد

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

    پاسخ
  6. هادی

    درود ممنون از مطلب مفیدتان
    سوالی داشتم که آیا nosql خاصی را می شناسید که بصورت سیستمی همانند sqlite عمل کند؟

    پاسخ
  7. هانا

    مطالب بسیار خوب و مفید بودند.فقط کاش به طور مختصر تفاوت های sql , nosql رو بیان میکردید

    پاسخ
  8. محراب

    سلام درود بر شما ، بسیار عالی و کامل بود . اگه میشه یه دوره برگزار کنید یکی از مشهور ترین دیتابیس های nosql رو اموزش بدین . ممنون

    پاسخ

پاسخ دادن به حامد افخمی لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *