هنوز چند بایت مونده که پیدا کنم...

چه موقع باید از پایگاه داده های NoSQL استفاده کرد؟

این روزها همه جا حرف از پایگاه داده های NoSQL هستش. حتی مطالبی هم قبلا گذاشته بودم در مورد مانگو دی بی (MongoDB) به عنوان نمونه ای از این نوع پایگاه داده. سوال اینجاست که چرا و چه وقت باید از این مدل پایگاه داده استفاده کرد. من این مطلب رو به روش خودم و بر اساس تجربیات خودم شرح میدم:
 
بهتره این تصور ذهنی را از کلمه NoSQL به این تعریفی که میکنم تغییر بدید که نوسیکوئل به معنی عدم استفاده از دیتابیس های رابطه ای (RDMBS) نظیر Microsoft SQL Server یا Oracle و یا MySQL نیست! ابدا نیست! و اکیدا نیست!
 

من نظرم اینه که این اسم را سر نام Not Only SQL در نظر بگیریم.

 
خوب این یه مفهموم جدید هم نیستش. شخصا از XML به عنوان یک پایگاه داده NoSQL سالهاست استفاده میکنم. اما نرم افزارهای مدیریتی مستقل این چنینی نظیر Microsoft Azure DocumentDB یا MongoDB دیر زمانی نیست که متولد شدن.
 
استفاده هایی که برای من داشته توی پروژه ها، یعنی کی از نوسیکوئل استفاده کردم و توصیه میکنم استفاده کنید:
 
  • زمانی که ساختار داده ای مشخصی برای پایگاه داده وجود نداشته. در واقع Data Structure به گونه ای نامشخص یا پویا بوده. مثلا فرض کنید یک سیستم فروش آنلاین را دارید کار میکنید، خوب تعدادی محصول در این سیستم باید تعریف شه که میتونه از یک خانواده نباشه! مثلا فروشگاه های مجازی که اتفاقا بحث داغی هست و سرتاسر نت رو پر کردن از لوازم آرایشی و بهداشتی ارائه میدن تا صوتی و تصویری و حتی لپ تاپ و خلاصه از شیر مرغ تا جون آدمیزاد هست توشون.
     
    خوب کلمه کلیدی رو فراموش نکنیم! خصوصیت های متفاوت برای گروه های متفاوت محصولات مورد فروش در مثال. در این ساختار سخته که اطلاعات در پایگاه داده های رابطه ای هم تعریف و هم ذخیره شه و همچنین راندمان خوبی هم ارائه بده. خوب میتونید از NoSQL استفاده کنید!

    نکته : سخت از دید من میزان زمان صرف شده برای یک واحد کار هستش نه پیچیدگی مهارتی!
     
  • وقتی که مدل ساختاری شما پر از موجودیت های پیرو (Weak Entity) حول محور موجودیت های اندک قوی (Strong Entity) هست.

    در واقع بهتره گفت که یه تعداد کمی آبجکت والد (Parent) داریم که هر کدوم تعداد زیادی آبجکت فرزند دارن (Child). و از نظر انتزاعی ساختار درختی رو پیاده میکنن که می تونه انواع درخت های بحث ساختمان داده را پوشش بده. در این حالت توصیه میکنم حتما از NoSQL استفاده کنید!

  • اگر میخواهید از قابلیت خوشه بندی (Clustering) داده ها به صورت توزیع شده در چند سرور استفاده کنید و نه از یک سرور یکپارچه که لازمه سیستم های رابطه ای هست می تونید از NoSQL استفاده کنید!
     
  • حتی اگر میخواید از پایگاه داده های رابطه ای استفاده کنید. برای کش (Caching) داده ها و نتایج کوئری ها و یا برای داده هایی نظیر شمارنده ها و یا حتی ترجیحات کاربری یا نرم افزار (preferences) حتما از NoSQL استفاده کنید!
     
  • موقع ذخیره مستندات (Document). منظور از مستندات فایل های رسمی یا محصول واژه پردازها نیست. هر وقت گرافی کامل از داده ها به صورت متنی وجود داره مثل فرمت محبوب و معروف JSON شک نکنید که باید از NoSQL استفاده کنید!
 
تکلیف JOIN چی میشه؟

در اول کار یکم پیچیده به نظر میاد که وقتی قابلیت جوین (پیوند داده ها) در NoSQL وجود نداره چطور میشه داده یابی یا به تبع اون داده کاوی کرد؟ بذارید یه مثال بی ربط بزنم. فرض کنید یه ماشین بنزینی خریدین آیا وقتی پمپ دیزل تو جاده نمی بینید نگران میشید؟

مساله ما الان همینه وقتی با NoSQL کار میکنید باید مدل NoSQL فکر کنید. وقتی گراف داده ای ما کامل و مستقل هست به صورتی که ما انتخاب کردیم که از NoSQL استفاده کنیم مطمئن باشید به ندرت حالتی پیش میاد که نیاز به جوین کردن داده ها داشته باشید. که برای استثنائات میتونین از کد سمت سرور استفاده کنید نه سمت پایگاه داده.
 
از نظر تئوریک
 
- NoSQL برای حجم بسیار بزرگ داده ای ساخته شده جایی که پایگاه داده های رابطه ای در درخواست های زیاد کاربری بعضا ضعیف عمل میکنن.
- NoSQL ها برای از بین بردن جوین ها طراحی شدن جایی که گلوگاه سیستم های رابطه ای هست.
- NoSQL برای تبدیل مدل رابطه ای به مدل شی گرا پا به عرصه گذاشته است.
 
نتیجه :
 
اگر برنامه نویس یا معمار نرم افزار سازمانی روبه رشد هستید! NoSQL شریک خوبی برای شما است. اما نمی توان گفت که می توانید پایگاه داده های رابطه ای را کلا حذف کنید. معماری محبوب من معماری هست که از مزایای هر دو استفاده کنه و سیستم رو تو گلوگاه ها نجات بده!
 
توصیه میکنم برا مطالعه بیشتر یه سر به وب سایت مارتین فولر بزنید.
 
نویسنده : محمد ملک مکان
یکشنبه 20 دی 1394
+ 271 -

خوشحال میشیم نظرتُ بدونیم