What is Transaction

ترنزکشن چیست ؟
مجموعه عملیات و وظایف مرتبط بهم پیوسته جهت انجام یک اقدام واحد میباشد که یا باهم انجام و به اتمام میرسد و یا کل عملیات Faild میشود، یعنی چی ؟ یعنی در آن عملیات یا همه آنها باید موفق شوند یا هیچ یک از آنها نمی توانند موفق شوند.که در صورت عدم موفقیت همه‌ی عملیات باید Roll back شود.

دو نوع Transaction داریم:

Simple: Dependency Systems

Complex: Micro Service Systems & Providers and Supliers

تفاوت دو حالت زیر را بررسی کنید:

dbcontext.basket.add(P2);

dbcontext.basket.remove(P1);

dbcontext.basket.newadd(P3);

dbcontext.savechanges();

بررسی: در این حالت اگر تنها ذخیره‌سازی صورت گیرد، به محض خطا کل عملیات رول‌بک میشود که خب صحیح است.

dbcontext.basket.add(P2);

dbcontext.savechanges();

dbcontext.basket.remove(P1);

dbcontext.savechanges();

بررسی: در این حالت اگر بعد از هر عمل، ذخیره‌سازی صورت گیرد هنگام عملیات دوم اگر خطا خورده و exception دهد، فقط فرایند آخر یعنی شماره عملیات remove رول‌بک خواهد شد و حالت های قبلی دست نخورده باقی می ماند که خب ممکن است علت همان خطایی که در موردش صحبت کردیم باشد. نکته: در هر قسمتی از فرآیند اگر خطا خوردیم، نباید فرآیند ادامه دار باشد، باید همان زمان رول‌بک صورت گیرد.

به طور کلی قدرت یک Transaction در Roll Back کردن است.
نکته: Entity Framework یا همان EF فقط در سیستم های مستقل کارهای مربوط به رول‌بک را انجام میدهد اما سایت شرکتهای enterprise مثل آمازون از چند سیستم متفاوت استفاده میکنند و هماهنگی همه‌ ی این موارد به تنهایی با EF مقدور نیست.

مدل زیر مربوط به دو Transaction با عملکردهای متفاوت است:

این روش همان روش ابتدایی و معمول است که همه ی عملیات باهم انجام میشود و در صورت بروز خطا کل عملیات متوقف میشود.

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


به مثال زیر که انتقال وجه از بانکی به بانک دیگر است توجه کنید:

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