חישוב של אופרטורים רלציוניים
DESCRIPTION
חישוב של אופרטורים רלציוניים. Evaluation of Relational Operators. חישוב יעיל של שאילתות. שאילתות מתורגמות לביטוי אלגברי שאותו יש לחשב נדרש: חישוב יעיל של כל אופרטור בביטוי תוכנית ביצוע יעילה לחישוב הביטוי. יחסים לדוגמאות. נתונים שני יחסים - PowerPoint PPT PresentationTRANSCRIPT
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ב-•
4
בחירה פעולת חישוב
A op c(R) רוצים לחשב ביטויים מהצורה:•R אטריביוט של Aכאשר ••op= ,> הוא אופרטור כגון •cהוא קבוע
לדוגמא, רוצים לחשב את השאילתה •* SELECTהבאה
FROM Reserves R
WHERE R.agent = ‘Joe’
5
, סדר אין אינדקס אין
ניתן לבצע את החישוב על ידי סריקה של •היחס
דפים נדרש מחיר של Mאם ביחס יש • דפיםMקריאת
בדוגמא מהשקף הקודם, המחיר הוא • דפים1000קריאת
6
, סדר יש אינדקס אין
ניתןA ממויין לפי אטריביוט Rאם היחס • למצוא את הרשומה הראשונה שמקיימת את •
התנאי על ידי חיפוש בינארילהמשיך כל עוד הרשומות מקיימות את התנאי•
המחיר:• log(M) + #pages with tuples from the result
7
+Bשימוש באינדקס מבוסס עץ
R של Aנניח שקיים אינדקס על עמודה •+Bהממומש כעץ
מוצאים כניסה ראשונה בעץ שתואמן את •תנאי החיפוש
ממשיכים לסרוק את העץ כל עוד הערכים •מקיימים את תנאי החיפוש
מביאים את הרשומות המתאימות מהקובץ•
8
דוגמה
על ’rname<‘Cמבצעים בחירה עם התנאי •Reserves
בהנחת התפלגות אחידה נקבל• 2/26 10% 10,000 tuples = 100 pages
גישות 100אם האינדקס מקבץ, נדרשות •לדיסק להבאת הנתונים )+גישות לקריאת
האינדקס( 10000אם האינדקס אינו מקבץ ידרשו עם •
גישות לדיסק
9
שימוש באינדקס מבוסס ערבול (Hashלתנאי השוואה )
גישות לדיסק2-1מציאת הדלי המתאים כ •הבאת הבלוקים המתאימים לרשומות• rnameאם יש אינדקס ערבול לא מקבץ על •
הזמנות שנעשו על ידי 100 ויש Reservesב-Joe אז בחירה לפי תנאי rname=‘Joe’
גישות לדיסק )במה זה 102 ל-1תדרוש בין תלוי?(
10
הטלה פעולת
חישוב הטלה דורש מעבר על הקובץ•הורדת אטריביוטים לא רצויים•הורדת כפילויות•
הורדת כפילויות על ידי •שימוש במיון•(hashingשימוש בערבול )•
שימוש באינדקס במקרה של הטלה על •עמודות שכולן נכללות במפתח החיפוש של
אינדקס
11
צירוף לחישוב שיטות
12
דוגמה
מעוניינים לחשב את השאילתה הבאה•
SELECT *
FROM Reserves R, Sailors S
WHERE R.sid = S.sid
13
נאיבית חישוב שיטת
• Simple Nested Loop Join
foreach tuple r of of R do
foreach tuple s of S do
if ri == rj then
add <r,s> to result
14
עלות הערכת
pR ונניח S בלוקים ב-N ו-R בלוקים ב-Mנניח •S רשומות לבלוק ב-pS ו-Rרשומות לבלוק ב-
M + pR*M*Nעלות החישוב: •
בדוגמה של השייטים:• 1,000 + 100*1,000*500 = 1,000 + 5*107 I/Os
זמן קריאת בלוק מהדיסק 10msבהנחה של • שעות לביצוע החישוב!140יידרשו כ-
15
לחישוב עיקריות שיטותיחסים שני של הצירוף
צירוף היא הפעולה האלגברית היקרה •ביותר וקיימות עבורה מספר שיטות חישוב
שונות:•Block Nested-Loops Join•Index Nested-Loops Join•Sort-Merge Join•Hash-Join
להלן, נתאר את כל אחת מארבעת •השיטות האלו
16
שיטות לחישוב צירוף שלR(A,B) עם S(B,C)
Rאם יש מספיק זיכרון, קרא את •בשלמותו לזיכרון
, קרא את הבלוק Sלכל בלוק של •לזיכרון וחשב את הצירוף של
הרשומות מבלוק זה עם כל הרשומות Rשל
כתוב תוצאה לדיסק וקרא הבלוק •Sהבא של
17
הנדרשת הזיכרון כמות
שני • מבין הקטן של הבלוקים מספר2היחסים +
השני • היחס לקריאת אחד בלוקהתוצאה • לכתיבת שני בלוק
• , לדיסק אותו כותבים מתמלא כשהואמחדש למלאו ומתחילים
18
כולל חישוב זמן
•BR -בלוקים ב R -ו BS -בלוקים ב S נקרא פעם אחתS ו- Rכל בלוק של •כל בלוק של התוצאה נכתב פעם אחת•BR + BS + output size :זמן כולל•נתעלם מהזמן הדרוש לכתיבת התוצאה, •
כי הוא זהה בכל השיטות BR + BSלכן הזמן הוא •
19
משני אחד כל אם עושים מה? הפנימי מהזיכרון גדול היחסים
בלוקים Bבזיכרון הפנימי יש • בלוקיםB-2 בחלקים – כל פעם Rקרא את •, בלוק S, קוראים את כל Rעבור כל חלק של •
אחד בכל פעם עם Sחשב את הצירוף של הרשומות מהבלוק של •
שנמצא בזיכרוןRהרשומות מהחלק של איטרציות שבהן קוראים את כל ceil(BR /(B-2))יש •
S -בעוד ש ,Rנקרא פעם אחת BR + BS * ceil(BR /(B-2))הזמן הנדרש הוא •
20
הערה
BR + BS * ceil(BR /(B-2))הזמן הוא •
האם עדיף שבלולאה החיצונית יהיה •היחס הקטן או היחס הגדול?
תשובה: היחס הקטן )מדוע?(•
21
Block Nested Loops Join
• Suppose 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 <r,s> to result
}
22
עלות הערכת blocked nested loop joinמשתמשים ב-•
לחישוב הצירוף מהדוגמה הקודמת תוך מקומות לדפים בזיכרון 102שימוש ב-
ביחס החיצוני Reservesבהנחה ש-•, Reserves גישות לקריאת 1,000נדרשות • מעבר על Reserves בלוקים של 100לכל •
Sailors מעברים על היחס 10, לכן Sailors בלוקים500כל אחד של קריאת
I/Os 6,000 = 500*10 + 1,000סך הכל •
23
עלות הערכת
בלולאה החיצונית נדרשוReservesכאשר •1,000 + (1,000/100)*500 = 6,000 I/Os
בלולאה החיצונית יידרשוSailorsכאשר •500 + (500/100)*1,000 = 5,500 I/Os
לקריאת בלוק תידרש קצת 10msבהנחת •יותר מדקה לחישוב הצירוף!
24
Index Nested Loops Join
Sנניח שיש אינדקס על אטריביוט של •R עם Sשמשמש לצירוף של
למציאת הרשומות משתמשים באינדקס•המתאימות!
foreach tuple r of R
foreach tuple s of S where ri=sj
add <r,s> to result
25
אינדקס בעזרת צירוף חישוב
S(B,C) עם R(A,B)חישוב צירוף של •:S של Bכאשר יש אינדקס על עמודה
ולכל רשומה מהבלוקRקרא בלוק של •מצא בעזרת האינדקס את כל •
Sהרשומות המתאימות של פעם אחת בלבדRהערה: קוראים את •
26
עלות הערכת
את X, נסמן ע"י Rבהינתן רשומה של •הזמן הנדרש כדי למצוא את כל
Sהרשומות המתאימות של
מס' BR + tRX( tRהזמן הכולל •(Rהרשומות ב-
27
?Xמהו
נניח שהאינדקס מכיל נתוני כניסה מהצורה•(k, rid)
עדיין kגם אם יש הרבה נתוני כניסה עם אותו •bסביר להניח שכולם על בלוק אחד, שיקרא
1.2באינדקס ערבול צריך, בממוצע, לקרוא •bבלוקים כדי להגיע לבלוק
4-2, צריך לקרוא +Bבאינדקס, שהוא עץ •bבלוקים כדי להגיע לבלוק
28
Xהמשך החישוב של
Sצריך לקרוא גם את הרשומות עצמן מהיחס •אם האינדקס מקבץ, אפשר להניח )שבדר"כ( •
ולכןSכולן על בלוק אחד של Sצריך לקרוא בלוק אחד של •
אם האינדקס אינו מקבץ, אז כל רשומה מתאימה • נמצאת על בלוק נפרד, ומספר הבלוקים Sשל Sלמספר הרשומות של שצריך לקרוא שווה Sשל
)נתאר בהמשך Rשמתאימות לרשומה אחת של איך להעריך מספר זה(
29
לדוגמה
אם מדובר באינדקס ערבול מקבץ, • והזמן הכולל הואX=2.2אז
BR + 2.2tR
בשיטה BR + BS * ceil(BR / (B-2))לעומת • Block Nested-Loops Joinשל
30
חישוב דוגמת
Sailors של sidנניח שיש אינדקס ערבול על ••sid מפתח של Sailors אז יש לכל רשומת Reserves
)למעשה, Sailorsלפחות רשומה מתאימה אחת מ-בדיוק אחת – למה?(
בלוקים1,000 דורשת קריאת Reservesסריקת • רשומות ביחס 100,000 = 1,000*100יש •
Reservesלכל רשומה החיפוש באינדקס דורש לקרוא •
בלוקים 1.2בממוצע
31
דוגמה המשך
סך העלות הנדרשת:•1,000 + 100,000 * 2.2 = 221,000 I/Os
סך הזמן הנדרש בהנחת קריאת בלוק ב- •10ms-דקות35 הוא כ
32
דוגמה המשך
Reserves של sidנניח שיש אינדקס ערבול על • בלוקים500 דורשת קריאת Sailorsסריקת •Sailors רשומות ב-40,000 = 500*80יש • שייטים – 40,000 הזמנות ל-100,000יש •
הזמנות לשייט2.5בהנחת התפלגות אחידה: בהנחה שהאינדקס אינו מקבץ:•
500 + 40,000*(1.2 + 2.5) = 148,500 I/Os דקות(25)החישוב ידרוש כ-•
33
Sort-Merge Join
ע"י S(B,C) עם R(A,B)חישוב צירוף של •Sort-Merge Join:
ואז ממזגים:Bממיינים כ"א מהיחסים על •R.B >= S.B עד ש- Rעוברים על •S.B >= R.B עד ש- Sעוברים על •חוזרים על שני הצעדים הקודמים עד ש- •
R.B = S.B ואז קוראים לזיכרון את כל , B ששווים על S וכל החלק של Rהחלק של
ומחשבים את הצירוף בין שני חלקים אלה
34
sidsnameratingage
22dustin745
28yuppy935
31lubber855
36lubber636
44guppy535
58rusty1035sidbiddayagent
2810312/4/96Joe
2810311/3/96Frank
3110110/2/96Joe
3110212/7/96Sam
3110113/7/96Sam
5810322/6/96Frank
Reserves
Sailors
35
זמן החישוב של צירוף ע"י Sort-Merge Join
זמן למיון:• BRlogBR + BSlogBS
זמן למיזוג )תחת איזה הנחה?(• BR + BS
סה"כ:• BR + BS + BRlogBR + BSlogBS
36
דוגמה
דורשReservesמיון •1000 log 1000 10,000 I/Os
דורשSailorsמיון •500 log 500 4,500 I/Os
I/Os 1,500 = 500 + 1,000צירוף: • 16,000 = 1,500 + 4,500 + 10,000סה"כ: •
I/Osהזמן שנדרש יהיה פחות משלוש דקות•על ידי שימוש בשיטות מיון טובות, ניתן להקטין את •
עלות החישוב לפחות מחצי העלות המחושבת כאן
37
Hash-Join
חלקים B-1מבצעים חלוקה של שני יחסי הקלט ל-•על ידי הפעלת פונקצית ערבול על הערכים
באטריביוטים שלפיהם נעשה הצירוף יכולות i שמופו לקבוצה Rעל פי החלוקה, רשומות של •
i שאף הן מופו ל-Sלהתחבר רק לרשומות של
בזו אחר זו וכל Rקוראים את קבוצות החלוקה של •קבוצה מחלקים לתת קבוצות )שנשמרות בזיכרון
שונה הראשי( בעזרת פונקצית ערבול חדשה )!(מהראשונה
קוראים את הקבוצה Rלכל קבוצת חלוקה של • ומנסים למצוא התאמות Sהמתאימה של
38
Hash-Join
//Partition R into k partitionsforeach tuple r in R do //flush when fills
read r and add it to buffer page h(ri)foreach tuple s in S do //flush when fills
read s and add it to buffer page h(sj)
for l = 1..k
//Build in-memory hash table for Rl using h2
foreach tuple r in Rl doread r and insert into hash table with h2
foreach tuple s in Sl doread s and probe table using h2output matching pairs <r,s>
39
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
Partitionsof R & S
Input bufferfor Si
Hash table for partitionRi (k < B-1 pages)
B main memory buffersDisk
Output buffer
Disk
Join Result
hashfnh2
h2
B main memory buffers DiskDisk
Original Relation OUTPUT
2INPUT
1
hashfunction
h B-1
Partitions
1
2
B-1
. . .
40
B main memory blocks DiskDisk
Original Relation OUTPUT
2INPUT
1
hashfunction
h B-1
Partitions
1
2
B-1
. . .
Partition R & S using h
41
Partitionsof R & S
Input bufferfor Si
Hash table for partitionRi (k < B-1 pages)
B main memory blocksDisk
Output buffer
Disk
Join Result
hashfnh2
h2
Read partition Ri & partition it using h2
Partition Si is joined with Ri
42
Hash Joinהמחיר של
אם יש מספיק מקום בזיכרון וה- •Partitions הן פחות או יותר בגודל שווה, אז
בשלב הראשון קוראים וכותבים כל יחס •פעם אחת בלבד
ובשלב השני קוראים כל יחס פעם אחת•
(BR + BS)3לכן המחיר הכולל הוא •
43
השייטים בדוגמת
Reserves בלוקים של 1,000עבור • יידרשוSailors בלוקים של 500ו-
3(1,000 + 500 = )4,500 I/Os
45במקרה זה, לביצוע הצירוף יידרשו כ-•שניות
44
כמות הזיכרון הנדרשת לביצוע Hash Join
בלוקים בזיכרון אז מספר Bאם יש •k=B-1 הוא לכל היותר Partitionsה-
הואPartitionלכן הגודל של כל •בלוקים לכל לכן צריך בשלב השני•
Partition כאשר ,f הוא מקדם גדול מלאים100%, כי הדליים אינם 1מ-
1B
BR
1B
fBR
45
המשך חישוב כמות הזיכרון Hash Joinהנדרשת לביצוע
בלוקיםכאמור, בשלב השני צריך• בלוקים וצריך גם אחד Bיש בסך הכל •
לכתיבת התוצאה ואחד לקריאת היחס השני, ולכן
R בלוקים, כאשר לפיכך, צריך •היחס הקטן יותר
21
B
fBB R
1B
fBR
RfBB
לא בגודל Partitionsלמעשה צריך קצת יותר, כי ה- שווה
46
שיטה משופרת ל-Sort-Merge Join (SMJ)
שלוקחת SMJ -יש שיטה משופרת ל•hash join: 3(BR + BS)אותו זמן כמו
בלוקים שיטה זאת דורשת • הוא הגדול משני Sבזיכרון, כאשר
(12היחסים )פרטים בפרק •SMJ מייצרת תוצאה ממוינת וזמן
worst caseהחישוב הוא
sBB
47
כה עד סיכום
צירוף • לחישוב שונות שיטות ראינויחסים שני של
החישוב • זמן עבור נוסחה שיטה לכלטובה • הכי תמיד שהיא שיטה אין