Presentation is loading. Please wait.

Presentation is loading. Please wait.

תרגול 8 עצי B+ אינדקס משני.

Similar presentations


Presentation on theme: "תרגול 8 עצי B+ אינדקס משני."— Presentation transcript:

1 תרגול 8 עצי B+ אינדקס משני

2 נתון עץ B+ מדרגה 125. העץ מכיל 4,000,000 רשומות.
שאלה 1 נתון עץ B+ מדרגה 125. העץ מכיל 4,000,000 רשומות. קיבולת עלה מכסימלית היא 5 רשומות. תפוסת כל צומת בעץ היא 80% בדיוק. בזיכרון הראשי יש מקום לאחסון 10,101 צמתים פנימיים. עדיפות האחסון בזיכרון הראשי הנה ע"פ הרמה בעץ, לשורש העדיפות הגבוהה ביותר. כלומר B=5, m=125 בכל צומת יש 100 בנים ובכל עלה יש 4 רשומות.

3 א. מה מספר גישות הדיסק שיידרשו לצורך שליפת רשומה?
צריך לחשב איזה חלק מהעץ נמצא בדיסק. כיוון שהתפוסה היא 80%, לכל צומת פנימי יש 100 בנים ובכל עלה 4 רשומות. יש 1,000,000 עלים. מעליהם 10,000 צמתים פנימיים, שמעליהם 100 צמתים פנימיים שמעליהם השורש. לכן כל הצמתים הפנימיים נשמרים בזיכרון. לכן דרושה גישה אחת לדיסק לצורך שליפת רשומה.

4 כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים.
ב. בהנחה שבזיכרון מצוי השורש והרמה שמתחתיו בלבד, חשב כמה גישות דיסק יידרשו לצורך ביצוע פעולת תת-תחום הכוללת קריאה של 9 רשומות עוקבות מהקובץ הנ"ל. כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים. כדי לחשב את מספר הגישות, נתייחס לשני מקרים: 1. יש מצביעים ברמת העלים – 4 גישות. גישה אחת לצומת פנימית ו- 3 גישות לעלים. האם זה נכון בכל מצב? כן. במקרה זה. אבל אם היינו נדרשים לקרוא 8 רשומות אזיי היה סיכוי מסוים שהם פרושים על 3 עלים וסיכוי מסוים לפרישה על 2 עלים. היינו מחשבים תוחלת צומת פנימית 1 2 3

5 כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים.
ב. בהנחה שבזיכרון מצוי השורש והרמה שמתחתיו בלבד, חשב כמה גישות דיסק יידרשו לצורך ביצוע פעולת תת-תחום הכוללת קריאה של 9 רשומות עוקבות מהקובץ הנ"ל. כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים. כדי לחשב את מספר הגישות, נתייחס לשני מקרים: 2. אין מצביעים ברמת העלים – 4 או 5 גישות. כל הרשומות תחת צומת פנימית אחת – 4 גישות. צומת פנימית 1 2 3

6 כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים.
ב. בהנחה שבזיכרון מצוי השורש והרמה שמתחתיו בלבד, חשב כמה גישות דיסק יידרשו לצורך ביצוע פעולת תת-תחום הכוללת קריאה של 9 רשומות עוקבות מהקובץ הנ"ל. כדי לקרוא 9 רשומות עוקבות צריך לקרוא 3 עלים. כדי לחשב את מספר הגישות, נתייחס לשני מקרים: 2. אין מצביעים ברמת העלים – 4 או 5 גישות. II. הרשומות תחת שני צמתים פנימיים בעץ – 5 גישות. הסיכוי שהם נמצאים תחת אותו צומת הוא 4/12 והמשלים שלו הוא הסיכוי שהם בשני צמתים. לכן סך הכל תוחלת מספר הצמתים שנצטרך לקרוא הוא 56/12 שזה קצת יותר מ-4. זה חשוב שנתרגל לחשוב על זה בצורה כזאת. צומת פנימית 2 3 צומת פנימית 1 1 2

7 עצי B+ מאפשרים שליפה יעילה וגישת תת-תחום על פי מפתח ראשי.
אינדקס משני עצי B+ מאפשרים שליפה יעילה וגישת תת-תחום על פי מפתח ראשי. לעיתים רוצים לאפשר פעולות אלו גם עבור שדות נוספים. לדוגמא – בקובץ סטודנטים המפתח הוא מספר סטודנט, אבל רוצים לאפשר גם גישה ישירה וסריקת תת-תחום על פי שם פרטי ושם משפחה.

8 הפתרון – הגדרת אינדקס משני, שהוא עץB+ שמוגדר עבור המפתח המשני.
העלים באינדקס המשני אינם מכילים רשומות. אלא הצבעה לעלים של הקובץ הראשי, שבהם יושבות הרשומות. ההצבעות יכולות להיות כתובות פיסיות של העלה בו נמצאת הרשומה pinned (נעוץ), או מפתח ראשי של הרשומה בקובץ הראשי unpinned (בלתי-נעוץ). הערה – מפתח משני אינו בהכרח חד ערכי, לכן יכולות להיות מספר רשומות עם אותו ערך של מפתח משני.

9 אינדקס ראשי 03 01 Cohen Moshe 02 Levi Yair 04 Levi Joe 03 Cohen Danny
אינדקס משני נעוץ Levi 02 Levi 04 אינדקס משני בלתי-נעוץ Cohen 01 Cohen 03

10 אינדקס משני נעוץ (pinned): חיפוש (לפי מפתח משני):
חפש באינדקס המשני, קבל כתובת של עלה. קרא את העלה וחפש את הרשומה בו. הכנסה: הכנס את הרשומה החדשה בעזרת האינדקס הראשי לעלה L. הוסף לאינדקס המשני מיני-רשומה המכילה מפתח משני וכתובת של L. אם העלה של האינדקס הראשי פוצל, עדכן את כל המפתחות באינדקס המשני שהצביעו לרשומות שנדדו לעלה אחר.

11 אינדקס משני בלתי-נעוץ (unpinned): חיפוש (לפי מפתח משני):
חפש באינדקס המשני, קבל מפתח ראשי k. חפש את k באינדקס הראשי. הכנסה: הכנס את הרשומה החדשה בעזרת האינדקס הראשי. הוסף לאינדקס המשני מיני-רשומה המכילה מפתח משני ומפתח ראשי.

12 יתכן שיש הרבה אינדקסים משניים (חלקם אפילו זמניים). חסרון הבלתי-נעוץ:
השוואה בין שתי השיטות: חסרון הנעוץ: כשמעבירים רשימות ממקומם בקובץ (למשל, באיחוד או פיצול) יש לעדכן את המיני-רשומות הרלוונטיות בכל האינדקסים המשניים. יתכן שיש הרבה אינדקסים משניים (חלקם אפילו זמניים). חסרון הבלתי-נעוץ: זמן החיפוש כפול, כי מהאינדקס המשני מקבלים את המפתח הראשי ולא את מיקום הרשומה.

13 פתרון: ארגון אינדקס משני משולב (נעוץ/בלתי-נעוץ)
משולב: במיני-רשומה של האינדקס המשני נשמור גם את המפתח הראשי של הרשומה המקורית וגם כתובת למיקום "משוער" של הרשומה המקורית. חיפוש (לפי מפתח משני): חפש באינדקס המשני, קבל כתובת של עלה ומפתח ראשי k. קרא את העלה וחפש את הרשומה בו. אם לא נמצאה - חפש את k באינדקס הראשי ועדכן את כתובת העלה באינדקס המשני. הכנסה: הכנס את הרשומה החדשה בעזרת האינדקס הראשי לעלה L. הוסף לאינדקס המשני מיני-רשומה המכילה מפתח משני, מפתח ראשי וכתובת לעלה L.

14 יתרונות הפיתרון המשולב:
לא מבזבזים זמן מיותר לעדכן כל האינדקסים המשניים בזמן העברת רשומה ממקום למקום. בזמן חיפוש רשומה משלמים מחיר חיפוש כפול (או אפילו קצת יותר) רק בפעם הראשונה שניגשים אליה דרך אותו אינדקס משני לאחר העברתה. כשיש הרבה רשומות עם אותו מפתח משני ניתן לעתים לזהות את הרשומה המבוקשת ע"פ המפתח הראשי מבלי לגשת ולבדוק את כל הרשומות האפשריות.

15 כל תרנגולת מזוהה ע"י מספר זיהוי - 10 Byte, ושם – 25 Byte.
שאלה 2 בלול של יוסף 276,000 תרנגולות. כל תרנגולת מזוהה ע"י מספר זיהוי - 10 Byte, ושם – 25 Byte. כדי לעקוב אחרי תנובת הביצים בשנה האחרונה, לכל תרנגולת נשמור שדות בגודל 1Byte, הערך הוא משקל הביצה שהטילה התרנגולת ביום ה- של השנה ( אם התרנגולת לא הטילה ביצה באותו יום). מה אנו מסיקים מהסיפור הזה: רשומה על תרנגולת היא בגודל 400 בתים – 10 על מספר, 25 על שם ועוד 365 על מידע על ביצים

16 ליוסף יש דיסק בו 1000 גלילים ו- 20 משטחים.
בכל מסילה 10 סקטורים בני 4 KByte כל אחד. כתובת בדיסק תופסת 10 Byte. למחשב זיכרון פנימי של 1 MByte. הכניסו את הרשומות בסדר אקראי לעץ B+ ריק. את העץ אחסנו בגלילים רצופים. גודל עלה שווה לגודל מסילה.

17 א. מהו המספר הצפוי של גלילים שיתפוס הקובץ? גודל רשומה הוא:
מספר רשומות צפוי בכל עלה: מספר עלים צפוי: מספר גלילים עבור רמת העלים: המקום הדרוש לרמה ראשונה של צמתים פנימיים הוא: עבור כל עלה צריך לשמור מספר זיהוי (מפתח)+כתובת: אם תפוסת צומת פנימי היא מלאה אז נצטרך: עבור תפוסה ממוצעת: בסה"כ 198 גלילים.

18 ב. כמה מקום יתפוס האינדקס המשני?
כדי לתת יחס אישי לכל תרנגולת, החליט יוסף לאפשר לגשת לרשומת תרנגולת ע"פ שמה. לצורך זה יש לבנות אינדקס משני unpinned לפי שם התרנגולת. ב. כמה מקום יתפוס האינדקס המשני? ברמה התחתונה של האינדקס המשני שומרים עבור כל תרנגולת שם + מספר זיהוי (מפתח ראשי) . נפח כולל: רמות נוספות של האינדקס המשני תוספות מקום זניח (פחות ממסילה).


Download ppt "תרגול 8 עצי B+ אינדקס משני."

Similar presentations


Ads by Google