مقایسه Offset و Keyset Pagination؛ چگونه میلیون ها رکورد را به صورت بهینه از دیتابیس بخوانیم


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

جلوگیری از Cache Stampede در APIهای پرترافیک با استفاده از Double-Checked Locking


زمانی که تعداد کاربران یک وب سایت افزایش پیدا می کند و درخواست های بیشتری به سرور ارسال می شود، اولین بخشی که معمولاً تحت فشار قرار می گیرد، دیتابیس است. برای کاهش این فشار، معمولاً یک لایه کش (Cache) در مقابل دیتابیس قرار می گیرد. در این معماری، ابتدا برنامه بررسی می کند که آیا ....
ادامه مطلب

پیاده سازی Multi-Tenancy همراه با EF Core در Asp.Net Core


در این مطلب به پیاده سازی یک پروژه با قابلیت Multi-Tenant می پردازیم. در یکی از پروژه هایی که انجام دادیم، نیاز بر آن بود که سیستم به صورت Multi-Tenant پیاده سازی شود که بتوان سیستم را برای چندین مشتری اجرا کرد. بسیاری از پروژه ها را میتوان برای چندین مشتری اجرا کرد اما مشکلی که ....
ادامه مطلب

هیچ وقت به صورت مستقیم به Kestrel ریکوئست ارسال نکنید


چند روز پیش، قرار شد که یه اپلیکیشنی بنویسم که تعدادی ریکوئست به یه API ارسال کنه. یه ConsoleApp بود و کار زیاد پیچیده ای نداشت. اپلیکیشن رو نوشتم و روی سیستم خودم تست کردم اوکی بود. بعد گفتن که ریکوئست ها باید به صورت موازی ارسال بشه!. یه تغییر کوچ ....
ادامه مطلب

دریافت اطلاعات از Consumerهای Masstransit


اگر با کتابخانه Masstransit کار کرده باشید، معمولا از متدهای مربوط به Send و یا Publish آن استفاده کرده اید. به این صورت که یک دیتا را ارسال کرده و یک Consumer ثبت کرده اید. که اگر زمانی دیتایی ارسال شد، Consumer آن را دریافت کند و پردازش های لازم را انجام ....
ادامه مطلب