Mahdi Golbaz
Mahdi Golbaz
خواندن ۲ دقیقه·۳ سال پیش

Transaction Isolation Levels in DBMS

وقتی بنا به صحبت راجع به دیتابیس ها داشته باشیم یکی از اصلی ترین مفاهیم که باید مدنظر ما باشد Transaction ها و ACID هست.

اسید - ACID (Atomicity, Consistency, Isolation, Durability) به طور کلی تضمینی برای انجام صحیح تراکنش هاست و این خصوصیات وقتی از همزمانی(concurrency) در سیستم استفاده کنیم بیشتر به چشم میآید.به این معنا که عملیات هایی که در سیستم همزمان انجام میشوند با رعایت خواص اسید ضمانت میشوند.

در میان این ویژگی ها؛ isolation مشخص میکند که یک تراکنش در نظر کاربران و سیستم‌های مرتبط به گونه‌ای محافظت شود که بتوان متصور شد تنها تراکنش در حال انجام در آن پایگاه داده است.

حال میپردازیم به موضوع اصلی این نگارش: Isolation Levels - این سطوح مشخص میکنند هر تراکنش در چه لایه‌ای باید از تراکنش در برابر تغییرات اعمال شده از سوی دیگر تراکنش ها محافظت کند.

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

  • Read Uncommitted :

- سطحی ترین لایه جداسازی است که عملا در این سطح یک تراکنش میتواند تغییرات commit نشده توسط یک تراکنش دیگر را بخواند. اصطلاحا به این خوانش «dirty read» گفته میشود. در این لایه isolation وجود ندارد.


  • Read Committed:

- در این لایه پایگاه داده ضمانت میکند هر تراکنش تنها دسترسی به تغییرات commit شده دارد و dirty read در آن ممکن نیست.

  • Repeatable Read:

- این لایه تقریبا مشابه لایه قبلی عمل میکند با این تفاوت که تا زمانی که تمامی خوانش ها در یک ردیف انجام نگیرد تراکنش را قفل کرده و امکان ایجاد تغییر روی داده را به دیگر تراکنش ها نمیدهد.

  • Serializable:

بیشترین سطح جداسازی و انزوا برای تراکنش ها در این لایه صورت میگیرد. در این لایه پایگاه‌داده عملیات هایی که به صورت همزمان قرار است در سیستم انجام شود را به صورت serially و پشتِ‌سرِ هم انجام میدهد و به طور کامل از رخدادِ Phantom Reads در پایگاه داده جلوگیری میکند.

(هنگامی که دستور SELECT ما با یک عملیات تغییر در پایگاه داده همزمان شود و آن تراکنش قصد اثر گذاشتن بر خوانش ما داشته باشد میگوییم Phantom Reads رخ داده است)


-- هنگام انتخاب زبان یا Framework برای توسعه یک سیستم داده‌محور؛ از مهمترین نکات قابل بررسی میتوان به ORM آن زبان و میزان پشتیبانی آن از لایه های جدا سازی؛ و ارزیابیِ آن با توجه به نیازمندی سیستم اشاره کرد.



databasedbmsisolation levelsacidپایگاه داده
علاقه‌مند به برنامه‌نویسی؛ زیرساخت و تکنولوژی
شاید از این پست‌ها خوشتان بیاید