درس سوم: انواع دیتابیس های نوین NoSQL

نمونه هایی از انواع پایگاه داده های NOSQL:

 

  • مخازن کلید-مقدار (key value)مانند: Aerospike, Couchbase, Dynamo, FairCom c-treeACE, FoundationDB, HyperDex, MemcacheDB, MUMPS, Oracle NoSQL Database, OrientDB, Redis, Riak, Berkeley DB
  • مخازن سندگرا مانند: Apache CouchDB, Clusterpoint, Couchbase, DocumentDB, HyperDex, Lotus Notes, MarkLogic, MongoDB, OrientDB, Qizx, RethinkDB
  • مخازن ستون­گرا مانند: , Accumulo , Cassandra , Druid , HBase Vertica
  • پایگاه­های داده مبتنی بر گراف: AllegroGraph, InfiniteGraph, Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso, Stardog
  • چند مدلی مانند: Alchemy Database, ArangoDB, CortexDB, FoundationDB, MarkLogic, OrientDB

انواع دیتابیس‌های NoSQL

به دلیل استفاده برای کاربردهای مختلف، این نوع دیتابیس‌ها به چهار دسته تقسیم می‌شوند که در ادامه به معرفی آنها خواهیم پرداخت و اصول طراحی، مدل‌سازی داده و موارد استفاده آنها را بررسی خواهیم کرد.

 دیتابیس سندی (Document Database)
در این نوع دیتابیس یک جفت کلید-مقدار(Key-value) وجود دارد که مقدار به‌ عنوان یک داده‌ی قابل بازیابی ذخیره می‌شود و کلیدِ مربوط به آن هم، نشانگری منحصر‌به‌فرد است. همچنین مقدار ذخیره شده به‌ نوعی کاملاً ساخت‌یافته (یا حدوداً ساخت‌یافته) می باشد. به طوری که این داده‌های ساخت‌یافته به‌ عنوان یک سند شناخته می‌شوند و می‌توانند یکی از فرمت‌هایXML ،JSON یا BSON را داشته باشند. در نتیجه می‌تواند داده‌های تودرتو را نیز شامل شوند. از جمله دیتابیس‌های سندی، می‌توانMongoDB و Elasticsearch را نام برد که عمده‌ی موارد استفاده‌‌ی آن‌ها در فروشگاه‌های آنلاین، سیستم‌های مدیریت محتوا، پلتفرم‌های تجزیه و تحلیل داده و پلتفرم‌های وبلاگی می باشد.

به طور معمول دیتابیس‌های سندی انتخاب مناسبی برای دیتابیس اصلی نرم افزار هستند و به راحتی می‌توان اطلاعات زیادی را در آنها ذخیره و بازیابی کرد.

 طراحی دیتابیس سندی
در این نوع دیتابیس، داده‌ها به صورت یک Collection از سندها ذخیره می‌شود که به عنوان مثال در یک وبلاگ، اطلاعات هر پست، یک سند در نظر گرفته می‌شود. و اطلاعات کل پست‌ها در Collection نگهداری می‌شود. چون اطلاعات به صورت تودرتو ذخیره می‌شوند در مواجه با حالت‌های مختلف، روش کاریِ متفاوتی جهت طراحی و ذخیره داده اعمال می‌شود. که به دو دسته تقسیم می-شوند.

دیتابیس کلید-مقدار (Key-Value Database)
در این نوع دیتابیس‌ها، کلیدها به صورت جدول Hash ذخیره می شوند (برای آشنایی با ساختار Hash Table ها به مقاله ی Hash Table چیست و چه زمانی از آن استفاده می‌شود؟ مراجعه کنید) تا بتوان آن ها را ساده تر و سریع تر جستجو کرد. این نوع دیتابیس‌ها دارای سرعت فراخوانی بسیار بالایی هستند و کار کردن با دیتابیس‌های کلید-مقدار بسیار ساده است.
این دیتابیس ها کاربردهای فراوانی دارند. از جمله این کاربردها میتوان به ذخیره سازی جلسه (Session)های کاربر (مثلا ذخیره سازی اطلاعات کاربری در یک وب سایت)، ذخیره سازی داده‌ها به صورت Cache، ذخیره سازی سبد خرید در یک فروشگاه اینترنتی، لیست آخرین بازدید کننده‌ها ،صف بندی و… اشاره کرد.
یکی از اشکالات این نوع دیتابیس‌ها عدم وجود ویژگی Consistency (سازگاری) در آن هاست. اگر داده‌هایی که قصد ذخیره سازی آنها را داریم دارای ارتباطات مختلفی باشند، دیتابیس های کلید-مقدار کارایی خود را از دست میدهند. این دیتابیس ها معمولا در زمانی که میزان نوشتن داده‌ها در دیتابیس کم و خواندن آنها زیاد است توصیه می‌شوند. در شکل شمای دیتابیس‌های کلید-مقدار قابل مشاهده است.

دیتابیس Wide-column
درگذشته داده ها به صورت سطری ذخیره می شدند. ولی این دیتابیس ها روش دیگری از ذخیره ی داده را معرفی کردند. در ذخیره سازی ستونی، اطلاعاتِ فیلدهای یک سطر در ستونهای مختلف باهم در ارتباط هستند. این نوع ذخیره سازی، برای رفع نیاز سیستم هایی با مقیاس پذیریِ بسیار زیادِ اطلاعات، که نیاز به پاسخ دهی سریع و کارایی بالا داشتند معرفی شد.
این نوع دیتابیس، بر خلاف دیتابیس‌های دیگر، اطلاعات را در حافظه کنار یکدیگر نگه می‌دارد. این روش نگه داری باعث رشد سرعت بازیابی اطلاعات میشود.
شمای کلی این نوع دیتابیس در شکل قابل مشاهده است.

شمای دیتابیس wide-column

از جمله کاربردهای این نوع دیتابیس، می‌توان به ذخیره سازیLog سنسورها در اینترنت اشیا ، اطلاعات جغرافیایی، سیستم‌های گزارش‌‌گیری، اطلاعات سری زمانی، ثبت وقایع Online، نرم‌افزارهایی با نرخ نوشتن بالا در دیتابیس و… اشاره کرد.
معروف ترین دیتابیس این نوع، Cassandra می‌باشد که با زبان جاوا توسعه یافته است. جهت ارتباط با آن از زبان CQL استفاده می‌شود که این زبان پرس و جو بسیار به SQL نزدیک است.
از این دیتابیس در نرم افزارهای بزرگ زیر استفاده شده است.
• نمایش اطلاعات اضافی در مورد خواننده و آهنگ‌ها در نرم افزار Spotify
• پیدا کردن دوستان در اطراف شخص در نرم افزار Facebook
• ارائه بیش از 190 میلیارد توصیه محتوای شخصی در هر ماه در Outbrain

دیتابیس گرافی
دیتابیس گرافی در واقع مجموعه‌ی موجودیت ها و ارتباط بین آن هاست، که به صورت منظم ذخیره سازی شده اند. معمولاً در دیتابیس‌هایی که به صورت سطر و ستون ذخیره می شوند، سرعت دسترسی به اطلاعات خوب است (به خصوص زمانی که از Index استفاده شود)، این در حالی است که در بسیاری از مواقع به دلیل نیاز به سرعت بالای دسترسی به اطلاعات، سرعت خواندن و نوشتن داده ها، در دیتابیس‌های رابطه ای مناسب به نظر نمی رسد. این اتفاق معمولاً زمانی رخ می دهد که می‌خواهید، یک یا چند ادغام (Join)، بر روی جداول مختلف یک دیتابیس انجام دهید.
در این نوع دیتابیس هر موجودیت یک گره در نظر گرفته می‌شود و ارتباط آن با هر گره‌ی دیگر را یال می‌نامند. زمانی که نیاز به جستجو سریع در میان داده های مرتبط با هم را دارید این نوع دیتابیس میتواند انتخاب مناسبی باشد. از سوی دیگر اگر موجودیت ها دارای ویژه‌گی های زیادی باشند انتخاب این دیتابیس صحیح نیست. معروف ترین دیتابیس گرافی، Neo4j است.
ساختار و شمای این نوع دیتابیس برای مثال ساده ای از یک وبلاگ و دسته بندی های شخصی یک کاربر در شکل نمایش داده شده است.

 شمای دیتابیس گرافی برای دسته بندی های شخصی در یک وبلاگ

برای درک بهتر این نوع دیتابیس ها، در ادامه به بررسی یک مثال ساده ی دیگر می‌پردازیم.
فرض کنید،سه موجودیت نویسنده، کتاب و خریدار را داریم. حتماً در ذهن خود، ارتباط بین این موجودیت‌ها را تصور کردید. نویسنده یک یا چند کتاب می‌نویسد، و خریدار یک یا چند کتاب را می-خرد. در چنین دیتابیسی، ارتباط نقش اساسی و مهمی را دارد. در واقع اطلاعات، به ارتباط بین آن ها وابسته است. حال فرض کنید، می‌خواهید از بین میلیون ها کتاب، هزاران نویسنده و چند ده هزار خریدار، پرس‌وجوهای مختلفی انجام دهید. برای مثال میخواهید تمامی خریدارانی که از کتاب های یک نویسنده‌ی خاصرا خریده اند، را از دیتابیس بخوانید. این قبیل پرس‌وجوها، در دیتابیس های رابطه‌ای، همیشه به اندازه کافی سرعت ندارند و بعضا کند هستند. برای مثال فرض کنید، دیتابیس شما، بسیار بزرگ شده است و می‌خواهید پرس‌وجوهای بسیار زیادی در لحظه و بدون هیچ دیرکردی پاسخ داده شوند. اینجاست که می‌توانید، به جای استفاده از دیتابیس‌های رابطه‌ای، از دیتابیس های گرافی استفاده کنید.

شمای دیتابیس گرافی برای مثال کتاب ، نویسنده و خریدار

به نسبت دیتابیس های رابطه ای، که روابطی مانند مثال بالا را با استفاده از کلیدهای خارجی مدل میکنند و در زمان پرس‌و‌جو از آن کلیدها استفاده میکنند، دیتابیس‌های گرافی گره‌ها و یال‌ها را در سطح نخست ذخیره میکنند. درنتیجه در زمان خواندن اطلاعاتی با این گونه رابطه ها سریعتر عمل میکنند.
دیتابیس های گرافی، کاربرد فراگیری در زمینه های مختلف، مانند داده کاوی شبکه های اجتماعی، مدل های زنجیره تامین و… دارند.

در این درسنامه دیتابیس های NoSQL را بررسی کردیم. این نوع دیتابیس ها بسیار سریع بوده و مناسب برای ذخیره اطلاعاتِ غیر ساخت یافته ی توزیع شده هستند. در خانواده ی دیتابیس های NoSQL برای سناریو ها و نوع داده های مختلف دیتابیس متفاوتی پیشنهاد میشود. که این دیتابیس ها در چهار دسته ی کلی، در این درسنامه به صورت مجزا معرفی شدند.

 

اسکرول به بالا