🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ مهسا منظمی
نحوه کار lock
جامعه پایتون (وب) ایجاد شده در ۰۶ آبان ۱۴۰۲

وقتی از atomic استفاده میکنیم، سایر کویری هایی که در اون زمان اجرا میشوند مشکلی ندارند و به دیتا قبل از اتمام کویری اتمیک دسترسی دارند؟
سوال دومم برای lock هست. وقتی سطری لاک میشه و یک کویری بیاد همون سطر رو بخونه چه اتفاقی میوفته؟ خطا میگیره؟ و مجدد باید درخواست ارسال بشه؟

درود مهسا عزیز وقت بخیر 
پاسخ اول ـ بله در واقع به صورت ایزوله اون قسمت اجرا میشه و حتی سمت دیتابیس هم به صورت ایزوله اتفاق میوفته به این معنی که اگر یک تراکنش Atomic دچار خطا بشه هیچکدوم از تغیرات اعمال نمیشه و همه اون‌ها به عبارتی Rollback میشن.
به عبارتی زمانی که یک تراکنش اتمیک دارید انجام میدید، کوئری‌های دیگه تا پایان اون تراکنش اتمیک به دیتا دسترسی ندارند یعنی اینکه سایر کوئری‌ها معلق میمونن ( مثلا یه صف رو فرض کنین) تا تراکنش اتمیک به اتمام برسه. 
پاسخ دوم - وقتی یک سطر Lock میشه و کوئری دیگه ای سعی به دسترسی به اون داره وابسطه به تنظیمات دیتابیس و شرایط مختلف یکی از دو حالت زیر اتفاق میوفته :
۱. کوئری‌های بعدی منتظر میمونن : معمولاً دیتابیس منتظر میمونه تا Lock روی سطر باز بشه و کوئری بعدی ادامه پیدا کنه. در این حالت، هیچ خطای برنامه‌نویسی رخ نمیده.

خطای قفل‌گذاری: اگر کوئری دیگر قبل از رفع Lock سعی در دسترسی به سطر Lock شده داشته باشه، ممکنه خطای DeadLock رخ بده. توی این حالت، باید مجدداً تراکنش یا کوئری اجرا بشه. این خطاها به شکل‌های مختلف در دیتابیس و config‌های مختلف بستگی دارن.

نحوه مدیریت Lockها و تفاوت‌های دقیق آن‌ها بستگی به پایگاه داده مورد استفاده دارن.

موفق باشید💎

Reza Mobaraki ۰۶ آبان ۱۴۰۲، ۱۹:۳۹