חישוב של אופרטורים רלציוניים

47
1 םםםםם םם םםםםםםםםם םםםםםםםםםEvaluation of Relational Operators

Upload: makala

Post on 05-Jan-2016

41 views

Category:

Documents


7 download

DESCRIPTION

חישוב של אופרטורים רלציוניים. Evaluation of Relational Operators. חישוב יעיל של שאילתות. שאילתות מתורגמות לביטוי אלגברי שאותו יש לחשב נדרש: חישוב יעיל של כל אופרטור בביטוי תוכנית ביצוע יעילה לחישוב הביטוי. יחסים לדוגמאות. נתונים שני יחסים - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: חישוב של אופרטורים רלציוניים

1

חישוב של אופרטורים רלציוניים

Evaluation of Relational Operators

Page 2: חישוב של אופרטורים רלציוניים

2

שאילתות של יעיל חישוב

שאילתות מתורגמות לביטוי אלגברי •שאותו יש לחשב

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

Page 3: חישוב של אופרטורים רלציוניים

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ב-•

Page 4: חישוב של אופרטורים רלציוניים

4

בחירה פעולת חישוב

A op c(R) רוצים לחשב ביטויים מהצורה:•R אטריביוט של Aכאשר ••op= ,> הוא אופרטור כגון •cהוא קבוע

לדוגמא, רוצים לחשב את השאילתה •* SELECTהבאה

FROM Reserves R

WHERE R.agent = ‘Joe’

Page 5: חישוב של אופרטורים רלציוניים

5

, סדר אין אינדקס אין

ניתן לבצע את החישוב על ידי סריקה של •היחס

דפים נדרש מחיר של Mאם ביחס יש • דפיםMקריאת

בדוגמא מהשקף הקודם, המחיר הוא • דפים1000קריאת

Page 6: חישוב של אופרטורים רלציוניים

6

, סדר יש אינדקס אין

ניתןA ממויין לפי אטריביוט Rאם היחס • למצוא את הרשומה הראשונה שמקיימת את •

התנאי על ידי חיפוש בינארילהמשיך כל עוד הרשומות מקיימות את התנאי•

המחיר:• log(M) + #pages with tuples from the result

Page 7: חישוב של אופרטורים רלציוניים

7

+Bשימוש באינדקס מבוסס עץ

R של Aנניח שקיים אינדקס על עמודה •+Bהממומש כעץ

מוצאים כניסה ראשונה בעץ שתואמן את •תנאי החיפוש

ממשיכים לסרוק את העץ כל עוד הערכים •מקיימים את תנאי החיפוש

מביאים את הרשומות המתאימות מהקובץ•

Page 8: חישוב של אופרטורים רלציוניים

8

דוגמה

על ’rname<‘Cמבצעים בחירה עם התנאי •Reserves

בהנחת התפלגות אחידה נקבל• 2/26 10% 10,000 tuples = 100 pages

גישות 100אם האינדקס מקבץ, נדרשות •לדיסק להבאת הנתונים )+גישות לקריאת

האינדקס( 10000אם האינדקס אינו מקבץ ידרשו עם •

גישות לדיסק

Page 9: חישוב של אופרטורים רלציוניים

9

שימוש באינדקס מבוסס ערבול (Hashלתנאי השוואה )

גישות לדיסק2-1מציאת הדלי המתאים כ •הבאת הבלוקים המתאימים לרשומות• rnameאם יש אינדקס ערבול לא מקבץ על •

הזמנות שנעשו על ידי 100 ויש Reservesב-Joe אז בחירה לפי תנאי rname=‘Joe’

גישות לדיסק )במה זה 102 ל-1תדרוש בין תלוי?(

Page 10: חישוב של אופרטורים רלציוניים

10

הטלה פעולת

חישוב הטלה דורש מעבר על הקובץ•הורדת אטריביוטים לא רצויים•הורדת כפילויות•

הורדת כפילויות על ידי •שימוש במיון•(hashingשימוש בערבול )•

שימוש באינדקס במקרה של הטלה על •עמודות שכולן נכללות במפתח החיפוש של

אינדקס

Page 11: חישוב של אופרטורים רלציוניים

11

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

Page 12: חישוב של אופרטורים רלציוניים

12

דוגמה

מעוניינים לחשב את השאילתה הבאה•

SELECT *

FROM Reserves R, Sailors S

WHERE R.sid = S.sid

Page 13: חישוב של אופרטורים רלציוניים

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

Page 14: חישוב של אופרטורים רלציוניים

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יידרשו כ-

Page 15: חישוב של אופרטורים רלציוניים

15

לחישוב עיקריות שיטותיחסים שני של הצירוף

צירוף היא הפעולה האלגברית היקרה •ביותר וקיימות עבורה מספר שיטות חישוב

שונות:•Block Nested-Loops Join•Index Nested-Loops Join•Sort-Merge Join•Hash-Join

להלן, נתאר את כל אחת מארבעת •השיטות האלו

Page 16: חישוב של אופרטורים רלציוניים

16

שיטות לחישוב צירוף שלR(A,B) עם S(B,C)

Rאם יש מספיק זיכרון, קרא את •בשלמותו לזיכרון

, קרא את הבלוק Sלכל בלוק של •לזיכרון וחשב את הצירוף של

הרשומות מבלוק זה עם כל הרשומות Rשל

כתוב תוצאה לדיסק וקרא הבלוק •Sהבא של

Page 17: חישוב של אופרטורים רלציוניים

17

הנדרשת הזיכרון כמות

שני • מבין הקטן של הבלוקים מספר2היחסים +

השני • היחס לקריאת אחד בלוקהתוצאה • לכתיבת שני בלוק

• , לדיסק אותו כותבים מתמלא כשהואמחדש למלאו ומתחילים

Page 18: חישוב של אופרטורים רלציוניים

18

כולל חישוב זמן

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

כי הוא זהה בכל השיטות BR + BSלכן הזמן הוא •

Page 19: חישוב של אופרטורים רלציוניים

19

משני אחד כל אם עושים מה? הפנימי מהזיכרון גדול היחסים

בלוקים Bבזיכרון הפנימי יש • בלוקיםB-2 בחלקים – כל פעם Rקרא את •, בלוק S, קוראים את כל Rעבור כל חלק של •

אחד בכל פעם עם Sחשב את הצירוף של הרשומות מהבלוק של •

שנמצא בזיכרוןRהרשומות מהחלק של איטרציות שבהן קוראים את כל ceil(BR /(B-2))יש •

S -בעוד ש ,Rנקרא פעם אחת BR + BS * ceil(BR /(B-2))הזמן הנדרש הוא •

Page 20: חישוב של אופרטורים רלציוניים

20

הערה

BR + BS * ceil(BR /(B-2))הזמן הוא •

האם עדיף שבלולאה החיצונית יהיה •היחס הקטן או היחס הגדול?

תשובה: היחס הקטן )מדוע?(•

Page 21: חישוב של אופרטורים רלציוניים

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

}

Page 22: חישוב של אופרטורים רלציוניים

22

עלות הערכת blocked nested loop joinמשתמשים ב-•

לחישוב הצירוף מהדוגמה הקודמת תוך מקומות לדפים בזיכרון 102שימוש ב-

ביחס החיצוני Reservesבהנחה ש-•, Reserves גישות לקריאת 1,000נדרשות • מעבר על Reserves בלוקים של 100לכל •

Sailors מעברים על היחס 10, לכן Sailors בלוקים500כל אחד של קריאת

I/Os 6,000 = 500*10 + 1,000סך הכל •

Page 23: חישוב של אופרטורים רלציוניים

23

עלות הערכת

בלולאה החיצונית נדרשוReservesכאשר •1,000 + (1,000/100)*500 = 6,000 I/Os

בלולאה החיצונית יידרשוSailorsכאשר •500 + (500/100)*1,000 = 5,500 I/Os

לקריאת בלוק תידרש קצת 10msבהנחת •יותר מדקה לחישוב הצירוף!

Page 24: חישוב של אופרטורים רלציוניים

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

Page 25: חישוב של אופרטורים רלציוניים

25

אינדקס בעזרת צירוף חישוב

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

ולכל רשומה מהבלוקRקרא בלוק של •מצא בעזרת האינדקס את כל •

Sהרשומות המתאימות של פעם אחת בלבדRהערה: קוראים את •

Page 26: חישוב של אופרטורים רלציוניים

26

עלות הערכת

את X, נסמן ע"י Rבהינתן רשומה של •הזמן הנדרש כדי למצוא את כל

Sהרשומות המתאימות של

מס' BR + tRX( tRהזמן הכולל •(Rהרשומות ב-

Page 27: חישוב של אופרטורים רלציוניים

27

?Xמהו

נניח שהאינדקס מכיל נתוני כניסה מהצורה•(k, rid)

עדיין kגם אם יש הרבה נתוני כניסה עם אותו •bסביר להניח שכולם על בלוק אחד, שיקרא

1.2באינדקס ערבול צריך, בממוצע, לקרוא •bבלוקים כדי להגיע לבלוק

4-2, צריך לקרוא +Bבאינדקס, שהוא עץ •bבלוקים כדי להגיע לבלוק

Page 28: חישוב של אופרטורים רלציוניים

28

Xהמשך החישוב של

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

ולכןSכולן על בלוק אחד של Sצריך לקרוא בלוק אחד של •

אם האינדקס אינו מקבץ, אז כל רשומה מתאימה • נמצאת על בלוק נפרד, ומספר הבלוקים Sשל Sלמספר הרשומות של שצריך לקרוא שווה Sשל

)נתאר בהמשך Rשמתאימות לרשומה אחת של איך להעריך מספר זה(

Page 29: חישוב של אופרטורים רלציוניים

29

לדוגמה

אם מדובר באינדקס ערבול מקבץ, • והזמן הכולל הואX=2.2אז

BR + 2.2tR

בשיטה BR + BS * ceil(BR / (B-2))לעומת • Block Nested-Loops Joinשל

Page 30: חישוב של אופרטורים רלציוניים

30

חישוב דוגמת

Sailors של sidנניח שיש אינדקס ערבול על ••sid מפתח של Sailors אז יש לכל רשומת Reserves

)למעשה, Sailorsלפחות רשומה מתאימה אחת מ-בדיוק אחת – למה?(

בלוקים1,000 דורשת קריאת Reservesסריקת • רשומות ביחס 100,000 = 1,000*100יש •

Reservesלכל רשומה החיפוש באינדקס דורש לקרוא •

בלוקים 1.2בממוצע

Page 31: חישוב של אופרטורים רלציוניים

31

דוגמה המשך

סך העלות הנדרשת:•1,000 + 100,000 * 2.2 = 221,000 I/Os

סך הזמן הנדרש בהנחת קריאת בלוק ב- •10ms-דקות35 הוא כ

Page 32: חישוב של אופרטורים רלציוניים

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)החישוב ידרוש כ-•

Page 33: חישוב של אופרטורים רלציוניים

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החלק של

ומחשבים את הצירוף בין שני חלקים אלה

Page 34: חישוב של אופרטורים רלציוניים

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

Page 35: חישוב של אופרטורים רלציוניים

35

זמן החישוב של צירוף ע"י Sort-Merge Join

זמן למיון:• BRlogBR + BSlogBS

זמן למיזוג )תחת איזה הנחה?(• BR + BS

סה"כ:• BR + BS + BRlogBR + BSlogBS

Page 36: חישוב של אופרטורים רלציוניים

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הזמן שנדרש יהיה פחות משלוש דקות•על ידי שימוש בשיטות מיון טובות, ניתן להקטין את •

עלות החישוב לפחות מחצי העלות המחושבת כאן

Page 37: חישוב של אופרטורים רלציוניים

37

Hash-Join

חלקים B-1מבצעים חלוקה של שני יחסי הקלט ל-•על ידי הפעלת פונקצית ערבול על הערכים

באטריביוטים שלפיהם נעשה הצירוף יכולות i שמופו לקבוצה Rעל פי החלוקה, רשומות של •

i שאף הן מופו ל-Sלהתחבר רק לרשומות של

בזו אחר זו וכל Rקוראים את קבוצות החלוקה של •קבוצה מחלקים לתת קבוצות )שנשמרות בזיכרון

שונה הראשי( בעזרת פונקצית ערבול חדשה )!(מהראשונה

קוראים את הקבוצה Rלכל קבוצת חלוקה של • ומנסים למצוא התאמות Sהמתאימה של

Page 38: חישוב של אופרטורים רלציוניים

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>

Page 39: חישוב של אופרטורים רלציוניים

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

. . .

Page 40: חישוב של אופרטורים רלציוניים

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

Page 41: חישוב של אופרטורים רלציוניים

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

Page 42: חישוב של אופרטורים רלציוניים

42

Hash Joinהמחיר של

אם יש מספיק מקום בזיכרון וה- •Partitions הן פחות או יותר בגודל שווה, אז

בשלב הראשון קוראים וכותבים כל יחס •פעם אחת בלבד

ובשלב השני קוראים כל יחס פעם אחת•

(BR + BS)3לכן המחיר הכולל הוא •

Page 43: חישוב של אופרטורים רלציוניים

43

השייטים בדוגמת

Reserves בלוקים של 1,000עבור • יידרשוSailors בלוקים של 500ו-

3(1,000 + 500 = )4,500 I/Os

45במקרה זה, לביצוע הצירוף יידרשו כ-•שניות

Page 44: חישוב של אופרטורים רלציוניים

44

כמות הזיכרון הנדרשת לביצוע Hash Join

בלוקים בזיכרון אז מספר Bאם יש •k=B-1 הוא לכל היותר Partitionsה-

הואPartitionלכן הגודל של כל •בלוקים לכל לכן צריך בשלב השני•

Partition כאשר ,f הוא מקדם גדול מלאים100%, כי הדליים אינם 1מ-

1B

BR

1B

fBR

Page 45: חישוב של אופרטורים רלציוניים

45

המשך חישוב כמות הזיכרון Hash Joinהנדרשת לביצוע

בלוקיםכאמור, בשלב השני צריך• בלוקים וצריך גם אחד Bיש בסך הכל •

לכתיבת התוצאה ואחד לקריאת היחס השני, ולכן

R בלוקים, כאשר לפיכך, צריך •היחס הקטן יותר

21

B

fBB R

1B

fBR

RfBB

לא בגודל Partitionsלמעשה צריך קצת יותר, כי ה- שווה

Page 46: חישוב של אופרטורים רלציוניים

46

שיטה משופרת ל-Sort-Merge Join (SMJ)

שלוקחת SMJ -יש שיטה משופרת ל•hash join: 3(BR + BS)אותו זמן כמו

בלוקים שיטה זאת דורשת • הוא הגדול משני Sבזיכרון, כאשר

(12היחסים )פרטים בפרק •SMJ מייצרת תוצאה ממוינת וזמן

worst caseהחישוב הוא

sBB

Page 47: חישוב של אופרטורים רלציוניים

47

כה עד סיכום

צירוף • לחישוב שונות שיטות ראינויחסים שני של

החישוב • זמן עבור נוסחה שיטה לכלטובה • הכי תמיד שהיא שיטה אין