الگوهای کشکردن دیتابیس
الگوهای کش دیتابیس: Cache-Aside، Write-Through و Write-Behind — مزایا و مشکلات هرکدام
سه الگوی اصلی
۱. Cache-Aside (Lazy Loading) — رایجترین
اپلیکیشن خودش کش را مدیریت میکند:
- خواندن: اول کش → miss → دیتابیس → در کش بگذار
- نوشتن: دیتابیس → کش را باطل کن (invalidate)
مزایا: کش فقط داده پرکاربرد را دارد؛ مقاوم به خرابی کش (fallback به DB)
عیوب: miss اولیه کند؛ invalidate فراموش شود = داده کهنه!
۲. Write-Through
همه نوشتنها از طریق کش:
- نوشتن: کش → کش هم دیتابیس را بنویسد (همزمان)
- خواندن: همیشه کش (داده کامل دارد)
مزایا: داده کش همیشه تازه؛ خواندن سریع همیشگی
عیوب: نوشتن کندتر (دو مرحله)؛ داده بیاستفاده هم کش میشود
۳. Write-Behind (Write-Back)
مثل Write-Through اما نوشتن دیتابیس async:
- نوشتن: کش (فوری!) → صف → دیتابیس بعداً
مزایا: نوشتن فوق سریع؛ جذب نوسانات نوشتن
عیوب: 💀 کش بمیرد = داده از دست رفته! پیچیدهترین
مقایسه
| معیار | Cache-Aside | Write-Through | Write-Behind |
|---|---|---|---|
| پیچیدگی | ساده ✓ | متوسط | سخت |
| تازگی داده | خطر کهنگی | همیشه تازه ✓ | تأخیری |
| سرعت نوشتن | معمولی | کند | سریع ✓✓ |
| ریسک داده | کم ✓ | کم ✓ | از دست رفتن! |
| کاربرد | عمومی ✓✓ | خواندنی سنگین | نوشتنی سنگین (لاگ) |
مشکل کلاسیک: Invalidate
در Cache-Aside، بعد از نوشتن:
- ✓ حذف از کش (پیشنهاد) — دفعه بعد از DB میخواند
- ✗ آپدیت کش — خطر race condition (دو نوشتن همزمان!)
قاعده معروف: «حذف کن، آپدیت نکن»
نکته مصاحبه: پیشفرض بگویید Cache-Aside + حذف در نوشتن + TTL ایمنی. اگر نوشتن سنگین بود، Write-Behind را با ذکر ریسک پیشنهاد دهید.
جمعبندی
- Cache-Aside: ساده و عمومی — استاندارد شروع
- Write-Through: تازه همیشه، نوشتن کند
- Write-Behind: نوشتن سریع، ریسک از دست دادن
- قاعده طلایی: حذف کن، آپدیت نکن
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.