موضوع مقاله: کنترل همروندی چندنسخه‌ای | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # کنترل همروندی چندنسخه‌ای | مقدمه: بدون کنترل همروندی، اگر کسی در حال خواندن از یک پایگاه داده باشد و همزمان شخص دیگری در آن بنویسد، ممکن است خواننده یک قطعه داده‌ای که کامل نوشته نشده یا متناقض است را ببیند. | ## بخش 1: کنترل همروندی چندنسخه‌ای | به‌طور مثال، هنگام انتقال داده بین دو حساب بانکی اگر خواننده، زمانی که پول از حساب اصلی حذف شده و قبل از ذخیره شدن در حساب مقصد، میانگین حساب را از بانک بخواند، به نظر می‌رسد که پول در بانک ناپدید شده‌است. ساده‌ترین راه این است که همه خوانندگان منتظر بمانند تا نوشتن انجام شود، که به عنوان یک قفل خواندن - نوشتن شناخته می‌شود. قفل‌ها باعث ایجاد درگیری می‌شوند به خصوص بین تراکنشهای خواندن طولانی و تراکنشهای به روز رسانی. بدین ترتیب، هر کاربری که به پایگاه داده متصل است، یک تصویر (snapshot) از پایگاه داده را در یک لحظه خاص در زمان می‌گیرد. هر گونه تغییری که توسط یک نویسنده ایجاد شده، توسط سایر کاربران پایگاه داده تا زمانی که تغییرات تکمیل نشده باشد (یا در شرایط پایگاه داده: تا زمانی که تراکنش کامل شود) مشاهده نمی‌شود. هنگامی که یک پایگاه داده MVCC یک قطعه از داده را به روز رسانی می‌کند، داده اصلی را با داده جدید جایگزین نخواهد کرد بلکه یک نسخه جدید از آن داده ایجاد می‌کند. با سطح جداسازی فوری، یک تراکنش وضعیت داده را به عنوان زمان انجام تراکنش تراکنش مشاهده می‌کند. MVCC چالش چگونگی حذف نسخه‌هایی را که منسوخ شده و هرگز خوانده نخواهد شد معرفی می‌کند. در بعضی موارد، یک فرآیند به صورت دوره ای از طریق حذف و حذف نسخه‌های منسوخ اجرا می‌شود. | ## بخش 2: کنترل همروندی چندنسخه‌ای | این اغلب یک فرآیند توقف کلی است که یک جدول کامل را پردازش می‌کند و آن را با آخرین نسخه هر یک از آیتم‌های داده بازنویسی می‌کند. پایگاه‌های داده‌های دیگر بلوک‌های ذخیره‌سازی را به دو قسمت تقسیم می‌کنند: بخش داده و Undo log . محدودیت اصلی ذاتی این رویکرد دوم این است که وقتی بارکاری بروزرسانی بیشتری وجود دارد، بخشی از undo log نمی تواند اجرا شود و پس از آن تراکنش‌ها به دلیل عدم توانایی در گرفتن تصویر از پایگاه داده قطع می‌شوند. برای یک پایگاه داده سند-گرا همچنین اجازه می‌دهد تا سیستم به منظور بهینه سازی اسناد با نوشتن تمام اسناد به بخش‌های مجاور دیسک، هنگامی که به روز شده، کل سند قابل بازنویسی می شود به جای آن که بیتها و تکه‌ها جدا شوند یا در ساختار پایگاه داده پیوسته مرتبط نگهداری شوند. تراکنشهای خواندن تحت MVCC برای تعیین وضعیتی از بانک اطلاعاتی که باید خوانده شود، به‌طور معمول از یک نشانگر زمان (time stamp)یا شناسه تراکنش استفاده می‌کنند و این نسخه از داد ه‌ها را می خوانند. با این حال، علیرغم ضروری نبودن قفل، در بعضی از پایگاه‌های داده MVCC مانند اوراکل استفاده می‌شود. نوشتن، یک نسخه جدیدتر ایجاد می‌کند در حالی که خواندن همزمان با آن، به یک نسخه قدیمی دسترسی پیدا می‌کند. پیاده سازی MVCC از نشانگر زمانی (TS) و افزایش شناسه‌های تراکنش برای دستیابی به یکپارچگی تراکنش‌ها استفاده می‌کند. MVCC با حفظ چندین نسخه از شی، تضمین می‌کند که تراکنش (T) برای خواندن یک شی پایگاه داده‌ای (P) هرگز منتظر نماند. | ## بخش 3: کنترل همروندی چندنسخه‌ای | هر نسخه از شیء P دارای هر دو نشانگر زمانی خواندن (RTS) و نشانگر زمانی نوشتن (WTS) است که به یک تراکنش خاص Ti اجازه می‌دهد آخرین نسخه از شیء را که قبل از نشانگر زمانی خواندن RST (Ti) است، بخواند. مانند ایستادن در یک خط در فروشگاه، تا زمانی که افرادی که جلوتر از شما ایستاده‌اند، تراکنش پرداخت خود را تکمیل نکنند، شما نمی‌توانید پرداخت خود را انجام دهید. (زیرا که تراکنش دوم به مقدار قدیمی وابسته است.) در غیر این صورت، Ti یک نسخه جدید از شی P ایجاد می‌کند و نشانگر زمانی TS خواندن/نوشتن نسخه جدید را برابر با نشانگر زمانی تراکنش قرار می‌دهد (TS = TS (Ti. از سوی دیگر، خواندن‌ها هرگز مسدود نمی‌شوند، که می‌تواند برای بار کاری که بیشتر شامل خواندن مقادیر از پایگاه داده است، مهم باشد. پس از آن، T1 مقدار شیء1 را برابر با "Hello" قرار می‌دهد و مقدار شیء2 را تغییر نمی‌دهد. برای تمام تراکنشهایی که بعد از کامل شدن T1 شروع می‌شوند، مقدار جدید شیء1 جایگزین مقدار قبلی آن (مقدار در زمان 0) می‌شود و نسخه اولیه برای شیء1 می‌تواند دور ریخته شود. از آنجا که T2 و T3 همزمان اجرا می‌شوند، T2 نسخه قبل از زمان 2 از پایگاه داده را می‌بیند یعنی قبل از این که T3 نوشتن را کامل کند و البته T2 شیء2 برابر با "Bar" و شیء1 برابر با "Hello" را می‌خواند. | ## جمع‌بندی | بدین صورت، کنترل همروندی چند نسخه‌ای (MVCC) امکان خواندن با انزوای فوری را بدون هیچ گونه قفل انجام می‌دهد.