لینک کوتاه مطلب : https://hsgar.com/?p=6598

مروری بر سطوح سازگاری در سیستم های پایگاه داده

مروری بر سطوح سازگاری شناخته شده

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

که در سازگاری متوالی، همه نوشته ها — صرف نظر از اینکه کدام رشته نوشتن را انجام داده است، و مهم نیست که در کدام مورد داده نوشته شده است — به صورت سراسری مرتب می شوند. هر رشته اجرا باید نوشته هایی را ببیند که به این ترتیب اتفاق می افتد. برای مثال، اگر در یک رشته، داده‌های X به 5 به‌روزرسانی می‌شوند، و سپس Y را به 10 به‌روزرسانی می‌کنیم، هر رشته باید قبل از به‌روزرسانی Y، به‌روزرسانی X را ببیند. اگر هر رشته‌ای مقدار جدید Y را ببیند اما مقدار قدیمی X، سازگاری متوالی نقض می شود. این مثال در شکل 1 نشان داده شده است. در این شکل، زمانی که در شکل به سمت راست حرکت می کنید، زمان دیرتر می شود و 4 رشته اجرا وجود دارد: P1، P2، P3 و P4. هر رشته ای (که X و Y را می خواند) می بیند که به روز رسانی X از 0 به 5 قبل از به روز رسانی Y از 0 به 10 اتفاق می افتد. موضوعات: P1 و P2 به ترتیب X و Y را می نویسند، اما هیچ کدام را نخوانید. موضوع P3 مقدار جدید X را می بیند و متعاقباً مقدار قدیمی Y را می بیند. این فقط در صورتی امکان پذیر است که به روز رسانی X قبل از به روز رسانی به Y اتفاق افتاده باشد. Thread P4 فقط مقادیر جدید X و Y را می بیند، بنابراین نمی بیند. کدام یک اول اتفاق افتاد بنابراین، همه موضوعات موافق هستند که ممکن است به‌روزرسانی X قبل از به‌روزرسانی به Y اتفاق افتاده باشد. مقدار جدید X (5) و متعاقباً مقدار قدیمی Y (0)، در حالی که P4 مقدار جدید Y (10) و متعاقباً مقدار قدیمی X (0) را می بیند. بنابراین شکل 2 یک برنامه زمانی متوالی سازگار نیست.


به طور کلی، سازگاری متوالی هیچ الزامی در مورد نحوه سفارش نوشتن ندارد. در مثال ما، نوشتن در X در زمان واقعی قبل از نوشتن در Y اتفاق افتاده است. با این وجود، تا زمانی که هر رشته موافقت کند که نوشتن در Y قبل از نوشتن در X اتفاق می‌افتد، سازگاری متوالی به تاریخ رسمی اجازه می‌دهد تا متفاوت باشد. آنچه مطابق با زمان واقعی رخ داده است (تنها محدودیت این است که نوشتن و خواندن که از یک رشته اجرا سرچشمه می گیرد را نمی توان دوباره ترتیب داد). برای نمونه ای از این موضوع به شکل 3 مراجعه کنید.


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

هیچ یک از شکل‌های 1، 2 یا 3 بالا سازگاری دقیقی را برآورده نمی‌کنند، زیرا همه آن‌ها شامل خواندن x=0 یا خواندن y=0 پس از نوشتن مقدار x یا y به مقدار جدید هستند. با این حال، شکل 4 زیر سازگاری دقیقی را برآورده می کند، زیرا همه خواندن ها منعکس کننده جدیدترین نوشتن در زمان واقعی هستند:


در یک سیستم توزیع‌شده/تکثیر شده، جایی که نوشتن و خواندن می‌تواند از هر جایی سرچشمه بگیرد، بالاترین سطح سازگاری در عمل به دست می‌آید. خطی شدن (همچنین به عنوان “سازگاری اتمی” شناخته می شود که در قضیه CAP به آن گفته می شود). خطی‌سازی بسیار شبیه به سازگاری دقیق است: هر دو بسط سازگاری متوالی هستند که محدودیت‌های زمان واقعی را بر نوشته‌ها تحمیل می‌کنند. تفاوت در این است که مدل خطی پذیری تصدیق می کند که یک دوره زمانی وجود دارد که بین زمانی که یک عملیات به سیستم ارسال می شود و زمانی که سیستم با تایید کامل شدن آن پاسخ می دهد، رخ می دهد. در یک سیستم توزیع شده، ارسال درخواست نوشتن به مکان(های) صحیح — که ممکن است شامل تکرار — باشد می تواند در این بازه زمانی رخ دهد. ضمانت خطی‌سازی هیچ گونه محدودیتی را برای عملیاتی که با زمان شروع و پایان با هم تداخل دارند ایجاد نمی‌کند. تنها محدودیت ترتیب برای عملیاتی است که در زمان با هم همپوشانی ندارند — فقط در این موارد باید نوشته قبلی قبل از نوشتن بعدی دیده شود.


شکل 5 در بالا نمونه ای از برنامه زمانی را نشان می دهد که قابل خطی شدن است، اما کاملاً سازگار نیست. از آنجایی که خواندن X توسط P3 کمی پس از نوشتن X توسط P1 شروع می شود (و برمی گردد) کاملاً سازگار نیست، اما همچنان مقدار قدیمی را می بیند. با این وجود، خطی شدنی است زیرا خواندن X توسط P3 و نوشتن X توسط P1 در زمان همپوشانی دارند و بنابراین خطی‌سازی نیازی به خواندن X توسط P3 برای دیدن نتیجه نوشتن X توسط P1 ندارد.

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

سازگاری علّی یک سطح سازگاری محبوب و مفید است که کمی کمتر از ثبات متوالی است. در سازگاری متوالی، همه نوشته‌ها باید به صورت سراسری مرتب شوند — حتی اگر کاملاً با یکدیگر نامرتبط باشند. سازگاری علّی، ترتیب نوشته‌های نامرتبط را اجرا نمی‌کند. با این حال، اگر یک رشته اجرا، خواندن برخی از آیتم های داده را انجام دهد (آن را X بنامید) و سپس آن آیتم داده یا دیگری را بنویسد (آن را Y بنامید)، فرض می کند که نوشتن بعدی ممکن است ناشی از خواندن باشد. بنابراین، ترتیب X و Y را اعمال می کند — به طور خاص همه رشته های اجرا باید نوشتن Y را بعد از نوشتن X مشاهده کنند.


به عنوان مثال، شکل 6 (بالا) را با شکل 2 مقایسه کنید. در شکل 2، P3 مشاهده کرد که نوشتن در X قبل از نوشتن در Y اتفاق می افتد، اما P4 مشاهده کرد که نوشتن به Y قبل از نوشتن در X اتفاق می افتد. اما نه سازگاری علّی. با این حال، در شکل 6، P2 قبل از انجام نوشتن در Y، نوشتن را به X می‌خواند. این یک محدودیت علی بین نوشتن به X و Y قرار می‌دهد — Y باید بعد از X اتفاق بیفتد. بنابراین، وقتی P4 نوشتن را به Y بدون آن می‌بیند. نوشتن به X، سازگاری علی نقض می شود.

ثبات نهایی حتی ضعیف تر است — حتی نوشته های وابسته به علت ممکن است خارج از نظم قابل مشاهده باشند. به عنوان مثال، با وجود نقض هر ضمانت سازگاری دیگری که تاکنون در مورد آن صحبت کردیم، شکل 6 لزوماً سازگاری نهایی را نقض نمی کند. تنها تضمین در سازگاری نهایی این است که اگر برای یک دوره زمانی “طولانی” هیچ نوشته ای وجود نداشته باشد (که در آن تعریف “طولانی” به سیستم وابسته است)، هر رشته اجرا بر روی ارزش آخرین نوشتن توافق خواهد کرد. بنابراین تا زمانی که P4 نهایتاً مقدار جدید X (5) را در نقطه‌ای بعد از زمان (که در شکل 6 نشان داده نشده است) می‌بیند، در این صورت ثبات نهایی حفظ می‌شود.

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

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


وجود یک تراکنش در یک نمودار سازگاری، محدودیت‌های اضافی مربوط به AID of ACID را اضافه می‌کند: همه خواندن و نوشتن‌های درون تراکنش با هم موفق می‌شوند یا با شکست مواجه می‌شوند (اتمی)، آنها از سایر تراکنش‌های همزمان در حال اجرا جدا می‌شوند (درجه انزوا بستگی دارد. در سطح ایزوله)، و نوشتن تراکنش‌های متعهد بیشتر از همه انواع خرابی سیستم (دوام) خواهد ماند.

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

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.