آشنایی با دیتابیس های Document-based در NoSQL ها



visibility  
mode_comment   ۲

اگر قبلا با دیتابیس های NoSQL آشنا شده باشید، حتما نام دیتابیس های مبتنی بر سند یا Document Based Database را شنیده اید. دیتابیس های مبتنی بر سند نوعی از دیتابیس های NoSQL هستند. اگر علاقه مندید در مورد دیتابیس های NoSQL بیشتر بدانید ما این مقاله را برای شما نوشته ایم تا به شما بگویم دیتابیس Document-based چیست؟

دیتابیس مبتنی بر سند چیست

در یک سیستم دیتابیس رابطه ای یا RDBMS، قبل از اضافه کردن هرگونه داده ای به دیتابیس، باید ابتدا اسکیما (Schema) دیتابیس را تعریف کنید. اسکیما ساختاری است که در قالب یک زبان رسمی که توسط دیتابیس پشتیبانی می شود تعریف شده است. این ساختار طرح جداول دیتابیس و روابط یا Relation های بین جداول حاوی اطلاعات را مشخص می کند. برای ایجاد طرح یک جدول نیاز دارید قرارداد هایی را در قالب ستون های نام گذاری شده که مشخصات هر موجودیت یا Entity هستند و همینطور نوع داده ای که می تواند در هرکدام از این ستون ها ذخیره شود را به طور کامل تعریف کنید.

در مقابل، یک دیتابیس Document-based حاوی مجموعه ای از اسناد یا داکیومنت ها است. این داکیومنت ها رکورد هایی هستند که علاوه بر معرفی نوع اطلاعاتی که سند محتوی آن هاست، شامل اطلاعات اصلی رکورد یا سند نیز هست. پیچیدگی این داکیومنت ها بستگی به انتخاب شما دارد. می توانید اطلاعات را به صورت Nest شده یا تودرتو در آن قرار دهید تا بتوانید زیر دسته هایی از اطلاعات اضافی در مورد آبجکت رکورد در آن داشته باشید. درست همانطور که در زبان JSON و XML می توانید (دیتابیس های مبتنی بر سند بر اساس این زبان ها تولید می شوند). شما همچنین می توانید از تعداد داکیومنت های بیشتری برای نمایش آبجکت اطلاعات خود استفاده کنید. در شکل زیر یک جدول سنتی رابطه ای با نمونه مشابه مبتنی بر سند خود مقایسه شده است:

more  بیشتر بخوانید : NoSQL چیست؟

دیتابیس مبتنی بر سند

در این مثال جدولی شامل کالاها و مشخصات آن ها داریم. این مشخصات شامل: id، نام کالا، تولیدکننده، تعداد موجودی و غیره است. همانطور که در این شکل مشاهده می کنیم مدل رابطه ای جدولی از یک اسکیمای از پیش تعیین شده با تعداد فیلدهای مشخص که از انواع داده ای مشخصی هستند پیروی می کند. اما همتای آن که از مدل دیتابیس مبتنی بر سند پیروی می کند، به ازای هر کالا یک داکیومنت دارد. هر داکیومنت شامل یک سری اطلاعات مشخص و هم نوع به ازای هر کالا است.

more  بیشتر بدانید : پایگاه داده چیست ؟

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

اگر قصد داشتیم در یک مدل دیتابیس رابطه ای صفات یا attribute های جدیدی را به هر کالا اختصاص دهیم مجبور بودیم اسکیما یا طرح کلی دیتابیس را برای اضافه کردن ستون های جدید و نوع داده ای آن ها تغییر دهیم. اما در مورد مدل مبتنی بر سند، کافی بود جفت های کلید-مقدار (Key-Value) اضافی را به اسناد اضافه کنیم تا نمایانگر فیلد ها یا attribute های جدید باشند.

more  بیشتر بخوانید : NoSQL چیست؟

مشخصه دیگر دیتابیس های مبتنی بر سند در نرمال سازی داده های جدولی است. این به آن معنی است که شما اطلاعات را به جداول کوچکتری که با هم Relation دارند بشکنید. شکل زیر این کار را در مدل دیتابیس رابطه ای نمایش می دهد:

دیتابیس مبتنی بر سند

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

مشکل این روش آن است که زمانی که اطلاعات جداول متصل به هم را تغییر می دهید نیاز دارید که آن جداول را به طور همزمان قفل کنید تا مطمئن شوید اطلاعات آن جداول به طور درست و غیر متناقض تغییر پیدا می کنند. با این روش تغییر در ساختار دیتابیس در مرحله Production نرم افزار بسیار مشکل تر است چرا که شما در حال انتشار اطلاعات در یک ساختار محکم و سفت و سخت هستید. همینطور در صورت Scale شدن سیستم به صورت افقی، تقسیم کردن اطلاعات در سرورهای متعدد نیز کار مشکلی است. برای آشنایی با Scale کردن افقی می توانید از مقاله Horizontal Scaling چیست استفاده کنید.

اما در دیتابیس های مبتنی بر سند می توانیم انتخاب کنیم که دو نوع داکیومنت داشته باشیم: یک نوع برای کالاها و یک نوع برای تولیدکنندگان. با این کار به جای تقسیم آبجکت ها به سطر ها و ستون ها آن ها را به داکیومنت ها یا اسناد تبدیل کرده ایم. با ایجاد یک اشاره گر به داکیومنت تولیدکننده، در داکیومنت کالا به راحتی یک رابطه یا Relation را بین دو موجودیت برقرار کرده ایم:

more  بیشتر بخوانید : NoSQL چیست؟

دیتابیس مبتنی بر سند

نتیجه گیری

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

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back
7Learn Experts
comment دیدگاه کاربران
محمد نقلانی replyپاسخ

خیلی مطلب خوبی بود ممنون بابت نگارش ول امکانش هست رو این مبحث یکم ریز بشین و مقالات بیشتری در خصوصNo-SQL ها اللخصوص سند محور ها قرار بدین ؟!

مهدی علامه

سلام محمد عزیز
ممنون، چشم در مقالات آینده مطالب بیشتری دراین زمینه منتشر می کنیم

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :