آموزش NoSQL (پایگاه داده غیررابطهای)
پایگاه داده غیررابطهای یا NoSQL چیست؟
پایگاه داده غیررابطهای (NoSQL) نوعی سیستم مدیریت پایگاه داده است که برای ذخیره دادههای بدون ساختار یا نیمه ساختاری طراحی شده است. داده ساختاریافته به شمارهها و برچسبهایی گفته میشود که در چارچوبهای ساختار یافتهای از سطرها و ستونها ذخیره میشوند. دادههای نیمه ساختار یافته دادههایی هستند که تا حد کمی دارای ساختار هستند و با استفاده از متا تگها به گروههای مختلفی تقسیم شدهاند. دادههای بدون ساختار شامل اطلاعاتی هستند که در چارچوب و مدل مشخصی ذخیره نشدهاند.
بنابراین برخلاف پایگاه دادههای رابطهای که از جدولهایی با ساختار از پیش مشخص برای ذخیره داده استفاده میکنند، NoSQLها با استفاده از دیتامدلهای بسیار انعطافپذیر میتوانند خود را با ساختارهای داده مختلفی سازگار کنند و با داشتن قابلیت مقیاسپذیری افقی (Horizontal Scale) گزینهای عالی برای کار با دادههایی در حجم زیاد هستند.
اما مقیاسپذیری افقی چیست و چرا برای ما حائز اهمیت است؟ مقیاس پذیری افقی در مقابل مقیاس پذیری عمودی (Vertical Scaling) است که به معنای افزودن توان و حافظهی بیشتر به سیستم موجود است. در مقیاس پذیری افقی ما میتوانیم بدون تغییر سیستم فعلی به افزودن سیستمهای بیشتر (Nodes) بپردازیم. دلیل اهمیت مقیاس پذیری افقی این است که روشی به مراتب کمهزینهتر از مقیاسپذیری افقی بوده و از لحاظ کارایی (Performance) بهتر است.
تاریخچه NoSQL
عبارت NoSQL ابتدا در سال ۱۹۹۸، توسط Johan Oskarsson و برای هماهنگی یک جلسه به منظور صحبت در مورد پایگاه دادههای غیررابطهای بیان شد. Johan از NoSQL# در توییتر استفاده کرد که صرفا به دلیل کوتاه و بیادماندنی بودن آن انتخاب شده بود و کمک میکرد تا این جلسه بر سر زبانها بیفتد.
هدف جنبش NoSQL حل مشکلاتی بود که پایگاه دادههای رابطهای ایجاد کرده بودند. این مشکلات که با گسترش استفاده مردم از اینترنت بیشتر شده بودند نظیر عدم قابلیت گسترش سیستم، سرعت پایین توسعه و پایین آمدن سرعت سیستم برای ارائه خدمات به سراسر جهان بودند. مشکل اصلی که به خصوص برای کسب و کارهای بزرگ آن زمان نگرانکننده شده بود عدم قابلیت گسترش بود. پایگاه دادههای رابطهای بر اساس رشد تک سیستم (مقیاس پذیری عمودی) کامپیوتری طراحی و استفاده میشدند و پس از مدتی که رشد به صورت تک کامپیوتری معنایی نداشت و از لحاظ فیزیکی ممکن نبود، نیاز به مقیاسپذیری به صورت افقی (چند سیستم کامپیوتری که یک پایگاه داده را پیادهسازی میکنند) بود.
این عبارت مجددا در سال ۲۰۰۹ و برای توصیف پایگاه دادههای غیر رابطهای به میان آمد. این مدل مشکلات کسب و کارهایی که دادههایی در مقیاس بزرگ داشتند را تا حدود خوبی برطرف کرده بود، شرکتهایی مثل فیسبوک، توییتر، لینکدین، گوگل و … .
تفاوت SQL و NoSQL
شاید با دیدن اسم پایگاه دادههای رابطهای و غیررابطهای این طور نتیجهگیری کنید که از آنجایی که در پایگاه دادههای رابطهای موجودیتها با یکدیگر ارتباط دارند پس پایگاه داده غیررابطهای برعکس این است و ارتباطی میان موجودیتهای آن وجود ندارد. در حالی که در ادامه میبینیم که این استدلال کاملا غلط است.
دلیل این نامگذاری این است که پایگاه دادههای رابطهای بر اساس جبر رابطهای رفتار کرده و دادهها را به صورت جدولی ذخیرهسازی میکنند و با روابط جبر رابطهای امکان دسترسی به آنها برای ما میسر میشود. اما پایگاه دادههای غیر رابطهای میتوانند انعطاف بیشتر و مقیاس پذیری بیشتری را ارائه دهند.
عدم تطابق Impedance در پایگاه دادههای رابطهای
این قضیه معروف در علوم کامپیوتر اشاره به موضوع عدم تطابق نوع نگاشت دادهها در زبانهای برنامهنویسی شیء گرا و مدل پایگاه داده رابطهای اشاره دارد. در زبانهای برنامه نویسی شیء گرا ما دادهها را به صورت شیء ذخیره میکنیم ولی در پایگاه دادههای رابطهای دادهها به صورت جدول نگهداری میشوند. این عدم تطابق منجر به کدهای اضافه و پیچیدگی بیشتر سیستم و کندی در انجام عملیاتهای ساده میشود و رفته و رفته حفظ کردن ثبات دادهها میان برنامه و پایگاه داده سختتر و سختتر میشود.
انواع پایگاه دادههای NoSQL
این نوع پایگاه دادهها به ۴ دسته زیر تقسیم میشوند:
- مقدار و کلید
- پایگاه داده مستندی
- خانوادهای از ستونها
- پایگاه داده گرافی
که در ادامه به بررسی هر یک از اینها میپردازیم.
پایگاه داده مقدار و کلید (Key Value Stores)
این نوع از پایگاه داده، سادهترین نوع پایگاه داده غیررابطهای است که دادهها در آن، توسط یک کلید ذخیره شده و در دسترس قرار میگیرند. این دادهها میتوانند به فرم String ،Integer و یا Array باشند. پایگاه داده مقدار و کلید ساختار مشخصی نداشته و از این جهت انعطاف پذیری بسیار بالایی دارد. مهمترین مزایای این نوع پایگاه داده عملکرد(Performance) خوب، تأخیر کم و قابلیت توسعه بالا است.
به طور مثال اگر به حافظه پنهان و یا Cashing داده فکر کنیم، پایگاه داده مقدار و کلید یک کاندیدای عالی برای آن است. چرا که برای کشینگ داده، آن را در جایی ذخیره کرده و با یک هش به آن دسترسی پیدا میکنیم. که این هش میتواند نام کاربری یا آدرس آیپی باشد. با این کار، انگار به نوعی از یک کلید برای رسیدن به داده استفاده کردهایم.
از مهمترین مثالهای پایگاه داده مقدار و کلید میتوان به موارد زیر اشاره کرد:
- Dynamo DB
- Redis
- ZooKeeper
پایگاه داده مستندی (Document Databases)
در این نوع پایگاه داده، اطلاعات به صورت مستندها و یا فایلهایی ذخیره میشوند و مجموعهای از ین فایلها درون یک کالکشن قرار میگیرند. به طور مثال ممکن است کالکشنی مربوط به یک کاربر داشته باشیم که در هر فایل موجود در آن یک بخش از اطلاعات آن کاربر ذخیره شده باشد. اطلاعاتی مانند نام، ایمیل، شماره تلفن و…
اما ظاهر این فایلها به چه صورت است؟ در واقع این فایلها دادهها را به صورت کلید و مقدار ذخیره میکنند که به نام به آن Field نیز میگویند.
این نوع پایگاه دادهها برای برنامه هایی که نیاز به انعطاف پذیری و قابلیت توسعه بالا دارند، مناسب هستند. از مهمترین نمونههای این نوع پایگاه داده میتوان به موارد زیر اشاره کرد.
- MongoDB
- Couchbase
- RavenDB
خانوادهای از ستونها (Column-Family Databases)
این نوع پایگاه دادهها رویکردی متفاوت از پایگاه دادههای مستندی دارند، آنها دادهها را در ستونها نگه داری میکنند. در این پایگاه داده، دادهها به صورت ستونی به جای سطری موجود در پایگاه دادههای رابطهای میشوند و هر سطر داده ما شامل ستونهایی از دادههای مرتبط به هم است که در کنار یکدیگر نگهداری میشوند.
این نحوه ذخیرهسازی داده باعث میشود تا بتوانیم در زمان کمتر و با قدرت بیشتری در دادههایمان پرسوجو کنیم(کوئری بزنیم). پایگاه دادههای خانوادهای از ستونها برای راحتی در گسترش دادهها در چند سیستم و عملکرد بهتر طراحی شدند و برای استفاده در شرکتهایی که با حجم عظیمی از دادهها روزانه سر و کار دارند، گزینه مناسبی است.
پایگاه داده گرافی (Graph Databases)
اینجا اهمیت داشتن درک درست از مفهوم پایگاه داده رابطهای آشکار میشود. اگر دید ما به آنها متمرکز به وجود رابطه بین موجودیتها باشد، درک مدل پایگاه داده گرافی به عنوان یک پایگاه داده غیررابطهای بسیار سخت میشود. تعریف درست برای پایگاه داده رابطهای مدلیست که بر اساس جبر رابطهای رفتار میکند و اگر چنین نباشد، در دسته غیررابطهای جای میگیرد.
این نوع از پایگاه داده شامل یک سری راسها و یالهاست که این یالها بیانگر ارتباط بین موجودیتها و یا راسهاست و ارزش برابری با آنها دارد.
این مدل برای شرایطی که با ارتباطهای پیچیده و گسترده سروکار داریم بسیار مفید است چرا که SQL برای حجم بسیار وسیعی از ارتباطات طراحی نشده است. نمونههایی از این میتواند دنبالکنندهها، لایکها و کامنتهای یک شبکه اجتماعی و یا وبسایتی برای پیشنهاد فیلم بر اساس فیلمهای مورد علاقه کاربر باشد.
از مهمترین پایگاهدادههای گرافی میتوان به موارد زیر اشاره کرد:
- Neo4j
- Amazon Neptune
- ArangoDB
مزایای استفاده از پایگاه دادههای NoSQL
کار با NoSQL مزایای بسیاری دارد که در این بخش به چند مورد از مهمترین آنها اشاره میکنیم.
۱.مقیاسپذیری بالا
پیش از این هم به این موضوع اشاره کردیم که NoSQL توانایی مقیاسپذیری افقی دارد و به این منظور میتواند دادهها را تقسیمبندی کرده و به گونهای که ترتیب دادهها حفظ شود در چند سیستم مختلف ذخیره کند.
اجرای مقیاسبندی عمودی برخلاف مقیاسبندی افقی چندان آسان نیست. نمونههایی از پایگاه دادههای مقیاس افقی MongoDB، Cassandra و غیره هستند. NoSQL به دلیل مقیاسپذیری بالای خود میتواند حجم عظیمی از دادهها را مدیریت کند.
۲.انعطافپذیری
همانطور که گفتیم پایگاه دادههای غیررابطهای برای کنترل دادههای نیمه ساختار یافته و بدون ساختار طراحی شدهاند. از این رو در در تطبیق خود با دیتا مدلهای مختلف بسیار منعطفاند. از این رو برای سازمانها و اپلیکیشنهایی که نیاز به تغییر مداوم دیتاها و دیتا مدلها دارند بسیار مناسب است.
۳.دسترسی بالا
ویژگی تکرار( Replication Feature) که در پایگاههای داده NoSQL به صورت خودکار اجرا میشود، آن را بسیار در دسترس میسازد زیرا در صورت هرگونه مشکل، دادهها خود را به حالت ثابت قبلی برمیگردانند.
۴. توانایی مدیریت حجم زیادی از داده
پایگاههای داده NoSQL میتوانند حجم زیادی از دادهها و ترافیک را به راحتی مدیریت کنند. این موضوع آنها را به گزینه مناسبی برای برنامههایی که نیاز به مدیریت حجم زیادی از داده یا ترافیک دارند تبدیل میکند.
۵.کارایی بالا (Performance)
در بخش قبل گفتیم که پایگاههای داده غیررابطهای توانایی مدیریت حجم زیادی از داده و ترافیک را دارند. یکی از مصداقهای این موضوع کارایی و عملکرد بهتر آنها است.
۶.هزینه پایین
پایگاه دادههای NoSQL اغلب مقرون به صرفهتر از پایگاههای داده رابطهای سنتی هستند، زیرا معمولا پیچیدگی کمتری دارند و به سخت افزار یا نرم افزار گران قیمت نیاز ندارند.
معایب استفاده از پایگاه دادههای NoSQL
در کنار تمامی این مزایا که باعث استفاده گسترده از پایگاه دادههای غیررابطهای میشود، این نوع پایگاه دادهها معایبی نیز دارد که بهتر است به چند مورد از آنها اشاره کنیم.
۱. نبود استاندارد مشخص
پایگاه دادههای غیررابطهای انواع مختلفی دارند و هر یک از آنها دارای نقاط قوت و ضعف مخصوص به خود هستند. این موضوع ممکن است شما را در انتخاب پایگاه داده مناسب دچار مشکل کند.
۲.عدم انطباق کامل با ACID
پایگاههای داده NoSQL کاملا با ACID سازگار نیستند، به این معنی که ثبات (Consistency)، یکپارچگی (Integrity) و دوام دادهها (Durability) را تضمین نمیکنند. این عدم انطباق میتواند برای برنامههایی که این موضوعات در آنها حیاتی است مشکلزا باشد.
۳.عدم پشتیبانی از کوئریهای پیچیده
پایگاههای داده NoSQL برای رسیدگی به کوئریهای پیچیده طراحی نشدهاند، به این معنی که برای برنامههایی که نیاز به تجزیه و تحلیل دادهها یا گزارشهای پیچیده دارند مناسب نیستند.
۴.نابالغ بودن
پایگاههای داده NoSQL نسبتا جدید هستند و فاقد بلوغ پایگاههای داده رابطهای سنتی هستند. این موضوع میتواند آنها را نسبت به پایگاه دادههای سنتی غیر قابل اعتمادتر کند.