چطوری میتونیم بین دوتا دیتابیس مجزا مثل SQL و NoSQL عملیات Transaction رو انجام بدیم؟
به طور طبیعی اینکار ممکن نیست، اما پترنی برای انجام اینکار وجود داره و شما میتونید توسط این پترن بین این دوتا دیتابیس transaction بزنید.
1.در صورتی که هر دو دیتابیس SQL و NoSQL قابلیت transaction رو داشته باشن:
در این روش شما میتونید ابتدا اطلاعات رو به صورت transaction توی دیتابیس ها ذخیره کنید بدون اینکه transaction ها رو commit کنید، سپس اگر هر دو transaction با موفقیت اطلاعات رو تونستن به ثبت یا حذف برسونن اونوقت transaction هر دو دیتابیس رو Commit کنید و اطلاعات رو ذخیره کنید.
2.در صورتی که فقط یکی از دو دیتابیس قابلیت transaction داشته باشن:
در این روش ابتدا کوئری رو روی اون دیتابیسی که قابلیت transaction داره اجرا می کنید ولی commit نمی کنید سپس کوئری رو روی دیتابیسی که transaction نداره اجرا می کنید اگر دیتابیس دوم به خطا نخورد transaction دیتابیس اول رو کامیت می کنید، در غیر این صورت اگر دیتابیس دوم خطا بخوره دیتابیس اول هم تغییراتش نباید commit بشه.
ما توی سیستم خودمون ساختار SQL و No SQL هامون یکی هست یعنی برنامه نویس اصلا متوجه این نمیشه که کوئری ها رو باید برای sql یا no sql مجزا بزنه هر دو یک شکل هستن فقط توی زیر ساخت مشخص میکنیم که این context قراره sql باشه یا no sql و تبدیل یک دیتابیس sql به no sql فقط با یک ارث بری فاصله داره و ساختار transaction بین دوتا دیتابیس مجزا رو توی هسته این سیستم پیاده سازی کردیم به همین روش هایی که در بالا توضیح دادم.
#CSharp
#EFCore
#Transaction
@CSharpTips
به طور طبیعی اینکار ممکن نیست، اما پترنی برای انجام اینکار وجود داره و شما میتونید توسط این پترن بین این دوتا دیتابیس transaction بزنید.
1.در صورتی که هر دو دیتابیس SQL و NoSQL قابلیت transaction رو داشته باشن:
در این روش شما میتونید ابتدا اطلاعات رو به صورت transaction توی دیتابیس ها ذخیره کنید بدون اینکه transaction ها رو commit کنید، سپس اگر هر دو transaction با موفقیت اطلاعات رو تونستن به ثبت یا حذف برسونن اونوقت transaction هر دو دیتابیس رو Commit کنید و اطلاعات رو ذخیره کنید.
2.در صورتی که فقط یکی از دو دیتابیس قابلیت transaction داشته باشن:
در این روش ابتدا کوئری رو روی اون دیتابیسی که قابلیت transaction داره اجرا می کنید ولی commit نمی کنید سپس کوئری رو روی دیتابیسی که transaction نداره اجرا می کنید اگر دیتابیس دوم به خطا نخورد transaction دیتابیس اول رو کامیت می کنید، در غیر این صورت اگر دیتابیس دوم خطا بخوره دیتابیس اول هم تغییراتش نباید commit بشه.
ما توی سیستم خودمون ساختار SQL و No SQL هامون یکی هست یعنی برنامه نویس اصلا متوجه این نمیشه که کوئری ها رو باید برای sql یا no sql مجزا بزنه هر دو یک شکل هستن فقط توی زیر ساخت مشخص میکنیم که این context قراره sql باشه یا no sql و تبدیل یک دیتابیس sql به no sql فقط با یک ارث بری فاصله داره و ساختار transaction بین دوتا دیتابیس مجزا رو توی هسته این سیستم پیاده سازی کردیم به همین روش هایی که در بالا توضیح دادم.
#CSharp
#EFCore
#Transaction
@CSharpTips