همه افرادی که با برنامه نویسی و مشتقات آن آشنا هستند حداقل یک بار عبارت NoSQL را شنیدهاند. ولی این که بخواهیم برای افراد تازه وارد در مباحث تخصصی کامپیوتر توضیح دهیم NoSQL چیست، کمی با مشکل روبرو میشویم؛ زیرا ابتدا باید با مفاهیمی مانند پایگاه داده و SQL آشنا باشند تا آموزش NoSQL کمی راحتتر شود. اگر به نحوه عملکرد نرمافزارهای موجود در کامپیوتر، موبایل و حتی وب دقت کرده باشید، حتماً متوجه شدهاید که انگار بعضی از اطلاعات از جای دیگری فراخوانی میشوند. حتی زمانی که یک کاربر اطلاعاتی را در سیستم ثبت میکند نیاز به محلی مهندسی شده برای حفظ آن داریم. پایگاه داده همان جایی است که دادههای مهم را در خود نگهداری میکند و در مواقع ضروری در اختیار اپلیکیشن مورد نظر میگذارد. همچنین به کاربران امکان ذخیره اطلاعات جدید را نیز میدهد.
مشکل اینجاست که با یک زبان برنامه نویسی سطح بالا نمیتوان از دیتابیس دادهای را خواند یا چیزی در آن نوشت. شاید چنین قابلیتی وجود داشته باشد اما قطعاً پیچیدگیهای کد نویسی کار را دشوارتر خواهد کرد؛ بنابراین نیاز به یک زبان میانی یا مشترک بین دیتابیس و نرمافزار داریم که در عین سادگی سرعت دسترسی بالایی به دادههای موجود داشته باشد. بنابراین زبانی با نام SQL در سال ۱۹۷۰ توسط شرکت IBM معرفی شد. سازندگان این زبان دونالد دی. چمبرلین و ریموند اف. بویس بودند. از این تاریخ به بعد آموزش SLQ به عنوان استانداردی مشترک میان برنامه نویسان رونق گرفت. تا جایی که آموزش دیتابیس بدون SQL مفهومی نداشت.
آموزش NoSQL زمانی مطرح شد که مفهومی به نام کلان داده یا Big Data متولد شد. البته این واژه سالها قبل از SQL وجود داشت؛ بنابراین بهتر بود بگوییم NoSQL دنیای بیگ دیتا را متحول کرد. برای بیشتر روشن شدن این موضوع باید با مفهوم دیگری به نام پایگاه داده رابطهای آشنا شویم؛ چرا که SQL در این نوع پایگاه داده کاربرد گستردهتری دارد.
پایگاه داده رابطهای (Relational Database) از تعدادی قوانین ثابت و استاندارد برای ذخیره سازی داده استفاده میکند. در واقع وجود واژه «رابطهای» در این عبارت این مفهوم را میرساند که تمام اجزای این نوع دیتابیس میتوانند با رعایت اصول تعیین شده با یکدیگر در ارتباط باشند. به این معنی که شما با در دست داشتن یک فیلد کلید از یک جدول میتوانید به دادههای جداول مرتبط با آن دسترسی داشته باشید. این قابلیت برای نرمافزارهایی که حجم داده کمی دارند مناسب بوده و کارایی آنها را افزایش میدهد. اما وقتی از دادههایی با حجم بسیار بالا صحبت میکنیم وضعیت کمی تغییر میکند.
بنابراین برای ذخیره سازی و آنالیز کلان داده به ویژگیهایی فراتر از زبان SQL و پایگاه داده رابطهای نیاز داریم. NoSQL همان قابلیتی است که این نقصان را جبران میکند. NoSQL مخفف شده عبارت Not Only SQL هست و به این اشاره دارد که برای آنالیز دادههای بزرگ نباید تنها به SQL متکی باشیم. در حقیقت SQL را حذف نمیکنیم بلکه به تکنولوژیهای دیگر اجازه میدهیم در کنار آن فعال باشند. با این کار قدرت مانور بالاتری بدست میآید.
در ادامه آموزش NoSQL باید بگوییم این واژه تنها یک مفهوم بوده و لازم است به نوعی پیاده سازی شود. در واقع نیاز به پایگاه دادهای با معماری NoSQL داریم؛ بنابراین نرمافزارهای NoSQL Databases متولد شدند. اغلب دیتابیسهای NoSQL Database معمولا از مدل رابطهای و غیر رابطهای به طور همزمان پشتیبانی میکنند که هدف اصلی این مفهموم همین است. اما برخی از آنها تنها غیر رابطهای هستند که در ادامه تعدادی از آنها را معرفی میکنیم.
دیتابیسهای زیادی قابلیت NoSQL را پشتیبانی میکنند، اما تنها برخی از آنها قابلیتهای خود را اثبات کرده و توانستهاند اعتماد کاربران را جلب کنند. در ادامه 4 مورد از پایگاه دادههای NoSQL را که محبوبیت بیشتری در ایران دارند را معرفی میکنیم.
مونگو دی بی یکی از محبوبترین پایگاه دادههای NoSQL است که بسیاری از برنامه نویسان ایرانی از آن استفاده میکنند. در این پلتفرم از مدل دادای Document Oriented پشتیبانی میشود. مدیریت سند محور دادهها در دیتابیس mongodb به کاربر این امکان را میدهد که حجم بالای داده را با سرعتی بیشتر و با اطمینان کامل مورد ارزیابی قرار دهد. میتوان گفت این دیتابیس از مناسبترین پلتفرمها برای Big Data محسوب میشود.
در مدیریت سند محور دادهها، به جای ایجاد جدولهای پیچیده و تو در تو از مفهومی به نام کلید-مقدار استفاده شده است. به این معنی که هر مقداری که میخواهیم ذخیره سازی کنیم را به وسیله یک کلید نشانه گذاری میشود. در نتیجه دیگر نیازی به فرایند پیچیده ارتباط با پایگاه داده نداریم. یک کلید را فراخوانی میکنیم و از آن میخواهیم مقدار منتسب به خود را نمایش دهد.
Postgreslq دیتابیس دیگری هست که از NoSQL پشتیبانی میکند با این تفاوت که قابلیت رابطهای خود را حفظ کرده است. در پایگاه دادههای غیر رابطهای از JSON برای ذخیره سازی داده استفاده میشود. JSON همان ساختار کلید-مقداری که در مورد سیستم مدیریت سند محور مطرح کردیم را فراهم میکند. پایگاه داده Postgreslq ساختار JSON و SQL را در کنار هم کنجانده است. در واقع مفهوم NoSQL را به شکل واقعی و عملی به نمایش میگذارد.
در دیتابیس NEO4J ساختمان NoSQL به شکل هوشمندانهتری پیاده سازی شده است. در این پلتفرم از ساختار گراف برای ذخیره سازی دادهها استفاده میشود. دادهها در Graph Database گرههای گراف هستند. این ساختار باعث میشود اطلاعات و دادههایی که روابط بسیار پیچیدهای با یکدیگر دارند شکل رابطهای خود را حفظ کرده و از قوانین NoSQL نیز پیروی کنند. پردازش دادههای این پلتفرم با الگوریتمهای گراف ممکن میشود. این نوع دیتابیس در مواردی مانند پردازش زبان طبیعی یا متن کاوی کاربرد دارد.
Apache Cassandra یک پایگاه داده مشابه Postgreslq است. یعنی مدیریت داده جدولی و کلید-مقدار را در کنار هم به شکل مکمل استفاده میکند. چیزی که این پایگاه داده را از موارد قبلی متمایز میسازد زبان پرس و جوی اختصاصی آن به نام CQL هست. این پلتفرم یک سیستم مدیریت پایگاه داده توزیع شده بوده و قابلیتهای بسیار گستردهتری دارد. Apache Cassandra در ابتدا به عنوان یک پروژه انحصاری در اختیار فیسبوک بود. اما این کمپانی سیستم پایگاه داده خود را در سال 2008 به عنوان یک پلتفرم متن باز معرفی و عرضه کرد. دیتابیس آپاچی الکساندار مقیاس پذیری بالایی داشته و تحمل خطای زیادی از خود نشان داده است.
اگر به مباحثی مانند هوش مصنوعی، یادگیری ماشین، داده کاوی و غیره علاقه دارید یادگیری NoSQL یکی از نکاتی است که باید به فکر آن باشید؛ چرا که کار با دادههای حجیم نیاز به قابلیتهای خاصی دارد که تنها به کمک این دانش امکان پیاده سازی آنها را داریم.