תרגול 9 אלגברה רלציונית. 25.06.20152 מה ראינו עד עכשיו ? כיצד...
Post on 21-Dec-2015
307 views
TRANSCRIPT
9תרגול
אלגברה רלציונית
09:42:12 PM2
מה ראינו עד עכשיו?•כיצד ניתן לממש פעולות בסיסיות במסדי נתונים:•
הוספת רשומה.–גישה לפי מפתח ראשי ומשני.–מעבר על תת-תחום.––...
מה נראה היום?•כיצד ניתן לממש פעולות מורכבות )שאילתות( במסד –
נתונים רלציוני:פעולות בינאריות, כמו אחוד,חיתוך,מכפלה ...•פעולות אונריות, כמו הטלה, בחירה ...•
09:42:12 PM3
המודל הרלציוני:הוא שיטה לתאר את הנתונים מבחינה לוגית )ללא תלות
במימוש הפיזי שלהם(.
)יחסים(:רלציותהן טבלאות שמרכיבות את מסד הנתונים.
-יה(.n או tuple )רשומהכל שורה בטבלה נקראת –(, השדות של attribute )תכונהכל עמודה בטבלה נקראת –
הרשומה.
על רלציות ניתן לבצע שאילתות שהן אוסף של פעולות על יחסים.
את השאילתות נציג ע"י אלגברה רלציונית.
(, אותה רשומה bagהערה: רלציה היא רב-קבוצה עם חזרות )יכולה להופיע מספר פעמים בטבלה )רלציה(.
09:42:12 PM4
פעולות על רלציות:
פעולות בינריותאיחוד : מספר המופעים של שורה באיחוד שווה
לסכום המופעים שלה בשני היחסים.
חיתוך : מספר המופעים של שורה בחיתוך שווה למינימום של מספר המופעים שלה בשני היחסים.
הפרש : מספר המופעים של שורה בהפרש שווה להפרש בין מספר המופעים שלה בשני
(.Rהיחסים. )רק שורות מתוך
R S
R S
\R S
פחות מספרRאם לדייק אז זה מספר הפעמים שרשומה מופיע ב אז היא אל תופיע תוצאה1. אם המספר קטן מ-Sהפעמים שהיא מופיע ב
09:42:12 PM5
פעולות על רלציות:
פעולות בינריות עם כל Rמכפלה : שרשור של כל השורות ב-
.Sהשורות ב-
join -ב : join של שני היחסים תופיע שורה ( המקיים:r,sלכל זוג )
– –r -ו s.מסכימים על כל התכונות המשותפות להם
יכיל רק עמודה אחת לכל תכונה משותפת.joinה-
R S
R S
,r R s S
09:42:12 PM6
פעולות אונריות Select-בוחר את כל השורות ב : R המקימות
.cאת התנאי
(: בחירת חלק מהעמודות. projectionהטלה )מאפשר חישוב תכונות ושינוי שם: לדוגמה, הביטוי
a יחזיר יחס שיכיל את עמודה ו- b שתהיה הסכום של העמודות dועמודה חדשה
c-ב R.
distinct הפיכת יחס לקבוצה, משאירה רק שורה : אחת מכל סוג.
c R
R
R
, , ,a b c d R a b c
לשים לב לשתי הפעולות שהטלה יכולה לעשות: חישוב, או החלפת שם...
09:42:12 PM7
פעולות שאינן מחזירות יחס חדש•max, min, average .מחזירות מספר –
09:42:12 PM8
1שאלה
כתוב את כביטוי המורכב מבחירה, הטלה ומכפלה.
תשובה:
, . , , . , . . . .a R b b c R d d e R b S b R d S d R S
, , , , ,R a b c d S b d e
09:42:12 PM9
2שאלה
נתונים היחסים הבאים: - לקוח בבנק.• - חשבון בנק.• - הפקדה.• - משיכה.•
לכל חשבון יכול להיות רק בעלים אחד, אך ללקוח יכולים להיות מספר חשבונות.
, , ,Client ID Name Address Phone
, _ ,Account ID Account Number Balance
_ , ,Depositing Account Number Date Amount
_ , ,Withdrawal Account Number Date Amount
09:42:12 PM10
כתוב ביטוי באלגברת היחסים עבור כל אחת
מהשאילתות הבאות:
א. כל מספרי החשבונות שנמצאים במשיכת יתר.
ב. שם, תעודת זהות ומספר טלפון של כל
הלקוחות שנמצאים במשיכת יתר.
ג. החשבונות שבוצעו מהם רק משיכות ולא
הפקדות.
_ 0Account Number Balance Account
, , 0Name ID Phone Balance Account Client
_ _\Account Number Account NumberWithdrawal Depositing
09:42:12 PM11
ד. באילו תאריכים בשבועיים האחרונים בוצעו .aמשיכות מחשבון
– מצא idה. עבור לקוח שמס' ת"ז שלו הוא את כל ההפקדות שבוצעו לכל אחד
מחשבונותיו בשבוע האחרון. עבור כל אחת מהן יש לציין את התאריך, שם
הלקוח ומספר החשבון.
_ 14Date Account Number a today Date Withdrawal
, , _
7
Date Name Account Number
today Date ID idDepositing Account Client
09:42:12 PM12
צייר עץ עבור הביטוי שקיבלת בסעיף ה.
Depositing Account
Client
, , _Date Name Account Number
7today Date ID id
09:42:12 PM13
מימוש פעולות באלגברה רלציונית רלציה, נגדיר את הסימונים הבאים:Rתהי
תופסת.R מספר הבלוקים ש- )מספר השורות R מספר הרשומות של
בטבלה(..R מספר הרשומות השונות של
A מספר הערכים השונים של התכונה .Rביחס
מספר הבלוקים העומדים לרשותנו בזיכרון הראשי.
B R
T R
V R
,V R A
M
ניתן )ואף רצוי( לחשוב על בלוק בתור היחידה שבה אנו כותבים וקוראים רלציות. כלומר הואB(R)בלוק הוא מספר הרשומות שאנו יכולים לקרוא ולכתוב בבת אחת ולכן
למעשה מספר הקריאות שיש לבצע לקריאה סדרתית )לדוגמא(.
09:42:12 PM14
שיטות למימוש שאילתות רלציוניות:מעבר יחיד
במעבר max, min, averageקל לבצע פעולות כמו • זיכרון(.O(1)יחיד )דורש
Select: קל לבצע פעולות אונריות המחזירות יחס• זיכרון(. מימוש של במעבר O(1)והטלה )דורש
יחיד דורש ש- ייכנס כולו בזיכרון הראשי. קל לבצע איחוד פעולות בינאריות על יחסים:•
)כותבים לפלט את שני היחסים אחד אחרי השני(. כדי לבצע את יתר הפעולות: חיתוך,הפרש, מכפלה
S ו- R דרוש שלפחות אחד מהיחסים joinו- )עליהם מתבצעת הפעולה( ייכנס לזיכרון.
R
הוא אחד היחסים, ייכנס לזיכרון, ונניח שאנו מוסיפיםRאנו נסתפק בכך ש כאשר מונה לכל רשומה – כמה פעמים היא מופיעה, בלי לתפוס זיכרון נוסף
R
09:42:12 PM15
כדי לאפשר קריאה רציפה של הרלציות, הערה:נזדקק לשני חוצצי קלט. וכדי לאפשר כתיבה
רציפה של הפלט גם כן נשתמש בשני (.double bufferingחוצצים )
אז כדי שהיחס ייכנס בזיכרון נדרוש
ש- . 4B R M
היה יותר מדויק לכתוב: 4B R M
הוא בבלוקים.Mתזכורת שתקל עלינו להבין:
09:42:12 PM16
)חיתוך במעבר יחיד(דוגמה:
ושמור בזיכרון Sא. קרא את כל הרשומות ב- הראשי עותק אחד מכל רשומה, ומונה
)נסמן S ב-sהמציין כמה פעמים הרשומה (.s.countאותו ב-
, אם R ב-r, ועבור כל רשומה Rב. קרא את אז s.count>0 ו- s=rקיימת בזיכרון רשומה
באחד.s.count לפלט והורד את rהוצא את
09:42:12 PM17
לולאות מקוננות
בין יחסים גדולים:joinיישום עבור
מימוש פשטני:
.s, קרא את S ב- sעבור כל שורה
.r, קרא את R ב- rעבור כל שורה
.r ו- s בין joinבצע
מספר גישות לדיסק:
קוראים רשומה רשומה – סדר גודל
גישות לדיסק.
1T S T R
09:42:12 PM18
מימוש משופר המנצל את הזיכרון הפנימי:
בכל פעם קוראים את החוצצים •איטרציות.– סה"כ Sהבאים של
בכל פעם שממלאים את הזיכרון, קוראים • עם כל join בלוק אחרי בלוק ומבצעים Rאת
הרשומות. סה"כ גישות:
4
B S
M
4M
( ) ( )( ) 4 ( ) ( )
4 4
B S B SB R M B R B S
M M
Rקריאה של כל החלפה שלך החלק שבזיכרוןSשל
09:42:12 PM19
שיטות מבוססות מיוןאם ממיינים את היחסים ניתן לבצע במעבר
זיכרון את O(1) גישות( ו- יחיד ).joinהפעולות : , חיתוך ו-
B R B S
09:42:12 PM20
שיטות מבוססות ערבולהרעיון: הערבול מאפשר לרכז את כל •
הרשומות שרוצים לעבד יחד באותו דלי. למשל כל המופעים של אותה רשומה כאשר –
מבצעים חיתוך
אם הדלי נכנס לזיכרון, נוכל לבצע את •הפעולה במעבר יחיד )לאחר החלוקה
לדליים(. בשלב הראשון נחלק כל יחס לדליים. •
נזדקק לשני חוצצים לכל דלי פלט, ועוד זוג –חוצצים לקלט.
09:42:12 PM21
, יקיים kמספר הדליים המכסימלי
אם גודל הקובץ בלוקים, אז גודל כל דלי יהיה בממוצע
כדי שהדלי ייכנס לזיכרון הראשי צריך להתקיים:
מספר גישות לדיסק:
בשלב החלוקה לדליים של שני היחסים
)קריאה וכתיבה של כל הבלוקים(.
.לאחר מכן עוד מעבר יחיד:
. סה"כ
22 2
2
Mk k M
B R 2
2
B R B R
k M
2 2 4B R M M
2 2B R B S
B R B S
3 3B R B S
09:42:13 PM22
הערות:
נשים לב כי בחישוב זה לא נכללת כתיבת התוצאה הסופית, אשר איננה תלויה
באלגוריתם.
עבור קבצים גדולים יותר ניתן לבצע מעבר ערבול נוסף שבו נחלק כל דלי ל-
דליים. 2 2M
שוב, איך מבצעים ערבול?
דליים, עד שכל דלי יוכל Kהרעיון הוא כזה: אנחנו צריכים לערבל, כל פעם ל-• ומטה(.M-4להיכנס לזיכרון )כלומר עד שכל דלי יהיה בגודל
דליים וכו'...Kכלומר אם אחרי ערבול ראשון הדלי עדיין גדול מדי, נחלק כל דלי ל•: 52כמה מעברי ערבול זה אומר? הרצאה על רלציות שקופית •
ואז עבור כל מעבר שכזה אנחנו צריכים לבצע קראה וכתיבה, ובסוף גם את •הפעולה עצמה שזה עוד מעבר, לכן סיבוכיות הזמן היא )שורה אחת מתחת
באותו שקף(:
וככה מתבצע ערבול.•
הערה חשובה: אנחנו לא צריכים לתת את פונקציית הערבול, לא בעיה שלנו.
מניחים שקיימת פונקציית ערבול מתאימה, וסחטיין על מי שהמציא אותה.
09:42:13 PM23
הערה חשובה יותר )ולכן מגיע לה עמוד שלם(
עליכם להבין שאנחנו נותנים לכם את התנאים שבהם צריכות להתבצע •פעולות מסוימות, או לפחות את התנאים לכל דרך לבצע אותם, וזאת
החלטה שלכם להחליט מה לבצע ובאיזה סדר. על מה אני מדבר? רלוונטית רק אם אנחנו M-4לדוגמא הדרישה שכל דלי יהיה בגודל •
מבצעים קריאה וכתיבה בו זמנית עם שני דיסקים ואז יש צורך בחוצצים כפולים. אם עובדים רק עם דיסק אחד אז אין צורך בחוצצים, ואם
כי אין M-2לדוגמא אנו רוצים רק לחשב את אז ניתן להסתפק בצורך בפלט )זה בהנחה שהפלט הזה נכנס לזיכרון.
כלומר: אנו נותנים לכם ארגז כלים ותנאים לשימוש בהם, זאת •ההחלטה שלכם איזה כלי להפעיל, באיזו קונפיגוריה ובשילוב עם אילו
כלים אחרים.
09:42:13 PM24
( )R
09:42:13 PM25
דוגמה
נתונים היחסים:
נתון כי גודל בלוק הוא רשומה אחת, . רוצים לחשב את הביטוי .
במקרה זה וגם לכן בהנחה שמשתמשים בחוצצים כפולים
לא ניתן לבצע את הפעולה במעבר יחיד.
, , 4 , ,9 , , 2 , ,5 , ,6
, 1, , 2, , 5, , 7, , 6, , 7, , 2,
S X Y a a a h e
R Y Z a b b e a a b
8M
S R
4 6M B R 4 5M B S
09:42:13 PM26
. מספר הדליים Yנשתמש בערבול על המכסימלי: .
נערבל לפי הפונקציה: , ונקבל את הדליים הבאים:
על הדליים המתאימים:joinכעת נבצע את ה-
2 8 23
2 2
Mk
3h x x mod
210
)a,2),(h,5()a,4()a,9),(e,6(S(X,Y)
)2,b),(2,b), (5,b()1,a),(7,e),(7,a()6,a(R(Y,Z)
0 0
1 1
2 2
: ,6,
:
: , 2, , , 2, , ,5,
S R e a
S R
S R a b a b h b
,6, , , 2, , , 2, , ,5,S R e a a b a b h b
09:42:13 PM27
שאלה:
א. כמה גישות לדיסק היו לנו בדוגמה?
תשובה:
לכן מספר הגישות בשיטת הערבול היה
5 , 7B S T S B R T R
3 3 3 7 3 5 36B R B S
09:42:13 PM28
שאלה:
ב. כמה גישות היו לנו אם היינו משתמשים בשיטת הלולאות המקוננות?
תשובה: בשיטת הלולאות המקוננות קוראים בכל איטרציה את
. R, ועוברים על כל Sהרשומות הבאות של
ו- מס' האיטרציות: מאחר ש-
: S ופעם אחת את Rנקבל שקוראים פעמיים את
: במקרה המסוים הזה, שיטת הלולאות המקוננות מסקנהעדיפה!
4M
5 B S 8M 5
24 8 4
B S
M
2 19B R B S
09:42:13 PM29
שאלה:
אם joinג. בכמה גישות היינו יכולים לבצע את ה- בלוקים?10גודל הזיכרון היה
תשובה:
join , ולכן ניתן לבצע את ה- אזאם
.B(S)+B(R)=12במעבר אחד:
10M 4B S M
עיבוד שאילתות
פעולות מעבד השאילתות בביצוע שאילתא:
ניתוח תחבירי של השאילתא )הכתובה בשפת 1.(, ותרגומה לעץ ביטוי SQLשאילתות כגון
באלגברה רלציונית.
ביצוע אופטימיזציות על עץ הביטוי ההתחלתי, 2.כדי לקבל עץ ביטוי יעיל יותר לחישוב.
השלמת תכנון ביצוע השאילתא:3.החלטה על סדר הביצוע•בחירת אלגוריתם לביצוע כל פעולה•כיצד יועברו התוצאות בין השלבים השונים•פעולות נוספות. •
אופטימיזציה של ביטויים
בהינתן עץ ביטוי, נרצה לבצע שינויים שלא ישפיעו •על התוצאה הסופית, אך יהפכו את החישובים
ליעילים יותר.לדוגמה, ביצוע פעולות המקטינות את היחסים, •
, מוקדם ככל האפשר, יכול לייעל את σ ו- δ,πכגון ביצוע השאילתה.
לכן נרצה "להוריד למטה" פעולות אלו )לכיוון •העלים בעץ החישוב(.
על יחס שיש לו אינדקס π ו- δ מצד שני ביצוע •יגרום לאובדן האינדקס, מה שעלול לפגוע ביעילות
המשך החישוב.
תרגיל:
נתון הביטוי
"הורד" את פעולות ההטלה כלפי מטה ככל הוא כל אחד מהביטויים Lהאפשר כאשר
הבאים:
א.
ב.
, , , , ,L R a b c S b c d e
,b c x c d y
, ,a b a d z
תרגיל:
נתון הביטוי
= Lא.
:תשובה•a-ו eאינם משפיעים על המשך החישוב ואינם
מופיעים בפלט. אפשר לוותר עליהם.. y=c+d ב-dאפשר להחליף את • לא ניתן לבצע כי לא נוכל b+cxאת ההחלפה •
. joinהמשתתפים שניהם ב-, c או bלוותר על
, , , , ,L R a b c S b c d e
,b c x c d y
, , , ,, , , , ,b c x y b c b c c d yR a b c S b c d e
תרגיל:
נתון הביטוי
= Lב.
:תשובה.join לפני ה-eניתן להיפטר מ- •יתר התכונות נדרשות להמשך. • join כי לפני ה-a+dzלא ניתן "להוריד" את •
נמצאות ביחסים שונים. d ו-aהתכונות
, , , , ,L R a b c S b c d e
, ,a b a d z
, , , ,, , , , ,a b a d z b c dR a b c S b c d e
בחירת עץ החישוב באמצעות גודל תוצאות הביניים
נתונים מספר עצי חישוב אפשריים ועלינו לבחור •את העץ היעיל ביותר לחישוב.
ניתן להעריך את המחיר של כל חלופה באמצעות •גודל תוצאות הביניים הנוצרות בכל שלב.
גודל הקלט וגודל הפלט אינם תלויים באופן ביצוע •השאילתא, ולכן לא יכללו בחישוב.
מאחר וברוב המקרים לא ניתן לדעת מה תהיה •התוצאה מבלי לבצע את החישוב בפועל, נוכל
לקבל אומדן בלבד.
*T(R)
חןב
מ ל
ורמ
שר ו
זוג
תרגיל
?δ(σE=a(Z)) האפשרי של המקסימאליא. מהו הגודל
תשובה:.451 הוא ))T)σE=a)Zהערך המקסימאלי של • E רשומות עם ערכי 49 ולכן יש לפחות V)Z,E(=50כי •
ושונים זה מזה.aשונים מ-, והן יכולות להיות Eביחס המתקבל לכל הרשומות אותו •
.Dשונות רק ב- .T)δ(σE=a(Z)))=250. ולכן D ערכים שונים ל-250יש רק •
הוא ))σE=a)Z(T הגודל המקסימאלי של 300=)V)Z,Eעבור •, וזה היה החסם העליון.201
X(A,B)Y(B,C,D)Z(D,E)
T300400500
VA:10 B:100B:40 C:25 D:80D:250 E:50
זה מתאר מקרה אחר, לא את השאלה המקורית
תרגיל
ב. נתונים שני ביטויים שקולים.
צייר עבור כל אחד מהם עץ ביטוי
הערך את מחיר החישוב של כל עץ וקבע איזה עדיף.
1 .
2.
X(A,B)Y(B,C,D)Z(D,E)
T300400500
VA:10 B:100B:40 C:25 D:80D:250 E:50
ZY X
ZYX
תרגיל
סה"כ מחיר:
1200+2400=3600
X(A,B)Y(B,C,D)Z(D,E)
T300400500
VA:10 B:100B:40 C:25 D:80D:250 E:50
ZY X
X
300
Y
400
Z
500
δ
300*400/max(100,40) = 1200
1200*500/max(80,250) = 2400
שימו לב שאנו לא סופרים אתהקלט הראשוני שמגיע לשלב הראשון
ולא את הפלט הסופי מהשלב האחרון.
תרגיל
סה"כ מחיר:
150+200+250+200 = 800
X(A,B)Y(B,C,D)Z(D,E)
T300400500
VA:10 B:100B:40 C:25 D:80D:250 E:50
X
300
Y
400
Z
500
δ
200*250/max(80,250) = 200
ZYX
δ δ150 200 250
שימו לב שאנו לא סופרים אתהקלט ואת הפלט!!!
תוכנית ביצוע לשאילתא
הפכנו ביטוי לאלגברה רלציונית•ביצענו אופטמיזציות על הביטוי•כעת נקבע את סדר הביצוע של פעולות אסוציאטיביות •
וקומוטטיביות או לבצע –
נבחר אלגוריתם לביצוע כל פעולה•נקבע את האופן שבו יועברו הנתונים משלב לשלב•
כתיבת תוצאות ביניים לדיסק–pipelineהעברה בזיכרון ב- –
נחליט על פעולות נוספות שיש לבצע•מיון רלציות–
ZSR ZSR
תרגילנתונות הרלציות•
[ בהתפלגות אחידה.0,1 הוא מספר ממשי בקטע ]Fהנח ש-–
א. הערך את גודל
X(B,C)Y(C,D)Z(D,F)
T6009004000
VB:50C:50D:40
VC:100D:50F~U[0,1]
ZYF XR 01.0
א. הערך את גודל
נסמן
) הנחנו שמירת ערכים:(
ZYF XR 01.0
YXW
5400
100,50max
900600
CY,V,CX,Vmax
YTXTWT
000,432
40,50max
40005400
DZ,V,DW,Vmax
ZTWTZWT
432001.0000,432XTRT 01.0 ZYF
DY,VDW,V
20 בלוקים, בני 12עומד לרשותנו זיכרון ראשי בגודל ב. רשומות כל אחד.
?Rמהי הדרך היעילה ביותר לחשב את
מהו מספר גישות הדיסק הנחוץ?
, ולהתחיל selectהדרך היעילה ביותר היא "להוריד" את ה-•מביצוע , כלומר לחשב את הביטוי
נעריך את גודל התוצאה:
בלוקים.2 יתפוס R1 , אז נסמן לכן נשמור את התוצאה בזיכרון ולא נכתוב לדיסק.
ZY F 01.0X
ZF 01.0
ZF 01.01R
4010001.0 ZTZT F
Z
R1
R1
בזיכרון(.R1 במעבר יחיד )כי Y עם R1 של joinנבצע
השתמשנו בכך ש-
.נסמן 1RR2 Y
DY,VDZ,VDR1,V
720
50
40900
DR1,V,DY,Vmax
R1TYTR1YT
Y
R1
R1
Y
R2
נשאר לבצע את
לכן לא נוכל לבצע במעבר יחיד.
2RX
3620
7202RB30
20
600XB
השתמשנו בשני חוצצים כדיכדי לבצע את
.Y ושני חוצצי קלט כדי לקרוא את R1לשמור את
חוצצים פנויים.8נשארו לנו עוד
מועבר R2 , כאשר R2נוכל להשתמש בהם כדי לבצע ערבול על
, רשומה אחרי רשומה, מהשלב הקודם.pipelineב-
לכן לא נצטרך חוצצי קלט
1RR2 Y
824 kk
Y
R1
R1
Y
R20
יהיה Xלאחר מעבר ערבול אחד, גודל דלי ממוצע של
חוצצים.
מעבר ערבול אחד יספיק. יכנסו לזיכרון Xולכן הדליים של
. join ואז נבצע את ה-X ואת R2נערבל את
84
30
XX
X0
: joinביצוע ה-
X0
X0
X0
X0
X0
X0
X0
X0
R20
R20
R
R20
R20
ZYR F 01.0X
R1
R2
R
: select לזיכרון וביצוע Zקריאת
:Y עם joinביצוע
חלוקת התוצאה לדליים:
)קריאה + כתיבה(:Xערבול
:R2 לדליים של X בין הדליים של joinביצוע
סה"כ )ללא כתיבת תוצאה סופית(:
20020
4000ZB
4520
900YB
36R2B
60302XB2
663630R2BXB
40766603645200