داستان Stored Procedure و گوربه


خایله خب

در دنیایی که همه از این ORM قشنگا استفاده میکنن، شما اونی باش که Stored Procedure مینویسه!

واستا یک دقه!!فوش نده! بزار بگم

ما توی علم کامپیوتر یک مفهومی داریم به اسم IO که همه میدونیم چیه!آفرین(اینجا) همون هارد و فضای ذخیره سازی و اگه تحت شبکه باشه اون TCP که همه باهم دست به دست هم دادن به مهر که کوئری مارو کنن آباد، هستش(خرده نگیر مهندس میدونم زیاد تر از این حرفاس).استفاده از این IO خیلی گرونه( از ماکارونی هم گرونه تره!) در حدی که هر رفت و برگشت به DB یک گوربه میمیره!پس بیایم گوربه ها رو با کم کردن استفاده از IO نجات بدیم.بله!

حالا یک مثالی بزنم برات که کیف کنی!

شما در نظر بگیر ما یک جدولی داریم مثلا کاربر ها توی اونن بعد یک جدول دیگه داریم که مثلا عکس ها توی اونن یک جدول دیگه داریم که قراره این داده ها رو توی اون ذخیره کنیم در حالت غیر یک پارچه و اینکه شما از سی شارپ و DBContext که داری بیای اینو هندل کنی

اولش با Linq زیبا یک کوئری میزنی و داده هایی که میخوای رو از جدول کاربر ها میگیری!(رفت و برگشت)تازه ما در نظر میگیریم که شما حواست بوده و به جایIEnumerable از IQueryable استفاده کردی J

بعد در خط بعدی میای دوباره یک رفت برگشت دیگه میکنی و داده هایی که از عکس ها میخوای میگیری!

حالا همه اینا رو با یک رفت و برگشت دیگه اضافه میکنی به جدول سوم!

سه تا گوربه مرد!سه بار رفتی و برگشتی به DB بدبخت بیچاره!اونم که صداش در نمیاد!

حالا در نظر بگیر یک SP بنویسی که یک رفت برگشت میزنی و فقط به دیتا بیس میگی که اون قضیه بود که بهت گفته بودم ! دمت گرم اجراش کن! دیتا بیس هم که از قبل میدونه چی کار میخواد بکنه به راحتی اجرا میکنه!

در این حالت ما یک گوربه تلفات میدیم!به جای سه گوربه!

پس سریع تره!

حال همین خودش هم داستان داره که سریع تر بشه!ولی خب از همون حالت قبلی بهتره!

اونایی که در خط SP نیستن و خون گوربه ها رو پایه مال میکنن! هم میتونن یک Profiler باز کنن و ببین چه غوغایی اون پشته!اگه Profiler نداری ! توی EF بیا لاگ مربوط به کوئری های تولید شده رو فعال کن که برات لاگ بگیره ! همه شلم شوربا رو نشون نمیده ولی خب خالی از لطف نیست!