مقدمه
در ادامه صبحتهای که در پیشگفتار مطلب قضیه CAP در سیستمهای توزیع شده، در این مطلب به معرفی پایگاههای داده NoSQL (نواسکیوال) میپردازم. این مطلب شامل معرفی نوع پایگاه داده NoSQL و ویژگیهای آن است. در نهایت در مورد توضیحاتی در زمینه Polyglot Persistence ارائه خواهم کرد.
محدودیت های RDBMS و پیدایش جنبش NoSQL
همزمان با فراگیری دسترسی به وب در سطح جهان و با افزایش سرعت و حجم تولید اطلاعات، پایگاههای RDBMS مانند MySQL با محدودیتهایی مواجه شدند. این محدودیت ها عبارتند از:
- گسترش دادن آنها (Scalability) دشوار است.
- معماری آنها به گونهای است که در دسترس بودن تمام سیستم (Availability) دشوار نموده است.
- در ساختار و نوع ذخیره سازی اطلاعات محدودیت دارند.
- نحوه رشد آنها به صورت 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 بر اساس مدلسازی اطلاعات به دستهبندیهای زیر تقسیم میشوند:
- Column: Cassandra, HBase
- Document: CouchDB, Couchbase, MongoDB
- Key-value: Dynamo, Redis, Riak
- Graph: Neo4J, InfiniteGraph
- Multi-model: OrientDB, FoundationDB
در نظر داشته باشید که انواع پایگاههای داده NoSQL برای منظورهای مختلفی طراحی شده است. به معنی آنکه هر کدام مزیتهای خاص خود را دارند. به همین جهت در هنگام انتخاب پایگاه داده، عاملهای زیر را در نظر گرفته و بررسی نمایید:
- نوع اطلاعاتی که قصد ذخیره سازی آنها را دارید.
- مدل سازی اطلاعات برای ذخیره و خواندن آنها.
- میزان اطلاعات ورودی و خروجی سیستم.
- اهمیت Consistency و Availability در مدل تجاریتان. مطلب قضیه CAP در سیستمهای توزیع شده را مطالعه نمایید.
- در دسترس بودن نیروی متخصص و مستندات کافی برای نگهداری سیستم (Maintenance)
نکته: با توجه به موارد قید شده در بالا، لزوما نمیتوان نوع خاصی از پایگاههای داده RDBMS یا NoSQL را به عنوان بهترین راه حل برای تمام بخشهای یک سیستم در نظر گرفت. مارتین فاولر مفهوم Polyglot Persistence را برای توضیح بیشتر در این زمینه ارائه کرده است.
منظور از Polyglot Persistence چیست؟
هدف از Polyglot Persistence انتخاب و استفاده مناسب از پایگاههای داده متفاوت برای بخشهای مختلف یک سیستم است. به بیان دیگر ممکن است در یک سیستم شما از چندین پایگاه داده استفاده نمایید. عبارت Polyglot به معنای دانستن زبانهای مختلف بوده و Persistence نیز به معنای ادامه حیات است. با این اوصاف، مفهوم Polyglot Persistence یعنی ادامه حیات با استفاده از شناختن زبانهای مختلف (در اصل و در اینجا، پایگاههای داده مختلف) است. به بیانی سادهتر، مفهوم Polyglot Persistence، همانند Polyglot Programming، انتخاب بهترین گزینه برای ادامه حیات موضوعی است که روی آن کار میکنیم. تصویر زیر Polyglot Persistence را به صورت گویاتر توضیح داده است:
![]() |
Polyglot Persistence |
بزودی مطالب بیشتری در زمینه Big Data منتشر خواهم کرد.