مقدمه

       امروزه به دلیل فراگیر شدن اینترنت و به وجود آمدن نرم افزارهای تحت وب با کاربران بسیار زیاد و تبدیل شدن نرم افزارهای قدیمی به تحت وب شدن، دیگر پایگاه داده های RDBMS یا سنتی (رابطه ای) پاسخ گوی این نرم افزارها و نیازهای برنامه نویسان نیستند. از دلایل آن می توان به نگه داری داده ها با حجم بسیار زیاد، سرعت بالا در خواندن و نوشتن نام برد. به همین دلایل پایگاه داده های نسل بعدی یعنی NoSQL ها در اواخر دهه اول هزاره سوم به وجود آمدند و بسیار سریع در حال پیشرفت هستند. از ویژگی های NoSQL ها می توان به نحوه ذخیره سازی و نگه داری داده ها به صورت توزیع شده، نبودن رابطه به صورت جداولی، متن باز بودن، بدون Schema بودن و قابلیت گسترش پذیری در سرور های مختلف با محل های جغرافیایی متفاوت اشاره کرد و در این پایگاه داده ها دیگر محدودیت های ساختار های خاص، نرمال سازی و غیر نرمال سازی و بسیاری موارد دیگر را نمی بینیم.

 

مقایسه  NoSQL ها و RDBMS ها

    در این بخش مقایسه ای کوچک میان پایگاه داده های NoSQL یا غیر رابطه ای  و RDBMS یا رابطه ای به طور مختصر خواهیم داشت.

 

———–

RDBMS

NoSQL

انواع

یک نوع با امکانات مختلف

Key-Value , Column Store ,

Document Store, Graph

تاریخچه توسعه

در دهه 1970 برای مقابله با اولین موج از برنامه های ذخیره داده، توسعه داده شدند

در دهه ابتدایی هزاره سوم برای مقابله با محدودیت های پایگاه های داده SQL خصوصاً نگرانی حول مقیاس، تکرار و ذخیره داده بدون ساختار، توسعه یافتند

نمونه

SQL Server, MySQL, Oracle

Aerospike, Sophia, BigTable, MongoDB, Cassandra, HBase, Neo4j

 

 

مدل نگهداری داده

جداول ستون ها و ردیف ها

بر اساس نوع پایگاه داده متفاوت است. برای مثال، انبارهای key-value مشابه پایگاه های داده SQL عمل می کنند، اما تنها دو ستون دارد (key و Value) به همراه اطلاعات پیچیده تری که برخی مواقع درون ستون value ذخیره می شود. پایگاه های داده مبتنی بر سند، تمامی داده های مرتبط با یکدیگر را در یکسنددر JSON، XML و یا سایر فرمت ها که مقدار ها را به صورت سلسله مراتبی در خود جای می دهند، ذخیره می کنند.

 

اسکیما

با حرکت از رکورد یک به رکورد دو، ساختار داده‌ای یکسان می باشد.

با حرکت از رکورد یک به رکورد دو،  ممکن است با دو ساختار داده‌ای متفاوت مواجه شوید.

مقیاس پذیری

عمودی؛ به این معنی که یک سِرور تنها به منظور غلبه بر تقاضای افزایش یافته، باید به میزان زیادی تقویت شود. امکان دارد که پایگاه های داده SQL در میان سِرور های متعددی توزیع شود، اما عموماً نیاز به مهندسی مازاد قابل توجهی است.

افقی؛ به این معنی که برای افزایش ظرفیت، یک راهبر پایگاه داده براحتی می تواند سِرور و یا مواردی همچون فضای ابری را اضافه نماید. پایگاه داده، در صورت لزوم به طور خودکار داده را در میان سرور توزیع می کند.

مدل توسعه

ترکیبی از منبع باز (مانند MySQL و Postgres)

و منبع بسته (مانند پایگاه داده Oracle)

اکثراً منبع باز

پشتیبانی تراکنش ها

اکثراً به صورت کامل پشتیبانی می کنند

در شرایط خاص و در سطوح خاص

(سطح سند در مقابل سطح پایگاه داده)

زبان تغییرات

زبان برنامه نویسی SQL  – در برخی انواع مختلف مانند: T-SQL , PL-SQL, …

 سمت برنامه نویسی – زبان های مختلف

مانند : xml – Json – Java Script , …

پایایی

امکان پیکربندی برای پایایی زیاد و قوی

وابسته به محصول، برخی پایایی زیاد را فراهم می آورند (برای مثال MongoDB) در حالیکه برخی پایایی مشروط و نسبی فراهم می آورند.


 

انواع NoSQL

    در این بخش اشاره کوتاهی بر انواع پایگاه داده های NoSQL کرده و به صورت مختصر توضیح خواهیم داد.

    پایگاه داده های NoSQL بر اساس نوع ذخیره سازی و ارتباط داده ها به 4 دسته تقسیم می شوند:

  • Key-Value Store (کلید-مقدار)
  • Column Family Store (ستونی)
  • Document Store (سندگرا)
  • Graph Based (مبتنی بر گراف)

 

Key-Value

      ساده‌ترین حالت از دسته‌بندی‌های NoSQL دسته، کلید-مقدار  می‌باشد و معمولا در سیستم هایی مورد استفاده قرار می گیرد که داده‌ها از یکدیگر متمایز هستند و اصولا در دسترس بودن داده‌ها نسبت به مواردی نظیر پایائی اهمیت بیشتری دارد. در این معماری فقط یک کلید داریم (که مانند کلید اصلی در پایگاه داده های رابطه ای عمل می کنند) و یک مقدار داریم که مقدار معادل آن کلید را باز می گرداند.

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

چند نمونه:

    Aerospike , Redis ,  LevelDB ,  …

 

Column Family Store

      پایگاه های داده ستونی با توسعه کلید-مقدارها بوجود آمده اند. این سیستم ها در واقع بجای یک جفت کلید-مقدار، می توانند برای هر رکورد چندین جفت کلید-مقدار داشته باشند. در این نوع نیازی به ساختار نداریم و هر رکورد می تواند چندین ستون با تعداد صفات متفاوت داشته باشند.

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

چند نمونه:

    Hadoop/Hbase , Cassandra , Amazon SimpleDB , …

 

Document Store

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

      از مزایای این دسته می توان به ذخیره مقدار زیادی داده های بی ربط نام برد.

چند نمونه:

    MongoDB , Elastic Search , CouchDB , RavenDB , …

 

Graph Based

            این دسته به داده ها، از دید کاملا متفاوتی نسبت به دسته های قبلی نگاه می کند. داده ها را مانند یک گراف به هم مرتبط می کند، و ساختار یک درخت یا گراف را به داده ها می دهد. در این پایگاه داده، رکوردها هنگام درج شدن در دیتابیس توسط یک یا چند صفت به هم مرتبط می شوند؛ و اینکه انجام عملیات ریاضی  بسیار ساده تر از دسته های دیگر است. کاربرد این دسته برای زمانی که ارتباطات معین و مشخصی میان رکوردها وجود دارد، می باشد. مانند شبکه های اجتماعی

از مزایای این دسته می توان به مناسب بودن برای تحقیقات علمی و فنی اشاره کرد.

چند نمونه:

Neo4J , Sparksee , InfoGrid , AllegroGraph , …

 

نظریهCAP

            نظریه ای که راهنمای بسیار خوبی برای انتخاب پایگاده داده مناسب با نیازهای نرم افزار می باشد، نظریه CAP است.

 

نظریه CAP

 

 

    نظریه CAP از 3 راس Availability, Consistency, Partition-tolerance تشکیل شده است.

    Availability به این معنی می باشد که کاربران همیشه بتوانند عملیات درج کردن و خواندن را داشته باشند یعنی اگر سرور اصلی و یا یک سروردیگر دچار مشکل شد ارتباط کاربران قطع نشود و همچنان دسترسی داشته باشند.

    Consistency به این معنا می باشد داده هایی که تمام کاربران مشاهده می کنند از هر جا برای تمام آنها داده های یکسان نمایش داده شود و هیچ کاربری نسبت به دیگری داده های کمتر، بیشتر یا اشتباهی نبیند که یعنی پایگاه داده تضمین می کند که اطلاعات همیشه و همه جا یکسان می باشد.

    Partition-telorance به این معنا می باشد که سرور های مختلف در مکان های مختلف جغرافیایی به طوری توزیع میشوند که سیستم به طور یکپارچه با همه نودها در ارتباط می باشد و کار می کند.

   طبق این نظریه پایگاه داده ها در واقعیت فقط می توانند بر اساس 2 راس شکل بگیرند. البته پایگاه داده هایی هستتند که به استثنا برخی از قابلیت های راس سوم را هم دارند ولی در اکثریت فقط 2 راس می توانند باشند. یعنی یا باید CA باشند که در این حالت استفاده از پایگاه داده های رابطه ای مناسب می باشند. یا باید AP باشند که در این صورت پایگاه داده های غیر رابطه ای یا NoSQL پیشنهاد داده می شوند که معمولا از نوع کلید-مقدار و یا ستونی هستند. و یا CP باشند که بیشتر پایگاه داده هایی که از نوع NoSQL و در دسته های ستونی، سندگرا و یا مبتنی بر گراف هستند پیشنهاد می شوند که البته در نمودار بالا چند نمونه از این پایگاه داده ها بر اساس اضلاع مثلث پیشنهاد شده اند.