כאשר מבקשים נתונים מכל מקור, תמיד יש עיכוב מסוים. פינג לשרתי אינטרנט נמדד באלפיות שניות, זמן הגישה לאחסון יכול להיות חביון במיקרו-שניות בעוד שהשהיית RAM נמדדת במחזורי שעון CPU. כמובן, מהירויות מסוג זה היו בלתי מתקבלות על הדעת רק לפני כמה עשורים, אבל בהווה, הן אף פעם לא מהירות מספיק. מהירות הגישה היא באופן קבוע סוג של צוואר בקבוק בביצועים. אחת הדרכים שניתן לטפל בזה היא באמצעות מטמון.
שמירת מטמון היא תהליך של אחסון עותק זמני של משאב באופן שניתן לגשת אליו מהר יותר מכפי שניתן היה בדרך כלל. יש מגוון עצום של יישומים הן בתוכנה והן בחומרה. מטמון יכול לפעול כמטמון קריאה, מטמון כתיבה או שניהם.
קרא מטמונים
במטמון קריאה נתונים שהתבקשו בעבר מאוחסנים במטמון לגישה מהירה יותר. בתרחישים מסוימים, המטמון עשוי אפילו להיטען מראש בנתונים המאפשרים להגיש את הבקשה הראשונה מהמטמון ולא רק בבקשות עוקבות.
מטמון הקריאה שסביר להניח שאתה מכיר הוא מטמון הדפדפן. כאן הדפדפן מאחסן עותק מקומי של המשאבים המבוקשים. משמעות הדבר היא שאם וכאשר דף האינטרנט נטען מחדש או נטען דף דומה שמשתמש בחלק ניכר מאותו תוכן, ניתן להגיש את התוכן הזה מהמטמון ולא משרת האינטרנט. זה לא רק אומר שדף האינטרנט יכול להיטען מהר יותר, אלא זה גם מפחית את העומס באינטרנט שרת ומקטין את כמות הנתונים שהמשתמש צריך להוריד, מה שיכול להיות חשוב במד קשרים.
זיכרון RAM עצמו משמש גם כמטמון קריאה עבור נתונים בכונן הקשיח. במקרה זה, נתונים עבור תוכנית פועלת נטענים מראש ל-RAM כך שה-CPU יוכל לגשת אליו מהר יותר. לאחר מכן, הנתונים מה-RAM נשמרים במטמון למטמון ה-CPU, אם כי התהליך עבור זה מורכב הרבה יותר, שכן מטמון ה-CPU נמדד במגה-בייט ולא בג'יגה-בייט.
כתוב מטמונים
מטמון כתיבה הוא מטמון שיכול לקלוט נתונים הנכתבים למכשיר איטי יותר. דוגמה נפוצה לכך תהיה מטמון SLC בכונני SSD מודרניים. מטמון זה אינו מאפשר קריאת נתונים מהר יותר, עם זאת, זה הרבה יותר מהיר לכתוב מאשר לכתוב לפלאש TLC או QLC שמרכיב את שאר ה-SSD. מטמון ה-SLC יכול לספוג פעולות כתיבה במהירות גבוהה, ואז מוריד את הנתונים האלה ברגע שהוא יכול לפלאש ה-TLC שמציע צפיפות אחסון הרבה יותר טובה, אבל הוא גם הרבה יותר איטי לכתיבה. שימוש בזיכרון הפלאש בצורה זו מייעל אותו הן למהירויות כתיבה מהירות והן לצפיפות אחסון גבוהה.
מטמונים היברידיים
ישנן דרכים רבות לטפל במטמונים שיכולות לאפשר להם לפעול כמטמון קריאה וכתיבה כאחד. כל אחת מהשיטות הללו מטפלת בפעולות כתיבה בצורה שונה ויש לה יתרונות וחסרונות. שלוש האפשרויות הן כתיבה, כתיבה וכתיבה חוזרת. מטמון כתיבה מדלג לחלוטין על המטמון בעת כתיבה, מטמון הכתיבה כותב למטמון, אך מחשיב את הפעולה שהושלמה רק כאשר היא נכתבה לאחסון. מטמון הכתיבה חוזר כותב למטמון ולאחר מכן מחשיב את הפעולה הושלמה, תוך הסתמכות על המטמון שיעביר אותו לאחסון אם יש צורך בכך.
כתיבה סביב יכולה להיות שימושית אם אתה מצפה לנפח גדול של כתיבה מכיוון שהיא ממזערת את נטישת המטמון. עם זאת, משמעות הדבר היא שפעולה שתקרא כל אחד מהנתונים הכתובים הללו תתמודד עם לפחות פספוס מטמון אחד בפעם הראשונה. מטמון כתיבה מאחסן מיד פעולות כתיבה במטמון, כלומר ניתן להגיש את התוצאה מהמטמון בפעם הראשונה שהיא מתבקשת. עם זאת, כדי להיחשב כמושלם, פעולת כתיבה צריכה לכתוב גם את הנתונים לדיסק, מה שמוסיף חביון. למטמון כתיבה חוזר יש את אותה תועלת כמו כתיבה, המאפשרת הגשה מידית של נתונים כתובים מהמטמון. זה לא דורש פעולות כתיבה כדי לכתוב לדיסק כדי להיחשב כמושלם. זה מקטין את חביון הכתיבה אך מלווה בסיכון לאובדן נתונים אם המטמון נדיף והוא לא מסיים לכתוב את הנתונים בחזרה לאחסון לפני הפסקת החשמל.
כיצד להסיר נתונים מהמטמון?
אחד הגורמים המגבילים של כל מטמון הוא הקיבולת. חיפוש מטמון גדול לוקח הרבה זמן, ומבטל חלק ניכר מהיתרון בשימוש במטמון מלכתחילה. טכנולוגיות זיכרון המשמשות לאחסון במטמון נוטות גם להיות יקרות יותר מהזיכרון שממנו הם שומרים במטמון. אם זה לא היה המקרה, סביר להניח ששכבת הזיכרון הייתה מחליפה טכנולוגיות זיכרון כדי לשפר את הביצועים. שני הגורמים הללו פירושם שהמטמונים נוטים להיות קטנים יחסית, במיוחד בהשוואה לאמצעי האחסון ממנו הם שומרים במטמון. לזיכרון RAM יש פחות קיבולת מאחסון ולמטמון CPU יש פחות קיבולת מזיכרון RAM. למטמון SLC יש פחות קיבולת מזיכרון TLC.
כל זה אומר שלעיתים קרובות יש צורך להוציא נתונים מהמטמון כדי לפנות מקום לנתונים חדשים שיש לאחסן במטמון. יש מגוון גישות שונות לכך. "בשימוש הכי פחות תכוף", מעדיף לפנות ערכי מטמון בעלי ספירת הגישה הנמוכה ביותר. זה יכול להיות שימושי לניבוי אילו ערכים ישפיעו הכי פחות על החמצות עתידיות של מטמון אבל יספור גם ערכים שנוספו לאחרונה כבעלי מספר נמוך של גישה, מה שעלול להוביל למטמון מַחבֵּצָה.
"הפחות לאחרונה בשימוש" מעדיף לפנות ערכי מטמון שלא נעשה בהם שימוש זמן מה. זה מניח שהם לא בשימוש כרגע, אבל לא לוקח בחשבון אם הם היו בשימוש רב לפני כמה זמן. "השימוש האחרון ביותר" מעדיף לגרש את ערכי המטמון שבהם השתמשו לאחרונה, בהנחה שנעשה בהם שימוש ולא יהיה צורך להשתמש בהם שוב. הגישה הטובה ביותר היא בדרך כלל שילוב של שלושתן, בהתבסס על סטטיסטיקת שימוש.
מידע מעופש וסיכוני אבטחה
הסיכון העיקרי של מטמונים הוא שהמידע שהם מכילים עלול להיות מעופש. ערך מטמון נחשב למיושן כאשר הנתונים המקוריים עודכנו והותירו את ערך המטמון לא מעודכן. חשוב לוודא באופן קבוע שהעותק החי המוגש עדיין תואם את העותק השמור.
באתרים ספציפיים, חשוב מאוד גם לזהות אילו נתונים ניתן ולא ניתן לאחסן במטמון. לדוגמה, זה בסדר גמור שקובץ JavaScript גדול ללא שינוי יישמר במטמון. זה חוסך מהמשתמש להוריד אותו בכל פעם, ואף יכול להועיל למשתמשים אחרים המשרתים אותו מטמון. עם זאת, אינך יכול לשמור נתונים ספציפיים להפעלה. תארו לעצמכם מה יקרה אם תגלשו לאפליקציית הודעות בזמן שאתם מחוברים כעצמכם, רק כדי לגלות שהוגשה לכם גרסה שמור של הודעות של משתמש אחר. למרבה המזל, שרתי אינטרנט יכולים לציין אילו משאבים ניתן ולא ניתן לאחסן במטמון ובעיות אלו ידועות בדרך כלל ולכן יש מעט בעיות כמו זו.
סיכום
מטמון הוא חלק מהזיכרון שיכול לאחסן כמה נתונים שנעשה בהם שימוש לאחרונה בשיטת אחסון שהגישה אליה מהירה יותר מאשר להשלים את תהליך הגישה הרגיל לנתונים שוב. מטמון מוגבל בדרך כלל בקיבולת, כלומר הוא צריך לפנות ערכים ברגע שהוא מלא. מטמונים הם בדרך כלל שקופים למשתמש, כלומר שהשהייה היא האינדיקציה היחידה לכך שהתוצאה הוגשה באמצעות מטמון.