Photo
click to show
click to show
درود دوستان
درحال کار روی یه پروژه هستم که fastapi و یه ربات تلگرامی باهم اجرا میشن.
عملیات ها هم همگی توی لایه service انجام میشن
سوالم اینه که آیا بهتره هنگامی که یه سشن دیتابیس باز میکنم همیشه توی transaction باشه یا صرفا جاهایی که میخوام write کنم بازش کنم؟
یه نگاه به عکس بکنید. این یه متد از سرویسم هست. توی حالت فعلی (استفاده همیشگی از tx) سشن دیتابیس خارج از سرویس ایجاد میشه و پاس داده میشه به سرویس. پس داخل سرویس من نمیدونم که کامیت انجام میشه یا نه. چون ممکنه بعدش عملیات های دیگه ای قرار بگیرن و اگر اونا به ارور بخورن کل operation رولبک میشه.
یا فرضا توی همین عکس جایی که من TODO گذاشتم رو نگاه کنید. اینجا من میخوام یه نوتیفیکیشنی ارسال کنم که ارور خوردنش لزومی نداره رولبک کنه.
مشکلات دیگه ای که ممکنه بر بخورم سمت handler های تلگرام هست. اینجا چون با io سرکار داریم اگر بخوام به ازای هر اپدیتی که میاد و تا handle شدن کامل اون توسط handler من tx رو باز بذارم توی بعضی حالات ممکنه ۱ تا ۲ ثانیه زمان بر باشه. یا اصلا بخاطر ارتباط با سرور های تلگرام تایم اوت بخورم. اینطوری کل عملیات رولبک میشه.