حمزه قائم پناه
حمزه قائم پناه
خواندن ۱ دقیقه·۲ سال پیش

Optimistic Concurrency Control

در مبحث ۳ برنامه level-up می‌خوایم با Optimistic Concurrency Control آشنا بشیم، که یک متده که در سیستم‌های تراکنشی (Transactional) مثل دیتابیس‌ها استفاده میشه تا از ثبات داده‌ها در عین حال که امکان دسترسی همزمان (Concurrent) رو میده، فراهم کنه. فرض می‌کنه که تضاد بین تراکنش‌های هم‌زمان نادر خواهد بود و به چندین تراکنش اجازه میده تا داده‌های یکسان رو به طور هم‌زمان بخونن و بنویسن، بدون اینکه منبع داده قفل (Lock) بشه.


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

این روش کنترل هم‌زمانی خوش‌بینانه، اغلب توسط سیستم‌های با هم‌زمانی بالا یا با رقابت بالا برای منابع مشترک، استفاده میشه که امکان استفاده کاراتر از منابع رو میده. اگر چه نیازمند کار بیشتری برای نگهداری و چک کردن درگیری‌های داده (Data Conflict) است.

روش عمومی پیاده سازی Optimistic Concurrency Control:

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

اگر این پست براتون مفید بود، لایک فراموش نشه :)

concurrencyهمزمانی
مهندس نرم‌افزار و عاشق توسعه فردی - مهندس نرم‌افزار - اکس هم بنیان‌گذار و مدیرفنی و پرداکت استارتاپ کشمون
شاید از این پست‌ها خوشتان بیاید