تراکنش ها در دات نت: از اصول اولیه تا بهترین روش ها

تراکنش در دات نت چیست؟
معامله یک است دنباله ای از عملیات انجام شده به عنوان یک واحد منطقی کار. از تراکنش ها برای اطمینان از سازگاری و یکپارچگی داده ها در سیستم های پایگاه داده استفاده می شود.
آنها از خواص ACID پیروی می کنند: اتمی، سازگاری، انزوا، و دوام. در زمینه دات نت، تراکنش ها را می توان از طریق کلاس ها و رابط های مختلف ارائه شده توسط دات نت فریم ورک مدیریت کرد.
اهمیت تراکنش ها در مدیریت پایگاه داده
تراکنش ها برای حفظ یکپارچگی و سازگاری داده ها در سیستم های پایگاه داده بسیار مهم هستند.
آنها اطمینان میدهند که چندین عملیات به صورت اتمی انجام میشوند، یا همه موفقیتآمیز هستند یا همه با شکست مواجه میشوند، و از بهروزرسانیهای جزئی که میتواند پایگاه داده را در حالت ناسازگار بگذارد، جلوگیری میکند.
تراکنشها همچنین به جداسازی عملیات همزمان کمک میکنند، و تضمین میکنند که تغییرات هر تراکنش تا زمانی که متعهد شوند از دیگران جدا میشوند.
انواع تراکنش ها در دات نت
معاملات محلی
تراکنش های محلی تراکنش هایی هستند که شامل یک منبع واحد مانند یک پایگاه داده یا یک صف پیام واحد می شود.
آنها در مقایسه با تراکنشهای توزیعشده سادهتر و سریعتر هستند، زیرا فقط یک مدیر منبع را شامل میشوند. در دات نت، تراکنش های محلی را می توان با استفاده از TransactionScope
کلاس یا SqlTransaction
کلاس
معاملات توزیع شده
تراکنش های توزیع شده شامل منابع متعددی مانند پایگاه داده های متعدد یا ترکیبی از پایگاه های داده و صف های پیام هستند.
آنها پیچیده تر و کندتر از تراکنش های محلی هستند، زیرا به هماهنگی بین چندین مدیر منابع نیاز دارند. در دات نت، تراکنش های توزیع شده را می توان با استفاده از TransactionScope
کلاس در ارتباط با System.Transactions
فضای نام
کار با تراکنش ها در دات نت
کلاس TransactionScope
ایجاد یک TransactionScope
را TransactionScope
کلاس موجود در System.Transactions
فضای نام، به شما امکان می دهد بلوکی از کد را تعریف کنید که در یک تراکنش شرکت می کند.
برای ایجاد یک محدوده تراکنش جدید، به سادگی یک نمونه جدید از آن ایجاد می کنید TransactionScope
کلاس، مانند:
using (TransactionScope scope = new TransactionScope())
{
// Perform transactional operations here
}
انجام و بازگرداندن معاملات
به طور پیش فرض، یک تراکنش زمانی انجام می شود که TransactionScope
دفع می شود. برای انجام معامله می توانید با شماره تماس بگیرید Complete
روش:
using (TransactionScope scope = new TransactionScope())
{
// Perform transactional operations here
scope.Complete();
}
اگر یک استثنا در داخل رخ دهد TransactionScope
، تراکنش به طور خودکار برگردانده می شود:
using (TransactionScope scope = new TransactionScope())
{
try
{
// Perform transactional operations here
scope.Complete();
}
catch (Exception ex)
{
// Handle the exception and let the transaction roll back
}
}
کلاس SqlTransaction
ایجاد ارتباط
را SqlTransaction
کلاس موجود در System.Data.SqlClient
فضای نام، به شما اجازه می دهد تا معاملات را مستقیماً در پایگاه داده SQL Server مدیریت کنید.
برای استفاده SqlTransaction
، ابتدا باید با استفاده از SqlConnection
کلاس:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Perform transactional operations here
}
پیاده سازی SqlTransaction
هنگامی که یک اتصال باز دارید، می توانید یک نمونه جدید از آن ایجاد کنید SqlTransaction
کلاس با تماس BeginTransaction
روش بر روی SqlConnection
هدف – شی
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlTransaction transaction = connection.BeginTransaction())
{
try
{
// Perform transactional operations here
transaction.Commit();
}
catch (Exception ex)
{
// Handle the exception and roll back the transaction
transaction.Rollback();
}
}
}
سطوح جداسازی در معاملات دات نت
Uncommitted را بخوانید
این سطح جداسازی به تراکنش ها اجازه می دهد تا تغییرات غیرمتعهد ایجاد شده توسط تراکنش های دیگر را بخوانند.
این پایین ترین سطح ایزوله است و می تواند منجر به مسائلی مانند خواندن کثیف، خواندن غیرقابل تکرار و خواندن فانتوم شود.
متعهد را بخوانید
تضمین می کند که یک تراکنش فقط می تواند تغییرات متعهد شده توسط سایر تراکنش ها را بخواند.
از خواندن کثیف جلوگیری می کند، اما همچنان می تواند منجر به خواندن غیرقابل تکرار و خواندن فانتوم شود.
خواندن تکراری
سطح خواندن تکرارشونده با قفل کردن داده های خوانده شده توسط تراکنش، از خواندن کثیف و خواندن غیرقابل تکرار جلوگیری می کند.
با این حال، همچنان می تواند منجر به خواندن فانتوم شود.
قابل سریال سازی
این بالاترین سطح ایزوله است که از خواندن کثیف، خواندن غیرقابل تکرار و خواندن فانتوم با قفل کردن کل محدوده داده ای که توسط یک تراکنش قابل دسترسی است، جلوگیری می کند.
این سطح از انزوا می تواند منجر به کاهش همزمانی و بن بست های احتمالی شود.
عکس فوری
این سطح انزوا یک عکس فوری از داده ها در شروع تراکنش ارائه می دهد و امکان خواندن مداوم را بدون دریافت قفل فراهم می کند.
از خواندن کثیف، خواندن غیرقابل تکرار و خواندن فانتوم جلوگیری می کند، در حالی که امکان همزمانی بالا را فراهم می کند.
بهترین روش ها برای اجرای تراکنش ها در دات نت
- نوع معامله مناسب را انتخاب کنید: هنگام کار با یک منبع واحد و تراکنش های توزیع شده برای چندین منبع از تراکنش های محلی استفاده کنید.
- از سطح ایزوله صحیح استفاده کنید: سطح ایزوله ای را انتخاب کنید که تضمین های سازگاری لازم را بدون کاهش عملکرد ارائه می دهد.
- معاملات را کوتاه نگه دارید: مدت زمان معاملات را به حداقل برسانید تا احتمال اختلاف و بن بست کاهش یابد.
- استثناها را به درستی مدیریت کنید: اطمینان حاصل کنید که در صورت بروز خطا یا استثنا، تراکنشها برگشت داده میشوند.
- اتصالات را ببندید و منابع را دور بریزید: همیشه اتصالات پایگاه داده را ببندید و اشیاء تراکنش را دور بریزید تا از نشت منابع جلوگیری شود.
نتیجه
تراکنش ها بخش مهمی از حفظ یکپارچگی و سازگاری داده ها در سیستم های پایگاه داده هستند. در دات نت می توانید با استفاده از کلاس هایی مانند TransactionScope
و SqlTransaction
.
با درک انواع مختلف تراکنش ها، سطوح جداسازی و بهترین شیوه ها، می توانید تراکنش های قوی و کارآمد را در برنامه های دات نت خود پیاده سازی کنید.