1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
A. Frank File Organization Indexed-Sequential File Measurements Thanks to Tamar Barnes.
עיבוד תמונות ואותות בעזרת מחשב
Presentation by Dudu Yanay and Elior Malul 1.  מה משותף לכל אלגוריתם המשתמש ב -Bucket Elimination: ◦ נתון מודל הסתברותי ורשת ביסיאנית מתאימה. ◦ נתונה.
אופטימיזציה של שאילתות
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
מסדי נתונים תשס " ג 1 תכנון סכמות (Design Theory) מסדי נתונים.
תרגול 8 עצי B+ אינדקס משני.
A. Frank File Organization קובץ ישיר מתקדם Advanced Direct File.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
A. Frank File Organization Indexed-Sequential File Introduction Thanks to Tamar Barnes.
A. Frank File Organization Sequential File Measures.
בהסתברות לפחות למצא בעיה במודל PAC עבור בהסתברות ε הפונקציה f טועה מודל ONLINE 1. אחרי כל טעות הפונקציה משתפרת 2. מספר הטעיות קטן.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
חישוב ואופטימיזציה של שאילתות חלק 1
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization Part 2.
קובץ רב-אינדקס Multi-Indexed File
ערמות ; מבני נתונים 09 מבוסס על מצגות של ליאור שפירא, חיים קפלן, דני פלדמן וחברים.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
מודל ONLINE לומדמורה 1. כל ניתן לחישוב בזמן פולינומיאלי 2. אחרי מספר פולינומיאלי של טעיות ( ) הלומד לא טועה ז"א שווה ל- Littlestone 1988.
1 Optimization - Selection. 2 The Selection Operation Table: Reserves(sid, bid, day, agent) A page (block) can hold 100 Reserves tuples There are 1,000.
ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. ניהול טבלת הדפים. מדיניות החלפת דפים.
תרגול 9 אלגברה רלציונית.
תרגול 7 עצי B
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
A. Frank File Organization Transfer Time/Rate Parameters.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
Remember Remember The 5 th of November. תרגול 2 קובץ סדרתי.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
1 חישוב ואופטימיזציה של שאילתות חלק 1 Query Evaluation and Optimization Part 1.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
A. Frank File Organization Introduction to Pile File.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
מתמטיקה בדידה תרגול 2.
A. Frank File Organization Hardware Size Parameters.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
מבנה מחשבים תרגול מספר 3. טענה על עצים משפט: בעץ שדרגת כל קודקודיו חסומה ב-3, מספר העלים ≤ מספר הקודקודים הפנימיים + 2. הוכחה: באינדוקציה על n, מספר הקודקודים.
(C) Yohai Devir January מבנה מחשבים ספרתיים זכרון וירטואלי מבוסס על תרגול של מורן גביש.
RELATIONAL JOIN Advanced Data Structures. Equality Joins With One Join Column External Sorting 2 SELECT * FROM Reserves R1, Sailors S1 WHERE R1.sid=S1.sid.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Tirgul 12 Trees 1.
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
אינדקסינג והשינג (indexing & hashing)
SQL בסיסי – הגדרה אינדוקטיבית
עבודה עם נתונים באמצעות ADO.NET
תיאוריית תכנון סכמות למסדי נתונים יחסיים חלק 4
Marina Kogan Sadetsky –
Based on the lecture notes of Prof. Sagiv
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators

2 חישוב יעיל של שאילתות שאילתות מתורגמות לביטוי אלגברי שאותו יש לחשב נדרש: חישוב יעיל של כל אופרטור בביטוי תוכנית ביצוע יעילה לחישוב הביטוי

3 יחסים לדוגמאות נתונים שני יחסים Sailors(sid:integer, sname:string, rating:integer, age:real) Reserves(sid:integer, bid:integer, day:dates, rname:string) רשומת Reserves באורך 40 בתים, 100 רשומות בדף ב-1000 דפים רשומת Sailors באורך 50 בתים, 80 רשומות בדף ב-500 דפים sid פירושו sailor id bid פירושו boat id sid הוא מפתח של Sailors sid,bid,day הוא מפתח של Reserves rname הוא שם המזמין (לאו דווקא השם של sid )

4 שיטות לביצוע פעולת הבחירה

5 פעולת בחירה עם תנאי אחד רוצים לחשב ביטויים מהצורה :  A op c (R) כאשר A אטריביוט של R op הוא אופרטור כגון >, = c הוא קבוע לדוגמא, רוצים לחשב את השאילתה הבאה SELECT * FROM Reserves R WHERE R.rname = ‘Joe’

6 אין אינדקס, אין סדר ניתן לבצע את החישוב על ידי סריקה של היחס אם ביחס יש M דפים, נדרש מחיר של קריאת M דפים בדוגמא מהשקף הקודם, המחיר הוא קריאת 1000 דפים

7 אין אינדקס, יש סדר אם היחס R ממוין לפי אטריביוט A, אז ניתן למצוא את הרשומה הראשונה שמקיימת את התנאי על ידי חיפוש בינארי להמשיך כל עוד הרשומות מקיימות את התנאי המחיר : log(M) + #pages with tuples from the result

8 שימוש באינדקס מסוג עץ B+ לצורך ביצוע פעולת בחירה

9 שימוש באינדקס מבוסס עץ B+ נניח שקיים אינדקס על עמודה A של R הממומש כעץ B+ מוצאים כניסה ראשונה בעץ שתואמת את תנאי החיפוש ממשיכים לעבור באופן סדרתי על העלים של האינדקס כל עוד הערכים מקיימים את תנאי החיפוש מביאים את הרשומות המתאימות מהקובץ

10 דוגמה מבצעים בחירה עם התנאי rname <‘C’ על Reserves בהנחת התפלגות אחידה, מספר הרשומות ביחס Reserves שעונות על התנאי הוא : 2/26  10%  10,000 tuples נתוני הכניסה של 10,000 הרשומות הללו מאוחסנים ברצף במספר קטן של עלי האינדקס לכל נתון כניסה, קוראים את הדף המתאים של היחס

11 אם האינדקס מקובץ, אז נתוני כניסה סמוכים זה לזה מצביעים על רשומות שנמצאות באותו דף של היחס Reserves לכן, 10,000 הרשומות של היחס שעונות על התנאי תופסות 100 דפים ( יש 100 רשומות בדף ) בנוסף, כל אחד מ הדפים נקרא לתוך הזיכרון הפנימי ( לחוצץ ) פעם אחת בלבד לפיכך אם האינדקס מקובץ, קוראים 100 דפים מהיחס Reserves

12 מדוע קוראים כל דף פעם אחת בלבד? נניח שקוראים לראשונה מהדיסק דף של היחס שיש בו רשומה שעונה על התנאי דף זה נקרא עבור נתון כניסה מסוים, שמופיע באחד העלים של האינדקס מכיוון שהאינדקס מקובץ, מיד לאחר נתון כניסה זה מופיעים ברצף נתוני הכניסה עבור כל שאר הרשומות שיש לקרוא מאותו הדף אבל הדף כבר בזיכרון הפנימי ואין צורך לקרוא אותו שוב

13 אם האינדקס אינו מקובץ, אז נתוני כניסה סמוכים זה לזה מצביעים על רשומות שנמצאות בדפים שונים של היחס Reserves לכן במקרה הגרוע ביותר, 10,000 הרשומות של היחס שעונות על התנאי נמצאות ב - 10,000 דפים שונים אבל ביחס Reserves יש 1,000 דפים לכן הרשומות שעונות על התנאי נמצאות ב - 1,000 דפים שונים לכל היותר

14 כמה דפים של היחס צריך לקרוא מהדיסק ? כאמור, הרשומות של היחס Reserves שעונות על התנאי נמצאות ב - 1,000 דפים שונים לכל היותר אבל במקרה הגרוע ביותר, קוראים דף מהדיסק עבור כל רשומה שעונה על התנאי לפיכך אם האינדקס אינו מקובץ, קוראים במקרה הגרוע ביותר 10,000 דפים של היחס Reserves

15 מדוע כל דף שמכיל רשומות של התוצאה נקרא הרבה פעמים? נניח שעבור נתון כניסה מסוים, דף של היחס נקרא לראשונה מהדיסק מכיוון שהאינדקס אינו מקובץ, מיד לאחר נתון כניסה זה מופיעים נתוני כניסה עבור רשומות שנמצאות על דפים אחרים לכן הדף שכבר נמצא בזיכרון מפנה את מקומו לדפים אחרים כשמגיעים שוב לנתון כניסה המתייחס לאותו הדף, צריך לקרוא את הדף שנית מהדיסק

16 אפשר לשפר תחילה קוראים את כל נתוני הכניסה שעונים על התנאי וממיינים אותם לפי מספר הדף בשלב השני קוראים את הדפים לפי הסדר הממוין מספר הדפים שיש לקרוא (במקרה הגרוע ביותר) הוא כמספר הרשומות שעונות על התנאי, אבל לא יותר ממספר הדפים ביחס לפיכך, עם השיפור הזה, מספר הדפים שיש לקרוא במקרה הגרוע ביותר הוא 1,000 למרות השיפור, יתכן שעדיף לעבור על היחס באופן סדרתי ( בלי שימוש באינדקס )

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

18 שימוש באינדקס ערבול לצורך ביצוע פעולת בחירה

19 שימוש באינדקס ערבול ( Hash ) אינדקס ערבול מתאים לצורך חישוב שאילתות בחירה כאשר התנאי הוא שוויון מציאת הדלי המתאים : כ גישות לדיסק קריאה של השורש (directory) של מבנה הערבול (קריאה זו נחסכת אם השורש כבר בזיכרון הפנימי) קריאה נוספת של הדלי המתאים סביר להניח שאין יותר מדלי אחד שמתאים לשוויון (אחרת, עדיף שלא להשתמש בקובץ ערבול, כדי להימנע מ- overflow) קריאת הדפים של היחס לפי נתוני הכניסה שנמצאים בדלי ומקיימים את השוויון

20 דוגמה נניח שיש בחירה מהיחס Reserves לפי התנאי rname =‘Joe’ נניח שיש אינדקס ערבול לא מקובץ על rname נניח שיש 100 הזמנות שנעשו על ידי Joe לפיכך, צריך לשלוף מהיחס Reserves 100 רשומות

21 המשך הדוגמה 100 הרשומות שצריך לשלוף מהיחס Reserves נמצאות במקרה הגרוע ביותר ב- 100 דפים שונים ובמקרה הטוב ביותר בדף אחד (כזכור, דף של היחס מכיל 100 רשומות) כלומר, בסכ " ה יהיו בין 2 ל -102 גישות לדיסק ( כולל 2-1 גישות לקובץ העירבול )

22 שיטות לביצוע הטלה

23 שיטות לביצוע הטלה חישוב הטלה דורש מעבר על הקובץ הורדת אטריביוטים לא רצויים הורדת כפילויות הורדת כפילויות על ידי שימוש במיון שימוש בערבול (hashing) אפשר לבצע רק באמצעות אינדקס, במקרה של הטלה על עמודות שכולן נכללות במפתח החיפוש של האינדקס

24 שיטות לחישוב צירוף

25 דוגמה מעונינים לחשב את השאילתה הבאה SELECT * FROM Reserves R, Sailors S WHERE R.sid = S.sid

26 שיטת חישוב נאיבית Simple Nested-Loops Join foreach tuple r of of R do foreach tuple s of S do if r i == s j then add to result

27 הערכת עלות נניח M בלוקים ב -R ו -N בלוקים ב -S ונניח p R רשומות לבלוק ב -R ו -p S רשומות לבלוק ב -S עלות החישוב : M + p R *M*N לא כולל המחיר של כתיבת התוצאה לדיסק בדוגמה של השייטים : 1, *1,000*500 = 1, *10 7 I/Os בהנחה של 10ms זמן קריאת בלוק מהדיסק, יידרשו כ -140 שעות לביצוע החישוב !

28 שיטות עיקריות לחישוב הצירוף של שני יחסים צירוף היא הפעולה האלגברית היקרה ביותר וקיימות עבורה מספר שיטות חישוב שונות : Block Nested-Loops Join Index Nested-Loops Join Sort-Merge Join Hash Join להלן, נתאר את כל אחת מארבעת השיטות האלו

29 חישוב הצירוף כשיש מספיק מקום בזיכרון הפנימי לאחד משני היחסים רוצים לחשב את הצירוף הטבעי של R ו - S אם יש מספיק זיכרון, קרא את R בשלמותו לזיכרון לכל בלוק של S, קרא את הבלוק לזיכרון וחשב את הצירוף של הרשומות מבלוק זה עם כל הרשומות של R כתוב את התוצאה לדיסק וקרא את הבלוק הבא של S

30 כמות הזיכרון הפנימי הנדרשת מספר הבלוקים של הקטן מבין שני היחסים + 2 בלוק אחד לקריאת היחס השני בלוק שני לכתיבת התוצאה כשהוא מתמלא, כותבים אותו לדיסק ומתחילים למלאו מחדש

31 זמן חישוב כולל B R בלוקים ב - R ו - B S בלוקים ב - S כל בלוק של R ו - S נקרא פעם אחת כל בלוק של התוצאה נכתב פעם אחת זמן כולל : B R + B S + output size נתעלם מהזמן הדרוש לכתיבת התוצאה, כי הוא זהה בכל השיטות לכן הזמן הוא B R + B S

32 מה עושים אם כל אחד משני היחסים גדול מהזיכרון הפנימי? בזיכרון הפנימי יש B בלוקים קרא את R בחלקים – כל פעם B-2 בלוקים עבור כל חלק של R, קוראים את כל S, בלוק אחד בכל פעם חשב את הצירוף של הרשומות מהבלוק של S עם הרשומות מהחלק של R שנמצא בזיכרון יש ceil(B R /(B-2)) איטרציות שבהן קוראים את כל S, בעוד ש - R נקרא פעם אחת הזמן הנדרש הוא B R + B S * ceil(B R /(B-2))

33 הערה הזמן הוא B R + B S * ceil(B R /(B-2)) האם עדיף שבלולאה החיצונית יהיה היחס הקטן או היחס הגדול ? תשובה : היחס הקטן ( מדוע ?)

34 למעשה תיארנו זה עתה את השיטה Block Nested-Loops Join Suppose that there are B buffer pages foreach block of B-2 pages of R do foreach page of S do { for all matching in-memory pairs r, s: add to result }

35 דוגמה להערכת העלות של Block Nested-Loops Join משתמשים ב -block nested-loops join לחישוב הצירוף מהדוגמה הקודמת תוך שימוש ב -102 מקומות לדפים בזיכרון בהנחה ש -Reserves ביחס החיצוני נדרשות 1,000 גישות לקריאת Reserves לכל 100 בלוקים של Reserves מעבר על כל היחס Sailors, לכן בסה"כ 10 מעברים על היחס Sailors ובכל מעבר קוראים 500 בלוקים סך הכל 1, *500 = 6,000 I/Os

36 המשך הערכת העלות כאשר Reserves בלולאה החיצונית נדרשו 1,000 + (1,000/100)*500 = 6,000 I/Os כאשר Sailors בלולאה החיצונית יידרשו (500/100)*1,000 = 5,500 I/Os בהנחה שקריאת בלוק אורכת 10ms, תידרש קצת יותר מדקה לחישוב הצירוף !

37 Index Nested-Loops Join נניח שיש אינדקס של S על אחד האטריביוטים שלפיהם מבצעים את הצירוף של S עם R משתמשים באינדקס למציאת הרשומות המתאימות ! foreach tuple r of R foreach tuple s of S where r i =s j add to result

38 חישוב צירוף בעזרת אינדקס חישוב צירוף של R(A,B) עם S(B,C) כאשר יש אינדקס על עמודה B של S: קרא בלוק של R ולכל רשומה מהבלוק מצא בעזרת האינדקס את כל הרשומות המתאימות של S הערה: קוראים את R פעם אחת בלבד

39 הערכת עלות בהינתן רשומה של R, נסמן ע " י X את הזמן הנדרש כדי למצוא את כל הרשומות המתאימות של S הזמן הכולל B R + t R X (t R מס ' הרשומות ב - R)

40 מהו X ? נניח שהאינדקס מכיל נתוני כניסה מהצורה (k, rid) גם אם יש הרבה נתוני כניסה עם אותו k עדיין סביר להניח שכולם על בלוק אחד, שיקרא b באינדקס ערבול צריך, בממוצע, לקרוא 1.2 בלוקים כדי להגיע לבלוק b באינדקס, שהוא עץ B+, צריך לקרוא 4-2 בלוקים כדי להגיע לבלוק b

41 המשך החישוב של X צריך לקרוא גם את הרשומות עצמן מהיחס S אם האינדקס מקובץ, אפשר להניח ( שבדר " כ ) כולן על בלוק אחד של S ולכן צריך לקרוא בלוק אחד של S אם האינדקס אינו מקובץ, אז כל רשומה מתאימה של S נמצאת על בלוק נפרד, ומספר הבלוקים של S שצריך לקרוא שווה למספר הרשומות של S שמתאימות לרשומה אחת של R ( נתאר בהמשך איך להעריך מספר זה )

42 לדוגמה אם מדובר באינדקס ערבול מקובץ, אז X=2.2 והזמן הכולל הוא B R + 2.2t R לעומת B R + B S * ceil(B R / (B-2)) בשיטה של Block Nested-Loops Join

43 דוגמה להערכת העלות של Index Nested-Loops Join נניח שליחס Sailors יש אינדקס ערבול על sid sid מפתח של Sailors ולכן לכל רשומת Reserves יש לפחות רשומה מתאימה אחת מהיחס Sailors ( למעשה, בדיוק אחת – למה ?) סריקת Reserves דורשת קריאת 1,000 בלוקים יש 100*1,000 = 100,000 רשומות ביחס Reserves לכל רשומה של Sailors, החיפוש באינדקס דורש לקרוא בממוצע 1.2 בלוקים

44 המשך הדוגמה סך כל העלות הנדרשת : 1, ,000 * 2.2 = 221,000 I/Os סך כל הזמן הנדרש, בהנחה שקריאת בלוק אורכת 10ms, הוא כ - 35 דקות

45 דוגמה נוספת נניח שליחס Reserves יש אינדקס ערבול על sid סריקת Sailors דורשת קריאת 500 בלוקים יש 80*500 = 40,000 רשומות ב -Sailors יש 100,000 הזמנות ל -40,000 שייטים – בהנחה שההתפלגות אחידה : 2.5 הזמנות לשייט בהנחה שהאינדקס אינו מקובץ : ,000*( ) = 148,500 I/Os החישוב ידרוש כ- 25 דקות

46 Sort-Merge Join חישוב צירוף של R(A,B) עם S(B,C) ע " י Sort-Merge Join: ממיינים כ"א מהיחסים על B ואז ממזגים: עוברים על R עד ש- R.B >= S.B עוברים על S עד ש- S.B >= R.B חוזרים על שני הצעדים הקודמים עד ש- R.B = S.B, ואז קוראים לזיכרון את כל החלק של R וכל החלק של S ששווים על B ומחשבים את הצירוף בין שני חלקים אלה

47 sidsnameratingage 22dustin745 28yuppy935 31lubber855 36lubber636 44guppy535 58rusty1035 sidbiddayagent /4/96Joe /3/96Frank /2/96Joe /7/96Sam /7/96Sam /6/96Frank Reserves Sailors

48 זמן החישוב של צירוף ע"י Sort-Merge Join זמן למיון : B R logB R + B S logB S זמן למיזוג ( תחת איזה הנחה ?) B R + B S סה " כ : B R + B S + B R logB R + B S logB S

49 דוגמה מיון Reserves דורש 1000 log 1000  10,000 I/Os מיון Sailors דורש 500 log 500  4,500 I/Os צירוף : 1, = 1,500 I/Os סה " כ : 10, , ,500 = 16,000 I/Os הזמן שנדרש יהיה פחות משלוש דקות על ידי שימוש בשיטות מיון טובות, ניתן להקטין את עלות החישוב לפחות מחצי העלות המחושבת כאן

50 Hash Join מבצעים חלוקה של שני יחסי הקלט ל - B-1 חלקים ע " י הפעלת פונקצית ערבול על ערכי האטריביוטים שלפיהם נעשה הצירוף על פי החלוקה, רשומות של R שמופו לקבוצה i יכולות להתחבר רק לרשומות של S שאף הן מופו ל-i קוראים את קבוצות החלוקה של R בזו אחר זו וכל קבוצה מחלקים לתת קבוצות ( שנשמרות בזיכרון הראשי ) בעזרת פונקצית ערבול חדשה ( שונה מהראשונה !) לכל קבוצת חלוקה של S קוראים את הקבוצות המתאימות של R ומנסים למצוא התאמות

51 Hash-Join Algorithm //Partition R into k partitions foreach tuple r in R do read r and add it to buffer page h(r i ) //flush buffer page when it fills //Partition S into k partitions foreach tuple s in S do read s and add it to buffer page h(s j ) //flush buffer page when it fills

52 Hash-Join Algorithm (cont’d) //Probing phase for l = 1..k //Build in-memory hash table for R l //using h2(r i ) foreach tuple r in partition R l do read r and insert into hash table using h2(r i ) //Scan S l and probe for matching R l tuples foreach tuple s in partition S l do read s and probe table using h2(s j ) output matching pairs

53 Hash Join Partition both relations using hash fn h: R tuples in partition i will only match S tuples in partition i Read in a partition of R, hash it using h2 (<> h!). Scan matching partition of S, search for matches Partitions of R & S Input buffer for Si Hash table for partition Ri (k < B-1 pages) B main memory buffers Disk Output buffer Disk Join Result hash fn h2 B main memory buffers Disk Original Relation OUTPUT 2 INPUT 1 hash function h B-1 Partitions 1 2 B-1...

54 B main memory blocks Disk Original Relation OUTPUT 2 INPUT 1 hash function h B-1 Partitions 1 2 B-1... Partition R & S using h

55 Partitions of R & S Input buffer for Si Hash table for partition Ri (k < B-1 pages) B main memory blocks Disk Output buffer Disk Join Result hash fn h2 Read partition Ri & partition it using h2 Partition Si is joined with Ri

56 המחיר של Hash Join אם יש מספיק מקום בזיכרון וה - Partitions הן פחות או יותר בגודל שווה, אז בשלב הראשון קוראים וכותבים כל יחס פעם אחת בלבד ובשלב השני קוראים כל יחס פעם אחת לכן המחיר הכולל הוא 3(B R + B S )

57 בדוגמת השייטים עבור 1,000 בלוקים של Reserves ו -500 בלוקים של Sailors יידרשו 3(1, ) = 4,500 I/Os במקרה זה, לביצוע הצירוף יידרשו כ -45 שניות

58 כמות הזיכרון הנדרשת לביצוע Hash Join אם יש B בלוקים בזיכרון אז מספר ה - Partitions הוא לכל היותר k=B-1 לכן הגודל של כל Partition הוא לכן צריך בשלב השניבלוקים לכל Partition, כאשר f הוא מקדם גדול מ - 1, כי בשלב השני צריך לייצר מבנה hash לפי h2 וזה דורש קצת יותר מ - B-1 בלוקים

59 המשך חישוב כמות הזיכרון הנדרשת לביצוע Hash Join כאמור, בשלב השני צריך בלוקים יש בסך הכל B בלוקים וצריך גם אחד לכתיבת התוצאה ואחד לקריאת היחס השני, ולכן לפיכך, צריך בלוקים, כאשר R היחס הקטן יותר למעשה צריך קצת יותר, כי ה- Partitions לא בגודל שווה

60 שיטה משופרת ל- Sort-Merge Join (SMJ) יש שיטה משופרת ל - SMJ שלוקחת אותו זמן כמו hash join: 3(B R + B S ) שיטה זאת דורשת בלוקים בזיכרון, כאשר S הוא הגדול משני היחסים ( פרטים בפרק 12) SMJ מייצרת תוצאה ממוינת וזמן החישוב הוא worst case

61 סיכום ראינו שיטות שונות לחישוב צירוף של שני יחסים לכל שיטה נוסחה עבור זמן החישוב אין שיטה שהיא תמיד הכי טובה