برنامه نویس و سنگنورد که این همهی ماجرا نیست!
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 بانک کال نشد، کار نکرد و یا حتی به طور کلی فرآیند مرحله اول یعنی برداشت وجه با موفقیت صورت نگرفت، باید رولبک صورت گرفته شود و سراغ بانک دوم جهت واریز نرود تا عملیات بازگشت وجه به حساب صورت پذیرد.
مطلبی دیگر از این انتشارات
چرا Redis اینقدر سریع است؟
مطلبی دیگر از این انتشارات
کلاس Nested در مقایسه با کلاس Inner در کاتلین
مطلبی دیگر از این انتشارات
آموزش Unit Test در Golang