پایگاه داده NoSQL چیست و چه تفاوتی با SQL دارد؟
پایگاه داده NoSQL رویکردی برای مدیریت پایگاه داده است که میتواند طیف گستردهای از مدلهای داده را در فرمتهای گراف، ستونی گسترده، کلید-مقدار (key-value) و سندی در خود جای دهد. با ما همراه باشید…
پایگاه داده NoSQL به طور کلی غیر رابطهای، توزیع شده، انعطاف پذیر و مقیاس پذیر است. سایر ویژگیهای مشترک پایگاه داده NoSQL شامل نداشتن اسکیمای پایگاه داده، خوشه بندی دادهها، پشتیبانی از تکرار و ثبات نهایی و برخلاف سازگاری تراکنش ACID ( یکپارچگی، ثبات، ایزوله بودن، دوام یا ماندگاری) در پایگاههای داده SQL و رابطهای است. بسیاری از سیستمهای پایگاه داده NoSQL نیز منبع باز (open source) هستند.
اصطلاح NoSQL را در اصل از خود این کلمه گرفتند. یعنی چون SQL به عنوان API یا رابط برنامه نویسی اپلیکیشن و برای دسترسی به داده کاربردی نداشت، NoSQL نامیده شد. با این حال فراگیر بودن و مفید بودن SQL باعث شد بسیاری از پایگاههای داده NoSQL از SQL پشتیبانی کنند.
انواع پایگاههای داده NoSQL
چهار نوع سیستم پایگاه داده NoSQL وجود دارد که رایج هستند و هر کدام از مدل دادهی متفاوتی استفاده میکنند. در نتیجه، تفاوت قابل توجهی بین هر نوع NoSQL ایجاد میشود.
پایگاه داده سندی (Document Database): این پایگاه داده که document stores نیز نامیده میشوند، دادههای نیمه ساختار یافته و توضیحات آن دادهها را در قالب سند ذخیره میکنند. آنها توسعه دهندگان را قادر میسازند تا برنامهها را بدون رجوع به اسکیمای (schema) اصلی ایجاد و به روز کنند. استفاده از پایگاه داده سندی همراه با زبان برنامه نویسی جاوا اسکریپت (JavaScript) و نشانه گذاری شی جاوا اسکریپت (JSON) افزایش یافته است. JSON استانداردی برای قالب بندی مبتنی بر متن است که در بین توسعه دهندگان برنامههای وب ارزش زیادی پیدا کرده است. document database همچنین برای مدیریت محتوا و مدیریت دادههای اپلیکیشن گوشی مانند پلتفرمهای وبلاگ نویسی، تجزیه و تحلیل وب و اپلیکیشنهای تجارت الکترونیکی استفاده میشوند. کوچ بیس سرور (Couchbase Server)، کوچ دیبی (CouchDB) و مارک لاجیک (Mark Logic) نمونههایی از پایگاههای سندی هستند.
پایگاه دادهی گراف (Graph: (Graph data stores دادههایی مانند گرههایی که شبیه سطر در پایگاه داده رابطهای هستند و همچنین یالهایی (پیوند یا لینک هم نامیده میشوند) که ارتباط بین گرهها را نشان میدهند، سازماندهی میکنند. چون سیستم گراف ارتباط بین گرهها را ذخیره میکند، میتواند نمایش عمیق تر و غنیتری از روابط داده را پشتیبانی و نشان دهد. همچنین، برخلاف مدلهای رابطهای که روی اسکیماهای دقیق تکیه میکنند، مدل دادهی گراف میتواند به مرور در طول زمان و استفادهی بیشتر تکامل یابد. Graph database به عنوان یکی از انواع NoSQL در سیستمهایی استفاده میشوند که باید روابطهایی مانند پلتفرمهای رسانههای اجتماعی، سیستم های رزرو یا مدیریت ارتباط با مشتری را ترسیم کنند. نمونههایی از پایگاههای داده گراف شامل AllegroGraph ،IBM Graph و Neo4j هستند.
پایگاههای داده کلید-مقدار یا Key-Value Database: این سیستمها یک مدل داده ساده را پیاده سازی میکنند که یک کلید منحصر به فرد را با یک مقدار یا value مرتبط جفت میکند. چون این مدل ساده است میتوان از آن برای توسعه برنامههای بسیار مقیاس پذیر و کارآمد استفاده کرد. Key-value database برای مدیریت session و تشخیص برنامههای وب ایده آل هستند، مانند مواردی که هنگام مدیریت، جزئیات سبد خرید برای خریداران آنلاین یا برای مدیریت جزئیات session برای بازیهای چند نفره مورد نیاز است. این پیاده سازیها در نحوه قرارگیری آنها با RAM، درایوهای solid-state یا دیسک درایو متفاوت هستند. نمونههایی از Key-value database شامل Aerospike ،DynamoDB ،Redis و Riak میشوند.
پایگاههای داده ستونی گسترده یا Wide-column stores: این پایگاه دادهها از جدولها، ستونها و سطرهایی (row) آشنا که شبیه جدولهای پایگاه داده رابطهای هستند، استفاده میکنند اما نام ستونها و قالب بندی آنها میتواند از سطر به سطر در یک جدول متفاوت باشد. هر ستون نیز جداگانه بر روی دیسک ذخیره میشود. برخلاف ذخیره سازی سنتی مبتنی بر ردیف، Wide-column stores هنگام پرس و جوی دادهها توسط ستونها بسیار مناسب است. اپلیکیشنهای معمول که این نوع پایگاههای داده میتوانند در آن کاربردی باشند، شامل موتورهای پیشنهادی، کاتالوگ، تشخیص کلاه برداری و ثبت وقایع است. نمونههایی از مخازن ستونی گسترده نیز شامل Accumulo ،Amazon SimpleDB، Cassandra، HBase و Hypertable میشوند.
اینها فقط دسته بندیهای اساسی پایگاه داده NoSQL هستند. با گذشت زمان فروشندگان بخشهایی از انواع مختلف پایگاه داده NoSQL را ترکیب کرده و با یکدیگر مطابقت دادند تا به سیستمهای مفیدتری دست یابند. برای مثال، این تحول در MarkLogic مشاهده میشود که یک گراف استور (graph store) و عناصر دیگر را به پایگاههای داده سندی اصلی خود (document database) اضافه کرد. Couchbase Server از دو رویکرد key-value و سند (document) پشتیبانی میکند.
پایگاه داده کاساندرا (Cassandra) عناصر key-value را با یک wide-column store و یک پایگاه دادهی گراف ترکیب کرده است. گاهی اوقات اجزای NoSQL با بخشهای SQL ترکیب میشوند و پایگاههای داده متنوعی را ایجاد میکنند که از آنها به عنوان پایگاههای داده چند مدلی (multimodel) یاد میشود.
مزایای NoSQL
استفاده از پایگاههای داده NoSQL چندین مزیت دارد، برای مثال:
- پایگاههای داده NoSQL توسعه اپلیکیشن را ساده میکنند، به ویژه برای اپلیکیشنهای تعاملی وب در زمان واقعی (real-time) مانند مواردی که از REST API و خدمات وب استفاده میکنند، کاربردی هستند.
- این پایگاههای داده قابلیت تغییر پذیری را برای دادههایی که نرمال سازی نشدند، فراهم میکند. این امر نیاز به یک مدل داده انعطاف پذیر یا ویژگیهای متفاوتی دارد که برای موجودیتهای(entities) دادههای مختلف هستند.
- آنها مقیاس پذیری را برای مجموعه دادههای بزرگتر که در اپلیکیشنهای تحلیلی و هوش مصنوعی (AI) رایج هستند، ارائه میکنند.
- پایگاههای داده NoSQL برای نیازهایی که در فضای ابری، تلفن همراه، رسانههای اجتماعی و کلان دادهها وجود دارند، مناسب تر هستند.
- پایگاههای داده NoSQL برای استفاده در موارد خاصی طراحی شدند و استفاده از این پایگاهها برای آن اپلیکیشنهای خاص آسانتر از پایگاه SQL یا پایگاه دادهی رابطهای است که هدف کلی دارد.
معایب NoSQL
معایب استفاده از پایگاه داده NoSQL شامل موارد زیر است:
- هر پایگاه داده NoSQL سینتکس (syntax) خاص خود را برای پرس و جو و مدیریت دادهها دارد. SQL برخلاف آن به عنوان یک زبان میانجی یا lingua franca برای سیستمهای پایگاه داده رابطهای و SQL عمل میکند.
- به علت نداشتن اسکیمای ثابت و محدودیتهای پایگاه داده یکپارچگی داده که داخل سیستمهای پایگاه داده رابطهای و SQL قرار دارد، حذف میشود.
- برای استفاده از دادهها یک اسکیما با نوعی ساختار معین مورد نیاز است. این ساختار از طریق NoSQL باید به جای مدیر پایگاه داده و توسط توسعه دهنده پایگاه داده اجرا شود.
- چون اکثر پایگاههای داده NoSQL از مدل پایداری نهایی استفاده میکنند، سطح یکپارچگی داده را که در پایگاههای داده SQL است، ارائه نمیدهند. گاهی اوقات دادهها پایدار نیستند؛ یعنی برای تراکنشهایی که نیاز به یکپارچگی فوری دارند از جمله تراکنشهای بانکی و خودپرداز مناسب نیستند.
- چون پایگاههای داده NoSQL جدیدتر هستند، استانداردهای جامعی در صنعت مانند پیشنهادات رابطهای و SQL DBMS وجود ندارد.
تفاوت NoSQL و SQL چیست؟
پایگاههای داده SQL برای اهداف کلی استفاده میشوند در حالی که پایگاههای داده NoSQL برای استفاده در موارد خاص طراحی شدند. تفاوتهای اصلی بین NoSQL و SQL را میتوان در پنج دسته زیر خلاصه کرد: API، مدل داده، موارد مورد نیاز در اسکیما، مقیاس پذیری و یکپارچگی دادهها. هر کدام از این دو پایگاه داده رویکرد متفاوتی را برای این جنبههای ذخیره و بازیابی داده به کار میبرند.
- رابط برنامه نویسی اپلیکیشن یا API: بسیاری از پایگاههای داده NoSQL یک زبان پرس و جو شبیه به SQL ارائه میدهند. اما پایگاه داده SQL که به عنوان یک API برای دادههای موجود در دیتابیس عمل میکند، برای NoSQL مورد نیاز نیست. SQL برای پایگاههای داده SQL معمولاً تنها یا اصلی ترین رابط داده محسوب میشود.
- مدل داده: در سیستمهای پایگاه داده NoSQL، دادهها به عنوان جدولها با سطرها (row) و ستونهای ثابت و مانند SQL DBMS مدل سازی نمیشوند. در عوض بسته به پایگاه دادهی NoSQL دادهها میتوانند به عنوان اسناد JSON، گرافهایی با گرهها و یالها یا دو جفت Key-value مدل سازی شوند. مخازن ستونی گسترده از مفهوم جدول و سطر استفاده میکنند اما، ستونها میتوانند از سطر به سطر درون یک جدول پویا باشند.
- اسکیما یا ساختار: اسکیما برای پایگاه دادهی NoSQL انعطاف پذیر است؛ بدین معنی که هیچ ساختار ثابتی برای خودِ دادهها، انواع دادهها و طول عناصر داده وجود ندارد. دادهها میتوانند به صورت فرم آزاد یا بدون ساختار و اسکیما ذخیره شوند. این رویکرد انعطاف پذیری بالاتری را به برنامه نویسان ارائه میدهد و باعث توسعه و پیشرفت آسان تری میشود.
در پایگاه دادهی SQL اسکیما ثابت میباشد و انواع و طول دادهها برای هر ستون غیر قابل تغییر است و هر سطر باید با آرایش ستون و ساختار تعریف شده مطابقت داشته باشد. به عنوان مثال، اگر یک ستون به عنوان یک عدد صحیح تعریف شود، فقط دادههای عدد صحیح را میتوان در ستون ذخیره کرد و هرگونه تلاش دیگری برای انجام این کار توسط DBMS رد میشود. این رویکرد کیفیت دادهها را بهتر میکند چون DBMS هنگام اضافه شدن دادهها قواعد منظم خود را اجرا میکند.
- مقیاس پذیری: پایگاههای داده NoSQL معمولاً مقیاس پذیری افقی را اجرا میکنند که به آن مقیاس پذیری رو به بیرون (scaling out) نیز گفته میشود. مقیاس پذیری شامل افزودن سخت افزار بیشتر به یک سیستم، معمولاً در قالب سرورهای کالای اولیه جدید است. قسمت بندی افقی (hotizontal partitioning) از تکنیک شاردینگ (sharding) برای تجزیه پایگاههای داده بزرگ به بخشهای کوچکتر که در چندین سرور پخش میشوند، استفاده میکند. و به طور مکرر در سیستمهای NOSQL اتفاق میافتد.
متد SQL به طور معمول مقیاس پذیری عمودی است که به آن مقیاس پذیری رو به بالا (scaling up) نیز گفته میشود. از طریق مقیاس پذیری عمودی منابع اضافی مانند CPU قویتر یا حافظه اضافی برای کنترل حجم کار اضافی یا بهبود عملکرد اضافه میشوند.
- یکپارچگی داده: پایگاههای داده NoSQL و SQL از رویکردهای متفاوتی برای محافظت از یکپارچگی دادهها هنگام ایجاد، خواندن، به روز رسانی و حذف آنها توسط اپلیکیشن و کاربران استفاده میکنند.
بیشتر سیستمهای پایگاه داده NoSQL یکپارچگی دادهها را با متدی به نام BASE مدیریت میکنند. این رویکرد به معنی اساساً در دسترس و Soft State یا حالت تغییر دیتا بدون تعامل اپلیکیشن به دلیل ثبات نهایی است. با استفاده از BASE، دادهها ممکن است برای یک دوره زمانی ناپایدار باشند اما تکرار پایگاه داده در نهایت همه نسخههای دادهها را به روز میکند تا ثبات پیدا کنند. برخی از اپلیکیشنها میتوانند این نوع دادههای ناسازگار را تحمل کنند اما برخی دیگر هم نمیتوانند این کار را انجام دهند.
رویکرد مورد استفاده در پایگاههای داده SQL همان ACID است. هر یک از چهار ویژگی آن – یکپارچگی، ثبات، ایزوله بودن و دوام و ماندگاری- به توانایی یک تراکنش برای اطمینان از یکپارچگی دادهها کمک میکند. با استفاده از ACID هر تراکنش (هنگامی که به تنهایی در یک پایگاه دادهی پایدار اجرا شود) کامل میشود و نتایج صحیحی را تولید میکند یا بدون هیچ اثری به پایان میرسد. در هر صورت وضعیتی که برای پایگاه داده به وجود میآید، همیشه یک وضعیت ثابت خواهد بود.