شایان کریمی - Shayan Karimi

مقالات و مطالبی پراکنده طبق سلیقه شخصی من

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

در تاریخ
دیتابیس 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) طراحی شده اند. به زبان ساده میتوان اینگونه دیتابیس ها را مانند گرافی شامل “داده ها -> راس ها” و “ارتباط ها -> یال ها” در یک گراف هندسی در نظر گرفت. از این دسته دیتابیس ها در ذخیره سازی انواع معماری های داده های شبکه ای نیز استفاده میشود.

دیتابیس NoSQL گراف

دیتابیس های 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 صورت میگیرد.

آئرواسپایک

Redis: یک دیتابیس Key-value که برای حجم کار کوچکتر به نسبت aerospike مناسب میباشد. تمامی اطلاعات این دیتابیس در Ram ذخیره میشوند. این دیتابیس قابلیت کلاستر شدن ندارد!

ردیس

MongoDB: مونگو معروف ترین دیتابیس NoSQL است و برای ذخیره سازی اسناد (Documents) استفاده میشود. اگر نیار به ذخیره سازی حجم بالایی از داده های مختلف و پراکنده را دارید مونگو گزینه مناسبی برای شماست. کار کردن با مونگو به نسبت ساده است و اگر قصد شروع کار و آشنایی با NoSQL ها را دارید شخصا آن را پیشنهاد میکنم.

مونگو DB

Cassandra: این دیتابیس از قوی ترین دیتابیس های NoSQL میباشد و توسط Apache ارائه شده است. دیتابیس Cassandra در دسته Wide-column قرار دارد. قابلیت های بسیار خاص و بالا, Cassandra را از بسیاری از NoSQLهای دیگر برتر میکند. گرچه سرعت پردازش Aerospike از Cassandra بیشتر است اما قابلیت های فراوان و انعطاف بالای Cassandra به عقیده بسیاری آن را قدرتمندترین NoSQL کرده است.

دیتابیس کاساندرا

Neo4j: دیتابیسی بر پایه گراف (Graph) که برای ذخیره سازی ساختمان داده های مختلف شبکه ای و داده های ارتباطی بسیار مناسب میباشد.

نئو 4 جی


درباره نویسنده

شایان کریمی

شایان کریمی

توسعه دهنده نرم افزار و معامله‌گر بازارهای مالی


نظرات

20 اردیبهشت 1397

مقاله ی بسیار مفیدی بود.

11 مرداد 1397

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

12 مرداد 1397

خواهش میکنم دوست گرامی

20 شهریور 1397

سلام من یه سوالی دارم برای نگه داری history دیتا کدوم nosql بهترین گزینه است ؟

22 شهریور 1397

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

02 مهر 1397

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

04 مهر 1397

سلام برای پاسخ به این سوال بنده باید حداقل یک مطلب کامل تهیه کنم و با یک جمله نمیشه مقایسه درستی انجام داد دوست عزیز.

16 آبان 1397

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

22 آبان 1397

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

28 آبان 1397

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

29 آبان 1397

خواهش میکنم دوست گرامی.. خیلی ممنونم

20 دی 1397

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

23 دی 1397

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

21 اسفند 1397

سلام ممنونم خیلی عالی بود و کمکم کرد.

01 خرداد 1398

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

03 خرداد 1398

خواهش میکنم دوست عزیز

04 شهریور 1398

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

05 شهریور 1398

با سلام بله، UnQLite به صورت کراس پلتفرم LiteDB تحت dotNet.

14 بهمن 1398

بسیار عالی بود این مطلب. ساده، روان و جامع. ممنونم

02 فروردین 1399

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

07 شهریور 1399

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

26 خرداد 1400

خیلی عالی بود مرسی

02 اردیبهشت 1402

درود و سپاس چقدر کوتاه و شیوا بیان فرمودید سپاسگذارم


نظر بدهید: