در مطلب
قبلی با تعاریف سیستمهای NoSQL آشنا شدیم و به طور کلی ویژگیهای یک سیستم NoSQL را بررسی کردیم.
در این مطلب دستهبندی کلی و نوع ساختار دادهای این سیستمها و بررسی سادهترین آنها را مرور میکنیم.
در حالت کلی پایگاهای داده NoSQL به ۴ دسته تقسیم میشوند که به ترتیب پیچیدگی ذخیرهسازی دادهها عبارتند از:
- Key/Value Store Databases
- Document Databases
- Graph Databases
- Column Family Databases
در حالت کلی در پایگاههایداده NoSQL دادهها در قالب KEY/VALUE
(کلید/مقدار) نگهداری میشوند ، به این صورت که مقادیر توسط کلید یکتایی
نگاشت شده و ذخیره میشوند، هر مقدار صرفا توسط همان کلید نگاشت شده قابل
بازگردانی میباشد و راهی جهت دریافت مقدار بدون دانستن کلید وجود ندارد .
در این ساختارداده منظور از مقادیر، دادههای اصلی برنامه هستند که نیاز
به نگهداری دارند و کلیدها نیز رشتههایی هستند که توسط برنامهنویس
ایجاد میشوند.
به دلیل موجود بودن این نوع ساختار دادهای در اکثر کتابخانههای
زبانهای برنامهنویسی ( به عنوان مثال پیادهسازیهای مختلف اینترفیس Map
شامل HashTable ، HashMap و موارد دیگر در کتابخانههای JDK ) این نوع
ساختار برای اکثر برنامهنویسان آشنا بوده و فراگیری آن نیز ساده میباشد.
بدیهی است که اعمال فرهنگ دادهای ( درج ، حذف ،
جستجو ) در این سیستم به دلیل اینکه دادهها به صورت کلید/مقدار ذخیره
میشوند دارای پیچیدگی زمانی (1)O میباشد که بهینهترین حالت ممکن به لحاظ
طراحی میباشد. همانگونه که مستحضرید در الگوریتمهایی که دارای پیچیدگی
زمانی با مقدار ثابت دارند کم یا زیاد بودن دادهها تاثیری در کارایی
الگوریتم نداشته و همواره با هر حجم دادهای زمان ثابتی جهت پردازش نیاز
میباشد.
Key/Value Store Databases:
این سیستم سادهترین حالت از دستهبندیهای NoSQL میباشد ، به طور کلی
جهت استفاده در سیستمهایی است که دادهها متمایز از یکدیگر هستند و اصولا
Availability و یا در دسترس بودن دادهها نسبت به سایر موارد نظیر پایائی
اهمیت بالاتری دارد.
از موارد استفاده این گونه سیستمها به موارد زیر میتوان اشاره کرد:
- در پلتفرمهای اشتراک گذاری دادهها . هدف کلی صرفا هندل کردن
آپلود محتوی (باینری) و به صورت همزمان بروز کردن در سمت دیگر میباشد.(
اپلیکیشنی مانند اینستاگرام را تصور کنید) در اینگونه نرمافزارها با
تعداد بسیار زیاد کاربر و تقاضا، استفاده از این نوع پایگاه داده به مراتب
کارایی و سرعت را بالاتر میبرد. و با توجه به عدم پیشبینی حجم دادهها
یکی از ویژگیهای این نوع پایگاه داده تحت عنوان Horizontal Scaling مطرح
میشود که در صورت Overflow شدن سرور، دادهها را به سمت سرور دیگری
میتوان هدایت کرد وبدون مشکل پردازش را ادامه داد ، این ویژگی یک وجه
تمایز کارایی این سیستم با سیستمهای RDBMS میباشد که جهت مقابله با چنین
وضعیتی تنها راه پیشرو بالا بردن امکانات سرور میباشد و به طور کلی
دادهها را در یک سرور میتوان نگهداری کرد ( البته راهحلهایی نظیر
پارتیشن کردن و غیره وجود دارد که به مراتب پیچیدگی و کارایی کمتری نسبت به
Horizontal Scaling در پایگاههای داده NoSQL دارد.)
- برای Cache کردن صقحات بسیار کارا میباشد ، به عنوان مثال میتوان
آدرس درخواست را به عنوان Key در نظر گرفت و مقدار آن را نیز معادل JSON
نتیجه که توسط کلاینت پردازش خواهد شد قرار داد.
- یک نسخه کپی شده از توئیتر که کاملا توسط این نوع پایگاه داده پیاده شده است نیز از این آدرس
قابل مشاهده است. این برنامه به زبانهای php , ruby و java نوشته شده
است و سورس نیز در مخارن github میجود میباشد. (یک نمونه پیاده سازی
ایدهآل جهت آشنایی با نحوهی مدیریت دادهها در این نوع پایگاه داده)
از پیادهسازیهای این نوع پایگاه داده به موارد زیر میتوان اشاره کرد:
هر یک از پیادهسازیها دارای ویژگیهای مربوط به خود هستند به عنوان
مثال Memcached دادهها را صرفا در DRAM ذخیره میکند که نتیجهی آن
Volatile بودن دادهها میباشد و به هیچ وجه از این سیستم جهت نگهداری
دائمی دادهها نباید استفاده شود. از طرف دیگر Redis دادهها را علاوه بر
حافظه اصلی در حافظه جانبی نیز ذخیره میکند که نتیجهی آن سرعت بالا در
کنار پایائی میباشد.
همانگونه که در تعریف کلی عنوان شد یکی از ویژگیهای این سیستمها متنباز
بودن انها میباشد که نتیجهی آن وجود پیادهسازیهای متنوع از هر کدام
میباشد ، لازم است قبل از انتخاب هر سیستم به خوبی با ویژگیهای اکثر
سیستمهای محبوب و پراستفاده آشنا شویم و با توجه به نیاز سیستم را انتخاب
کنیم.
در مطلب
بعدی با نوع دوم یعنی Document Databases آشنا خواهیم شد.