بازگشت به صفحه اصلی

بهینه‌سازی کارایی PostgreSQL و Redis در مقیاس بالا

تکنیک‌های بهینه‌سازی کوئری‌های رابطه‌ای، نمای ایندکس‌های B-Tree، الگوهای کشینگ Cache-Aside و شمارنده‌های اتمیک بازدید.

۲۹ شهریور ۱۴۰۵6 دقیقه مطالعه512 بازدید

بهینه‌سازی کارایی PostgreSQL و Redis در مقیاس بالا

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


در سیستم‌های گراف دانش، جدول واسط پیوندها پرتکرارترین کوئری‌ها را برای استخراج همسایه‌ها دریافت می‌کند:

model PostLink {
  id           String   @id @default(cuid())
  sourcePostId String
  targetPostId String
  anchorText   String?
  createdAt    DateTime @default(now())

  sourcePost   Post     @relation("OutgoingLinks", fields: [sourcePostId], references: [id], onDelete: Cascade)
  targetPost   Post     @relation("IncomingLinks", fields: [targetPostId], references: [id], onDelete: Cascade)

  @@unique([sourcePostId, targetPostId])
  @@index([sourcePostId])
  @@index([targetPostId])
}

وجود ایندکس‌های دوگانه روی کلیدهای مبدأ و مقصد، پیچیدگی زمانی جستجوی همسایه‌ها را در الگوریتم‌های 🔗 گراف دانش از O(N)O(N) به O(logN)O(\log N) کاهش می‌دهد.


۲. استفاده از Redis برای شمارش بازدیدها و کشینگ داغ

خواندن مداوم مقالات داغ نباید پایگاه داده PostgreSQL را درگیر کند. با الگوی Cache-Aside:

  1. درخواست دریافت مقاله ابتدا در Redis بررسی می‌شود.
  2. در صورت وجود (Cache Hit)، نتیجه در کمتر از ۲ میلی‌ثانیه بازگردانده می‌شود.
  3. شمارنده بازدید با دستور اتمیک INCR post:views:{id} افزایش می‌یابد و به صورت دوره‌ای با دیتابیس اصلی همگام می‌گردد.

۳. اتصال به معماری کانتینری و سئو

این معماری مقیاس‌پذیر در بستر 🔗 کانتینرهای داکر مستقر شده و زیربنای اصلی دستیابی به سرعت ایده‌آل LCP در 🔗 استراتژی‌های جهش سئو است.

گراف ارتباطی این نوشته (Obsidian Graph View)

مشاهده گراف کل سایت ↗

شبکه اتصالات و پیوندهای این مقاله با سایر نوشته‌ها و برچسب‌های مرتبط:

0 گره|0 پیوند

ارجاعات معکوس (Backlinks)

4 نوشته

مقالاتی که در متن خود به این نوشته ارجاع داده‌اند: