۱۳۹۳/۱۱/۲۸

پایگاه داده NoSQL

مقدمه 

در ادامه صبحت‌های که در پیشگفتار مطلب قضیه CAP در سیستم‌های توزیع شده، در این مطلب به معرفی پایگاه‌های داده NoSQL (نواس‌کیوال) می‌پردازم. این مطلب شامل معرفی نوع پایگاه داده NoSQL و ویژگی‌های آن است. در نهایت در مورد توضیحاتی در زمینه Polyglot Persistence ارائه خواهم کرد.

محدودیت های RDBMS و پیدایش جنبش NoSQL

همزمان با فراگیری دسترسی به وب در سطح جهان و با افزایش سرعت و حجم تولید اطلاعات، پایگاه‌های RDBMS مانند MySQL با محدودیت‌هایی مواجه شدند. این محدودیت ها عبارتند از:
  1. گسترش دادن  آن‌ها (Scalability) دشوار است.
  2. معماری آن‌ها به گونه‌ای است که در دسترس بودن تمام سیستم (Availability) دشوار نموده است.
  3. در ساختار و نوع ذخیره سازی اطلاعات محدودیت دارند.
  4. نحوه رشد آن‌ها به صورت Scale up است. به معنی اینکه برای افزایش کارایی باید سخت افزار هر سیستم را تقویت نمایید. در نتیجه هزینه تهیه و نگهداری سیستم‌ها به شدت افزایش می‌یابد.

پایگاه داده NoSQL چیست؟

عبارت NoSQL مخفف Not Only SQL بوده و به جنبش پدید آمدن مجموعه پایگاه‌های داده‌ای اطلاق می‌شود که مفاهیم متقاوتی با پایگاه های داده RDBMS مانند MySQL دارند. از جمله این مفاهیم می‌توان به موارد زیر اشاره کرد:
  • رابطه‌ای (Relational) نیستند. Join و مواردی از این قبیل که شامل رابطه‌ای بین چند جدول است، در NoSQL وجود ندارد.
  • به صورت افقی رشد می‌کنند. اصطلاحا Scale out یا Horizontally Scalable هستند. البته تمامی پایگاه‌های NoSQL امکان Scale out شدن را ندارد و برخی نیز به سختی Scale out می‌شوند.
  • امکان کنترل و مدیریت Availability (در دسترس بودن سرویس) ساده‌تر است.
  • گستره بیشتری از انواع داده و ساختارها را پشتیبانی می‌نمایند.

انواع پایگاه‌های داده NoSQL

انواع پایگاه های داده NoSQL
انواع پایگاه های داده NoSQL
یکی از مهمترین ویژگی‌های جنبش پایگاه‌های داده NoSQL پشتیبانی نمودن گستره عظیمی از انواع ساختار داده‌ها است. این ویژگی باعث انعطاف پذیری در مدل سازی و ذخیره اطلاعات شده است. از این رو پایگاه‌های داده NoSQL بر اساس مدل‌سازی اطلاعات به دسته‌بندی‌های زیر تقسیم می‌شوند:
  • Column: Cassandra, HBase
  • Document: CouchDB, Couchbase, MongoDB
  • Key-value: Dynamo, Redis, Riak
  • Graph: Neo4J, InfiniteGraph
  • Multi-model: OrientDB, FoundationDB
در نظر داشته باشید که انواع پایگاه‌های داده NoSQL برای منظورهای مختلفی طراحی شده است. به معنی آنکه هر کدام مزیت‌های خاص خود را دارند. به همین جهت در هنگام انتخاب پایگاه داده، عامل‌های زیر را در نظر گرفته و بررسی نمایید:
  1. نوع اطلاعاتی که قصد ذخیره سازی آن‌ها را دارید. 
  2. مدل سازی اطلاعات برای ذخیره و خواندن آن‌ها.
  3. میزان اطلاعات ورودی و خروجی سیستم.
  4. اهمیت Consistency و Availability در مدل تجاری‌تان. مطلب قضیه CAP در سیستم‌های توزیع شده را مطالعه نمایید.
  5. در دسترس بودن نیروی متخصص و مستندات کافی برای نگهداری سیستم (Maintenance)
نکته: با توجه به موارد قید شده در بالا، لزوما نمیتوان نوع خاصی از پایگاه‌های داده RDBMS یا NoSQL را به عنوان بهترین راه حل برای تمام بخش‌های یک سیستم در نظر گرفت. مارتین فاولر مفهوم Polyglot Persistence را برای توضیح بیشتر در این زمینه ارائه کرده است.

منظور از Polyglot Persistence چیست؟

هدف از Polyglot Persistence انتخاب و استفاده مناسب از پایگاه‌های داده متفاوت برای بخش‌های مختلف یک سیستم است. به بیان دیگر ممکن است در یک سیستم شما از چندین پایگاه داده استفاده نمایید. عبارت Polyglot به معنای دانستن زبان‌های مختلف بوده و Persistence نیز به معنای ادامه حیات است. با این اوصاف، مفهوم Polyglot Persistence یعنی ادامه حیات با استفاده از شناختن زبان‌های مختلف (در اصل و در اینجا، پایگاه‌های داده مختلف) است. به بیانی ساده‌تر، مفهوم Polyglot Persistence، همانند Polyglot Programming، انتخاب بهترین گزینه برای ادامه حیات موضوعی است که روی آن کار می‌کنیم. تصویر زیر Polyglot Persistence را به صورت گویاتر توضیح داده است:
Polyglot Persistence
Polyglot Persistence

بزودی مطالب بیشتری در زمینه Big Data منتشر خواهم کرد.

۸ نظر:

  1. سعید عزیز سپاس فراوان
    بسیار لذت بردم از مطلبت.
    امیدوارم سرعا انتشارت رو بالا ببری :دی
    خیلی دوست دارم این مبحث رو
    مجدد سپاسگزارم.

    پاسخحذف
    پاسخ‌ها
    1. سلام صالح جان،
      خوشحالم که برات مفید بوده. در تلاش هستم که به صورت مرتب وبلاگ رو بروز کنم. بخصوص در زمینه مباحث بیگ دیتا و NoSQL.

      حذف
  2. مطالب بسیار عالی قرار دادید .
    نتیجه گیری من برای مباحث Machine learning استفاده از cassandra بود . با توجه به اینکه حجم بالایی از نوشتن داده (برای مثال اطلاعات رفتاری لحظه به لحظه کاربر) داریم .
    نظر شما هم همینه؟

    پاسخحذف
    پاسخ‌ها
    1. خوشحالم که مطلب براتون مفید بوده.
      Cassandra برای حجم بالای نوشتن اطلاعات گزینه بسیار مناسبیه. اگه اطلاعاتتون رو درست مدل سازی کنید، به نتایج خیره کننده ای میرسید.

      حذف
  3. خوب بود.
    منتظر ادامه مقالات این موضوع هستیم.
    با تشکر

    پاسخحذف
  4. ممنون از مطاالب خوبتون
    ببخشید برای مقایسه بین پایگاه داده های NoSQl چه معیارهایی را باید مورد توجه قرار داد؟ و هنگام انتخاب بین آن ها در سطح اینترپرایز چه فاکتورهایی مد نظر باید باشد؟

    پاسخحذف
    پاسخ‌ها
    1. سلام،
      خوشحالم براتون مفید بوده. برای انتخاب پایگاه NoSQL، حداقل باید موارد زیر رو در نظر گرفته و بررسی کنید:
      ۱- نوع داده (Data Model)
      ۲- حجم داده
      ۳- انتخاب دو عنوان از بین (Consistency, Availability و Partition tolerance)
      http://blog.zebardast.ir/2015/02/cap-theorem-distributed-computing.html

      ۴- نوع و اندازه کلاستر
      ۵- نحوه جستجو در داده‌ها

      حذف