Nasser Niazy
Nasser Niazy
خواندن ۲ دقیقه·۳ سال پیش

بررسی انواع دیتابیس ها براساس مدل توزیع شدگی


master-slave

نود ها دو نوع دارند که نوع مستر(یا مسترها) اگر دیتا را بنویسند عملیات نوشتن با موفقیت انجام شده و به کاربر اعلام می شود و نوع های اسلیو دیتا را با تاخیر می نویسند. برخی دیتابیس ها مثل کساندرا 
commit-log 
دارند که اول دیتا روی آن(روی دیسک) نوشته می شود و بعد دیتا داخل نودها بصورت دایره ای می چرخد و همه از روی کامیت لاگ می نویسند. نسخه ای از مای اس کیو ال کلاستر شده 
#percona
هم باینری لاگ دارد و اول دیتا روی آن نوشته می شود و سپس مستر می نویسد و به یوزر اعلام می شود که دیتا نوشته شد و همزمان اسلیو هم از روی باینری لاگ می نویسد.وجود این لاگ ها دربازیابی دیتا موقع کرش دیتابیس بسیار حیاتی است. اولین توصیه بک آپ گرفتن از این لاگ ها و بعد شروع فرآیند ریکاوری است.

دیتابیسی مثل
#mongodb
می تواند بار نوشتن را روی چند مستر
(#primery)
تقسیم کنید و یک معیار در نظر بگیرید. ولی در هنگام خواندن دیتا ها می توانید تنظیم کنید که از اسلیو
(#secondary)
بخواند. برخی از دیتابیس ها فقط از این نوع توزیع شدگی پشتیبانی می کنند مثل 
#elasticsearch, #neo4j , #mysql(#percona)
نوع پایداری این دیتابیس ها 
#nearrealtime
است چون اگر مستر از بین برود جایگزین کردن مستر با یکی از اسلیو ها تاخیر زمانی ایجاد می کند که در دیتابیس های مختلف این تاخیر زمانی متفاوت است ولی زیاد نیست.(چند ثانیه تا چند دقیقه)

#maste-master

در این نوع از توزیع شدگی تمام نسخه نسخه مستر هستند و فرقی بین آن ها نیست مثل کاسندرا .می توان بار را بین سرور های مختلف تقسیم کرد می توان دیتابیس را در چندین دیتاسنتر متفاوت نصب کرد ! ولی آپدیت نگه داشتن نسخه ها روی نتورک و نودها بار ایجاد می کند. 

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

#replication
روی هر نود یک نسخه های کامل از دیتابیس ذخیره کنیم. مثلآ اگه ۴ نود بهم متصل داشته باشیم ۴ نسخه از دیتابیس وجود دارد و درصورت از بین رفتن سه نود هم حتمآ دیتابیس قابل بازیابی است.

#sharding:
روی تعدادی از نودها نسخه های کامل از دیتابیس ذخیره کنیم . مثلآ اگه چهار نود داشته باشیم و سه تا
#shard
اگر دو نود رو از دست بدهیم دیتابیس حتمآ قابل بازیابی است

#partitioning:
تقسیم دیتاها براساس یک فاکتور مثل کشور . دراین حالت سرعت اجرای کوئری ها بسیار زیاد می شود. معیار پارتیشن بندی بسیار مهم است.

#transaction:
گروهی از عملیات که به هم وابسته هستند یا همه انجام می شن یا هیچ کدوم انجام نمی شن
توزیح بیشتر :
https://vrgl.ir/v07Qc<br/>رفرنس ها 
Designing Data-Intensive Applications
Design Patterns for Cloud-Native Applications (chapter 4,6)

software archetecturedatabasedatabase designnosqldba
بیش از ۱۰ سال سابقه برنامه نویسی وب و سیستم های پیچیده. معماری و رهبری پروژه های بزرگ نرم افزاری.
شاید از این پست‌ها خوشتان بیاید