آیا باید داده‌ها را در حافظه نهان (Cache) قرار دهید؟

منتشر‌شده در: وبسایت درباره علم داده به تاریخ ۹ آپریل ۲۰۲۰
لینک منبع: System Design Interview Prep: Should You Put the Data in Cache?

حافظه نهان (Cache) یک انبار داده است که داده‌ها را با سرعت نسبتا بالایی ذخیره می‌کند. حافظه‌های نهان سخت‌افزاری و نرم‌افزاری وجود دارند. در مصاحبه طراحی سیستم، ما بیشتر بر روی حافظه نهان نرم‌افزاری تمرکز خواهیم کرد. در بسیاری از موارد، حافظه نهان بلوک‌هایی از حافظه هستند که داده‌ها را ذخیره می‌کنند. از آنجا که سرعت دسترسی به حافظه بسیار سریع‌تر از دستگاه‌های IO مانند دیسک و شبکه است، برنامه‌ها می‌توانند داده‌ها را در حافظه قرار دهند تا از دسترسی به IO اجتناب کنند. در نتیجه، توان عملیاتی را می توان افزایش داد و تاخیر را کاهش داد.

ذخیره همه داده‌ها در حافظه نهان مناسب نیست

حافظه نهان در حافظه سیستم ذخیره می‌شود و معمولا بسیار کوچک‌تر از یک ذخیره‌ساز پایدار مثل یک دیسک است. بنابراین، اگر برنامه شما نیاز دارد که با حجم زیادی از داده‌ها سر و کار داشته باشد، ذخیره کردن همه چیز در حافظه نهان عملی نیست. تنها یک زیرمجموعه کوچک از داده‌ها باید در حافظه نهان قرار گیرد. زمانی که داده‌ها در حافظه نهان یافت می‌شوند، آن را «Cache hit» می‌نامند. اگر نه، آن را «Cache miss» می‌نامند.

برای یک طراح سیستم مهم است که بفهمد چه داده‌هایی باید در حافظه نهان باشند. پیدا کردن آن دشوار نیست، تنها داده‌های داغ که اغلب درخواست می‌شوند باید در حافظه نهان باقی بمانند. برای مثال طراحی فیس بوک، پست باید داغ‌تر از پروفایل کاربر باشد. و پست‌ها از افراد مشهور باید بسیار داغ‌تر از کاربران معمولی باشند. بنابراین، شما باید این را در مصاحبه اولویت‌بندی کنید.

همه برنامه‌ها نباید حافظه نهان داشته باشند

مهم است که بدانیم حافظه نهان، توان عملیاتی را در همه انواع سیستم‌ها افزایش نمی‌دهد. در برخی موارد، تاثیر منفی بر سیستم دارد. برای مثال، اگر سیستم شما نیاز به به‌روزرسانی یا نوشتن مکرر داده‌ها دارد، داده‌ها در حافظه نهان نیز باید به طور مداوم در حال تغییر باشند. این امر منجر به عدم اعتبار گسترده حافظه نهان می‌شود. بنابراین، برنامه باید داده‌های ذخیره‌شده در حافظه نهان را به عنوان نادرست نشان‌گذاری کند. همچنین، باید داده‌های به روز شده را در انبار داده پایدار متناظر خود بنویسد. در این مثال، عدم اعتبار حافظه نهان به یک سربار تبدیل می‌شود. بنابراین حافظه نهان تنها برای آن دسته از کاربردهایی مفید است که زیاد خوانده می‌شوند اما زیاد نوشته نمی‌شوند.

سیاست‌های نوشتن در حافظه نهان

زمانی که یک برنامه نیاز به به‌روزرسانی داده‌ها دارد، باید:

  1. داده‌ها در ذخیره‌ساز پایدار به‌روزرسانی کند
  2. داده‌ها را در حافظه نهان غیر معتبر یا به روز رسانی کند. چند نوع سیاست نوشتن در حافظه نهان وجود دارد.

نوشتن از طریق: نوشتن داده‌های جدید به حافظه نهان و ذخیره نسخه پشتیبان به صورت  همزمان.

مزیت این روش در آن است که داده‌ها هم در پشتیبانی و هم در حافظه نهان سازگار هستند. به‌روزرسانی داده‌ها در صورت قطع برق از دست نخواهد رفت.

عیب این روش در آن است که زمانی که صرف نوشتن می‌شود بسیار طولانی‌تر است زیرا نیاز به نوشتن در یک انبار داده پایدار دارد که بسیار کند است.

نوشتن-دربازگشت: ابتدا در حافظه نهان بنویسید. مادامی که داده‌ها جایگزین نشوند بر روی دیسک نوشته نخواهد شد.

مزیت این روش در آن است که نوشتن سریع‌تر است زیرا نیازی به به‌روزرسانی ذخیره داده پشتیبان نیست.

عیب آن این است که می‌تواند به طور بالقوه باعث از دست رفتن اطلاعات به‌روز شود.  همچنین، پیاده‌سازی این روش پیچیده‌تر است، زیرا باید پی‌گیری کند که کدام بلوک در حافظه نهان به روز شده، اما هنوز بر روی دیسک نوشته نشده است. این نوع بلوک حافظه نهان بلوک کثیف نامیده می‌شود.

سیاست‌های جایگزینی حافظه نهان

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

به تازگی استفاده نشده‌ (Least Recently Used)، داده‌هایی که اخیرا به‌کار نرفته‌اند را دور می‌اندازد. در این سیاست، «زمان استفاده» باید پی‌گیری شود.

به ندرت استفاده شده (Least Frequently Used)، داده‌هایی که کم‌تر از همه مورد استفاده قرار می‌گیرند را دور می‌اندازد. تعداد موارد استفاده پی‌گیری می‌شود.

خلاصه

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


این متن با استفاده از ربات مترجم مقاله دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.