الگوهای کش‌کردن دیتابیس

الگوهای کش دیتابیس: Cache-Aside، Write-Through و Write-Behind — مزایا و مشکلات هرکدام

سه الگوی اصلی

۱. Cache-Aside (Lazy Loading) — رایج‌ترین

اپلیکیشن خودش کش را مدیریت می‌کند:

  1. خواندن: اول کش → miss → دیتابیس → در کش بگذار
  2. نوشتن: دیتابیس → کش را باطل کن (invalidate)

مزایا: کش فقط داده پرکاربرد را دارد؛ مقاوم به خرابی کش (fallback به DB)

عیوب: miss اولیه کند؛ invalidate فراموش شود = داده کهنه!

۲. Write-Through

همه نوشتن‌ها از طریق کش:

  1. نوشتن: کش → کش هم دیتابیس را بنویسد (هم‌زمان)
  2. خواندن: همیشه کش (داده کامل دارد)

مزایا: داده کش همیشه تازه؛ خواندن سریع همیشگی

عیوب: نوشتن کندتر (دو مرحله)؛ داده بی‌استفاده هم کش می‌شود

۳. Write-Behind (Write-Back)

مثل Write-Through اما نوشتن دیتابیس async:

  1. نوشتن: کش (فوری!) → صف → دیتابیس بعداً

مزایا: نوشتن فوق سریع؛ جذب نوسانات نوشتن

عیوب: 💀 کش بمیرد = داده از دست رفته! پیچیده‌ترین

مقایسه

معیارCache-AsideWrite-ThroughWrite-Behind
پیچیدگیساده ✓متوسطسخت
تازگی دادهخطر کهنگیهمیشه تازه ✓تأخیری
سرعت نوشتنمعمولیکندسریع ✓✓
ریسک دادهکم ✓کم ✓از دست رفتن!
کاربردعمومی ✓✓خواندنی سنگیننوشتنی سنگین (لاگ)

مشکل کلاسیک: Invalidate

در Cache-Aside، بعد از نوشتن:

قاعده معروف: «حذف کن، آپدیت نکن»

نکته مصاحبه: پیش‌فرض بگویید Cache-Aside + حذف در نوشتن + TTL ایمنی. اگر نوشتن سنگین بود، Write-Behind را با ذکر ریسک پیشنهاد دهید.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط