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