NoSQL چیست؟
۴ مرداد ۱۳۹۹
در اصل NoSQL به non SQL یا غیر رابطهای (non relational) بودن این دیتابیس اشاره دارد که مکانیسمی برای ذخیره و بازیابی دادهها ارائه میدهد و این دادهها، متفاوت با روابط جدولی (tabular relations) در دیتابیسهای رابطهای، مدل سازی میشوند.
این دیتابیسها در اواخر دهه ۱۹۶۰ میلادی بهوجود آمدند، اما اوایل قرن بیستویکم شهرت پیدا کردند و نام NoSQL را برای این نوع دیتابیس قرار دادند. از دیتابیسهای NoSQL در برنامههای بلادرنگ (real-time) و آنهایی که با بیگدیتا کار میکنند، استفاده میشود و استفاده از این دیتابیس به مرور زمان در حال افزایش است. برخی اوقات NoSQL را Not only SQL مینامند تا تایید کنند که این دیتابیس ممکن است از زبانهای کوئری مشابه SQL پشتیبانی کند.
دیتابیس NoSQL را میتوان با ویژگیهای: سادگی در طراحی، مقیاسپذیری horizontal با افزایش cluster و کنترل بر روی دسترسیها دانست. ساختار دادههایی که در دیتابیس NoSQL ذخیره میشوند با ساختار دادههایی که به صورت پیشفرض در دیتابیسهای رابطهای مورد استفاده قرار میگیرند، متفاوت است و این موضوع باعث میشود، عملیات در NoSQL سریعتر انجام شوند.
مناسب بودن یک دیتابیس به نیازهایی که از شما رفع میکند، بستگی دارد. ساختار دادههای دیتابیس NoSQL آن را از دیتابیسهای رابطهای انعطافپذیرتر میکند. بسیاری از دادههایی که در NoSQL ذخیره میشوند به صورت سریع و تقسیمبندی شده در دسترس هستند.
موانعی که شاید NoSQL را برای شما نامناسب بسازند عبارت است از: استفاده از زبانهای کوئری سطح پایین، عدم وجود روابط (interfaces) مشخص شده و مقدار عظیم سرمایهگذاریهای پیشین در دیتابیسهای رابطهای (به صورت کلی تعداد سازمانهایی که دیتابیسهای رابطهای مانند SQL را برای تجارت خود انتخاب کردهاند، بیشتر از NoSQL است).
بیشتر دیتابیسهای NoSQL فاقد خاصیت ACID transactions یا به عبارت دیگر Atomicity, Consistensy, Isolation, Durabiility هستند اما چند دیتابیس مانند MarkLogic, Aerospike, FairCom c-treeACE, Google Spanner, Symas LMDB و OrientDB در طراحی خود این خاصیت را افزودهاند.
همچنین در اکثر دیتابیسهای NoSQL، بر اساس مفهوم سازگاری نهایی (eventual consistency)، تغییرهای ایجاد شده در دیتابیس به تمام nodeها فرستاده میشود، ممکن است هنگام کوئری زدن به دیتابیس، دادههای به روز شده، سریعا برگردانده نشوند یا منجر به خواندن دادههایی شود که دقیق و صحیح نیستند که این مشکل تحت عنوان stale reads شناخته میشود.
همچنین در بعضی سیستمهای NoSQL مشکل از دست دادن دادهها وجود دارد. برخی از سیستمهای NoSQL هم از مفاهیمی مانند write-ahead logging استفاده میکنند تا از رخ دادن این مشکل جلوگیری کنند. سازگاری دادهها، در پردازش transactionهای توزیع شده در چندین دیتابیس، یک چالش بزرگتر است. البته باید گفت این مورد در هر دو دیتابیس NoSQL و رابطهای دشوار است.
تعداد کمی سیستم وجود دارد که هم استاندارد X/Open XA و ACID transactionها را برای پردازش transaction توزیع شده، دارا باشند.
مزایای استفاده از دیتابیسهای NoSQL:
مزایای بسیاری برای استفاده از دیتابیسهای NoSQL مانند: MongoDB و Cassandra وجود دارد که مزایای اصلی را میتوان مقیاسپذیری بالا و اطمینان از در دسترس بودن این تکنولوژی به شمار آورد.
- مقیاسپذیری بالا: دیتابیس NoSQL از sharding برای مقیاسپذیری horizontal بهره میبرد، به این صورت که دادهها بر روی چندین ماشین تقسیم میشوند اما ترتیب دادهها هم حفظ میشود. انواع افزایش مقیاس در دیتابیس دو نوع horizontal و vertical هستند. که در نوع horizontal با اضافه کردن تعداد سرورها و در نوع vertical به سرور موجود، منابعی مانند RAM, CPU و … اضاف میکنند. افزایش مقیاس به صورت vertical، کار چندان سادهای نیست اما تغییر مقیاس horizontal برای اجرا، آسان است. نمونههایی از دیتابیسهایی که به صورت horizontal scaling هستند: MongoDB و Cassandra را میتوان نام برد. دیتابیسهای NoSQL به دلیل مقیاسپذیری آسان، میتوانند حجم عظیمی از دادهها را مدیریت کنند. هر چه دادهها افزایش پیدا میکنند، NoSQL مقیاس دادهها را میسنجد تا از دادهها به بهترین شیوه استفاده کند.
- اطمینان از در دسترس بودن: این مزیت را میتوان بهخاطر ویژگی تکثیر خودکار دادهها در NoSQL، دانست و با رخ دادن هر گونه خرابی، دادهها به حالت قبلی در دسترس قرار میگیرند.
معایب استفاده از دیتابیسهای NoSQL:
میتوان برخی از موارد زیر را از مشکلهای NoSQL دانست.
- Narrow focus: دیتابیسهای NoSQL با تمرکز بر روی ذخیره دادهها ساخته شدهاند، اما عملکرد (functionality) بسیار کمی را ارائه میدهند. دیتابیسهای رابطهای انتخاب بهتری در زمینه مدیریت transactionها هستند.
- متنباز بودن: NoSQL یک دیتابیس متنباز است و هیچ استاندارد قابل اعتمادی برای این دیتابیس وجود ندارد.
- چالش مدیریتی: بیشتر ابزاری که برای کار با بیگدیتا توسعه داده شدهاند برای این است که مدیران به سادهترین شکل ممکن، دادهها را مدیریت کنند. اما این موضوع خیلی هم راحت نیست. مدیریت دادهها در NoSQL بسیار پیچیدهتر از دیتابیس رابطهای است. چالشهای NoSQL از زمان نصب آن شروع میشود و برای کارهای روزمره بسیار گیج کننده است.
- نبود رابط کاربری گرافیکی (GUI): ابزارهای گرافیکی مفیدی برای اتصال به دیتابیس NoSQL در فروشگاههای نرمافزاری موجود نیست.
- پشتیبانگیری (Backup): نداشتن قابلیت پشتیبانگیری از دادهها، یکی از نقاط ضعف دیتابیسهایی مانند MongoDB است. هیچ روشی برای تهیه نسخه پشتیبان از دادهها به شیوه عادی در MongoDB موجود نیست.
- اندازه بزرگ اسناد (document): برخی از دیتابیسها مانند: MongoDB و CouchDB دادهها را با فرمت JSON ذخیره میکنند. این یعنی اسنادی با حجم زیاد، مانند: بیگدیتا، پهنای باند شبکه، سرعت آن و داشتن descriptive key names، حجم اسناد را بیشتر میکنند.
انواع دیتابیسهای NoSQL:
انواع دیتابیسهای NoSQL و نام سیستم دیتابیسها عبارتند از:
- MongoDB در دسته دیتابیسهای NoSQL قرار میگیرد که دادهها به صورت document based ذخیره میکند.
- key value store مانند: Memcached, Redis, Coherence
- Tabular مانند: Hbase, Big Table, Accumulo
- Document based مانند: MongoDB, CouchDB, Cloudant
چه زمانی باید از دیتابیسهای NoSQL استفاده شود؟
- در صورت نیاز به ذخیره و بازیابی مقدار زیادی از دادهها.
- ارتباط بین دادههایی که ذخیره میکنید، مهم نباشد.
- ساختار دادهها به مرور زمان تغییر میکند.
- پشتیبانی از Joins و Constraints در دیتابیس، لازم نباشد.
- دادهها به مرور زمان، افزایش پیدا میکنند و باید منظم، مقیاس دیتابیس را بیشتر کنید.