Presentation is loading. Please wait.

Presentation is loading. Please wait.

תרגול 9 אלגברה רלציונית.

Similar presentations


Presentation on theme: "תרגול 9 אלגברה רלציונית."— Presentation transcript:

1 תרגול 9 אלגברה רלציונית

2 כיצד ניתן לממש פעולות בסיסיות במסדי נתונים:
מה ראינו עד עכשיו? כיצד ניתן לממש פעולות בסיסיות במסדי נתונים: הוספת רשומה. גישה לפי מפתח ראשי ומשני. מעבר על תת-תחום. ... מה נראה היום? כיצד ניתן לממש פעולות מורכבות (שאילתות) במסד נתונים רלציוני: פעולות בינאריות, כמו אחוד,חיתוך,מכפלה ... פעולות אונריות, כמו הטלה, בחירה ...

3 הוא שיטה לתאר את הנתונים מבחינה לוגית (ללא תלות במימוש הפיזי שלהם).
המודל הרלציוני: הוא שיטה לתאר את הנתונים מבחינה לוגית (ללא תלות במימוש הפיזי שלהם). רלציות (יחסים): הן טבלאות שמרכיבות את מסד הנתונים. כל שורה בטבלה נקראת רשומה (tuple או n-יה). כל עמודה בטבלה נקראת תכונה (attribute), השדות של הרשומה. על רלציות ניתן לבצע שאילתות שהן אוסף של פעולות על יחסים. את השאילתות נציג ע"י אלגברה רלציונית. הערה: רלציה היא רב-קבוצה עם חזרות (bag), אותה רשומה יכולה להופיע מספר פעמים בטבלה (רלציה).

4 פעולות על רלציות: פעולות בינריות
איחוד : מספר המופעים של שורה באיחוד שווה לסכום המופעים שלה בשני היחסים. חיתוך : מספר המופעים של שורה בחיתוך שווה למינימום של מספר המופעים שלה בשני היחסים. הפרש : מספר המופעים של שורה בהפרש שווה להפרש בין מספר המופעים שלה בשני היחסים. (רק שורות מתוך R). אם לדייק אז זה מספר הפעמים שרשומה מופיע בR פחות מספר הפעמים שהיא מופיע בS. אם המספר קטן מ-1 אז היא אל תופיע תוצאה

5 פעולות על רלציות: פעולות בינריות
מכפלה : שרשור של כל השורות ב-R עם כל השורות ב-S. join : ב-join של שני היחסים תופיע שורה לכל זוג (r,s) המקיים: r ו- s מסכימים על כל התכונות המשותפות להם. ה-join יכיל רק עמודה אחת לכל תכונה משותפת.

6 פעולות אונריות Select : בוחר את כל השורות ב-R המקימות את התנאי c.
הטלה (projection): בחירת חלק מהעמודות. מאפשר חישוב תכונות ושינוי שם: לדוגמה, הביטוי יחזיר יחס שיכיל את עמודה a ועמודה חדשה d שתהיה הסכום של העמודות b ו- c ב-R. distinct : הפיכת יחס לקבוצה, משאירה רק שורה אחת מכל סוג. לשים לב לשתי הפעולות שהטלה יכולה לעשות: חישוב, או החלפת שם...

7 פעולות שאינן מחזירות יחס חדש
max, min, average – מחזירות מספר.

8 כתוב את כביטוי המורכב מבחירה, הטלה ומכפלה.
שאלה 1 כתוב את כביטוי המורכב מבחירה, הטלה ומכפלה. תשובה:

9 לכל חשבון יכול להיות רק בעלים אחד, אך ללקוח יכולים להיות מספר חשבונות.
שאלה 2 נתונים היחסים הבאים: - לקוח בבנק. - חשבון בנק. - הפקדה. - משיכה. לכל חשבון יכול להיות רק בעלים אחד, אך ללקוח יכולים להיות מספר חשבונות.

10 כתוב ביטוי באלגברת היחסים עבור כל אחת מהשאילתות הבאות:
א. כל מספרי החשבונות שנמצאים במשיכת יתר. ב. שם, תעודת זהות ומספר טלפון של כל הלקוחות שנמצאים במשיכת יתר. ג. החשבונות שבוצעו מהם רק משיכות ולא הפקדות.

11 ד. באילו תאריכים בשבועיים האחרונים בוצעו משיכות מחשבון a.
ה. עבור לקוח שמס' ת"ז שלו הוא id – מצא את כל ההפקדות שבוצעו לכל אחד מחשבונותיו בשבוע האחרון. עבור כל אחת מהן יש לציין את התאריך, שם הלקוח ומספר החשבון.

12 צייר עץ עבור הביטוי שקיבלת בסעיף ה.
Depositing Account Client

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

14 שיטות למימוש שאילתות רלציוניות: מעבר יחיד
קל לבצע פעולות כמו max, min, averageבמעבר יחיד (דורש O(1) זיכרון). פעולות אונריות המחזירות יחס: קל לבצע Select והטלה (דורש O(1) זיכרון). מימוש של במעבר יחיד דורש ש ייכנס כולו בזיכרון הראשי. פעולות בינאריות על יחסים: קל לבצע איחוד (כותבים לפלט את שני היחסים אחד אחרי השני). כדי לבצע את יתר הפעולות: חיתוך,הפרש, מכפלה ו- join דרוש שלפחות אחד מהיחסים R ו- S (עליהם מתבצעת הפעולה) ייכנס לזיכרון. אנו נסתפק בכך ש כאשר R הוא אחד היחסים, ייכנס לזיכרון, ונניח שאנו מוסיפים מונה לכל רשומה – כמה פעמים היא מופיעה, בלי לתפוס זיכרון נוסף

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

16 דוגמה: (חיתוך במעבר יחיד)
א. קרא את כל הרשומות ב- S ושמור בזיכרון הראשי עותק אחד מכל רשומה, ומונה המציין כמה פעמים הרשומה s ב-S (נסמן אותו ב-s.count). ב. קרא את R, ועבור כל רשומה r ב-R, אם קיימת בזיכרון רשומה s=r ו- s.count>0 אז הוצא את r לפלט והורד את s.count באחד.

17 יישום עבור join בין יחסים גדולים: מימוש פשטני:
לולאות מקוננות יישום עבור join בין יחסים גדולים: מימוש פשטני: עבור כל שורה s ב- S, קרא את s. עבור כל שורה r ב- R, קרא את r. בצע join בין s ו- r. מספר גישות לדיסק: קוראים רשומה רשומה – סדר גודל גישות לדיסק.

18 מימוש משופר המנצל את הזיכרון הפנימי:
בכל פעם קוראים את החוצצים הבאים של S – סה"כ איטרציות. בכל פעם שממלאים את הזיכרון, קוראים את R בלוק אחרי בלוק ומבצעים join עם כל הרשומות. סה"כ גישות: קריאה של כל R החלפה שלך החלק של S שבזיכרון

19 שיטות מבוססות מיון אם ממיינים את היחסים ניתן לבצע במעבר יחיד ( גישות) ו- O(1) זיכרון את הפעולות : , חיתוך ו-join.

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

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

22 הערות: נשים לב כי בחישוב זה לא נכללת כתיבת התוצאה הסופית, אשר איננה תלויה באלגוריתם. עבור קבצים גדולים יותר ניתן לבצע מעבר ערבול נוסף שבו נחלק כל דלי ל דליים.

23 שוב, איך מבצעים ערבול? הרעיון הוא כזה: אנחנו צריכים לערבל, כל פעם ל-K דליים, עד שכל דלי יוכל להיכנס לזיכרון (כלומר עד שכל דלי יהיה בגודל M-4 ומטה). כלומר אם אחרי ערבול ראשון הדלי עדיין גדול מדי, נחלק כל דלי לK דליים וכו'... כמה מעברי ערבול זה אומר? הרצאה על רלציות שקופית 52: ואז עבור כל מעבר שכזה אנחנו צריכים לבצע קראה וכתיבה, ובסוף גם את הפעולה עצמה שזה עוד מעבר, לכן סיבוכיות הזמן היא (שורה אחת מתחת באותו שקף): וככה מתבצע ערבול. הערה חשובה: אנחנו לא צריכים לתת את פונקציית הערבול, לא בעיה שלנו. מניחים שקיימת פונקציית ערבול מתאימה, וסחטיין על מי שהמציא אותה.

24 הערה חשובה יותר (ולכן מגיע לה עמוד שלם)
הערה חשובה יותר (ולכן מגיע לה עמוד שלם) עליכם להבין שאנחנו נותנים לכם את התנאים שבהם צריכות להתבצע פעולות מסוימות, או לפחות את התנאים לכל דרך לבצע אותם, וזאת החלטה שלכם להחליט מה לבצע ובאיזה סדר. על מה אני מדבר? לדוגמא הדרישה שכל דלי יהיה בגודל M-4 רלוונטית רק אם אנחנו מבצעים קריאה וכתיבה בו זמנית עם שני דיסקים ואז יש צורך בחוצצים כפולים. אם עובדים רק עם דיסק אחד אז אין צורך בחוצצים, ואם לדוגמא אנו רוצים רק לחשב את אז ניתן להסתפק בM-2 כי אין צורך בפלט (זה בהנחה שהפלט הזה נכנס לזיכרון. כלומר: אנו נותנים לכם ארגז כלים ותנאים לשימוש בהם, זאת ההחלטה שלכם איזה כלי להפעיל, באיזו קונפיגוריה ובשילוב עם אילו כלים אחרים.

25 נתון כי גודל בלוק הוא רשומה אחת, . רוצים לחשב את הביטוי .
דוגמה נתונים היחסים: נתון כי גודל בלוק הוא רשומה אחת, רוצים לחשב את הביטוי במקרה זה וגם לכן בהנחה שמשתמשים בחוצצים כפולים לא ניתן לבצע את הפעולה במעבר יחיד.

26 נשתמש בערבול על Y. מספר הדליים המכסימלי: .
נערבל לפי הפונקציה: , ונקבל את הדליים הבאים: כעת נבצע את ה- join על הדליים המתאימים: 1 2 S(X,Y) (a,9),(e,6) (a,4) (a,2),(h,5) R(Y,Z) (6,a) (1,a),(7,e),(7,a) (2,b),(2,b) ,(5,b)

27 א. כמה גישות לדיסק היו לנו בדוגמה? תשובה:
שאלה: א. כמה גישות לדיסק היו לנו בדוגמה? תשובה: לכן מספר הגישות בשיטת הערבול היה

28 ב. כמה גישות היו לנו אם היינו משתמשים בשיטת הלולאות המקוננות? תשובה:
שאלה: ב. כמה גישות היו לנו אם היינו משתמשים בשיטת הלולאות המקוננות? תשובה: בשיטת הלולאות המקוננות קוראים בכל איטרציה את הרשומות הבאות של S, ועוברים על כל R. מאחר ש ו מס' האיטרציות: נקבל שקוראים פעמיים את R ופעם אחת את S: מסקנה: במקרה המסוים הזה, שיטת הלולאות המקוננות עדיפה!

29 אם אז , ולכן ניתן לבצע את ה-join במעבר אחד: B(S)+B(R)=12.
שאלה: ג. בכמה גישות היינו יכולים לבצע את ה- join אם גודל הזיכרון היה 10 בלוקים? תשובה: אם אז , ולכן ניתן לבצע את ה-join במעבר אחד: B(S)+B(R)=12.

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

31 אופטימיזציה של ביטויים
בהינתן עץ ביטוי, נרצה לבצע שינויים שלא ישפיעו על התוצאה הסופית, אך יהפכו את החישובים ליעילים יותר. לדוגמה, ביצוע פעולות המקטינות את היחסים, כגון δ,π ו-σ , מוקדם ככל האפשר, יכול לייעל את ביצוע השאילתה. לכן נרצה "להוריד למטה" פעולות אלו (לכיוון העלים בעץ החישוב). מצד שני ביצוע δ ו- π על יחס שיש לו אינדקס יגרום לאובדן האינדקס, מה שעלול לפגוע ביעילות המשך החישוב.

32 תרגיל: נתון הביטוי "הורד" את פעולות ההטלה כלפי מטה ככל האפשר כאשר L הוא כל אחד מהביטויים הבאים: א. ב.

33 תרגיל: נתון הביטוי א.L = תשובה: a ו-e אינם משפיעים על המשך החישוב ואינם מופיעים בפלט. אפשר לוותר עליהם. אפשר להחליף את d ב-y=c+d . את ההחלפה b+cx לא ניתן לבצע כי לא נוכל לוותר על b או c, המשתתפים שניהם ב-join.

34 תרגיל: נתון הביטוי ב. L = תשובה: ניתן להיפטר מ- e לפני ה-join. יתר התכונות נדרשות להמשך. לא ניתן "להוריד" את a+dz כי לפני ה- join התכונות a ו- d נמצאות ביחסים שונים.

35 בחירת עץ החישוב באמצעות גודל תוצאות הביניים
נתונים מספר עצי חישוב אפשריים ועלינו לבחור את העץ היעיל ביותר לחישוב. ניתן להעריך את המחיר של כל חלופה באמצעות גודל תוצאות הביניים הנוצרות בכל שלב. גודל הקלט וגודל הפלט אינם תלויים באופן ביצוע השאילתא, ולכן לא יכללו בחישוב. מאחר וברוב המקרים לא ניתן לדעת מה תהיה התוצאה מבלי לבצע את החישוב בפועל, נוכל לקבל אומדן בלבד.

36 גזור ושמור למבחן *T(R)

37 א. מהו הגודל המקסימאלי האפשרי של δ(σE=a(Z)) ? תשובה:
תרגיל א. מהו הגודל המקסימאלי האפשרי של δ(σE=a(Z)) ? תשובה: הערך המקסימאלי של T(σE=a(Z)) הוא 451. כי V(Z,E)=50 ולכן יש לפחות 49 רשומות עם ערכי E שונים מ-a ושונים זה מזה. ביחס המתקבל לכל הרשומות אותו E, והן יכולות להיות שונות רק ב-D. יש רק 250 ערכים שונים ל-D. ולכן T(δ(σE=a(Z)))=250 . עבור V(Z,E)=300 הגודל המקסימאלי של T(σE=a(Z)) הוא 201, וזה היה החסם העליון. Z(D,E) Y(B,C,D) X(A,B) 500 400 300 T D:250 E:50 B:40 C:25 D:80 A:10 B:100 V זה מתאר מקרה אחר, לא את השאלה המקורית

38 ב. נתונים שני ביטויים שקולים. צייר עבור כל אחד מהם עץ ביטוי
תרגיל ב. נתונים שני ביטויים שקולים. צייר עבור כל אחד מהם עץ ביטוי הערך את מחיר החישוב של כל עץ וקבע איזה עדיף. 1. 2. Z(D,E) Y(B,C,D) X(A,B) 500 400 300 T D:250 E:50 B:40 C:25 D:80 A:10 B:100 V

39 תרגיל סה"כ מחיר: 1200+2400=3600 Z(D,E) Y(B,C,D) X(A,B) 500 400 300 T
V שימו לב שאנו לא סופרים את הקלט הראשוני שמגיע לשלב הראשון ולא את הפלט הסופי מהשלב האחרון. δ 1200*500/max(80,250) = 2400 300*400/max(100,40) = 1200 X 300 Y 400 Z 500

40 תרגיל סה"כ מחיר: 150+200+250+200 = 800 Z(D,E) Y(B,C,D) X(A,B) 500 400
300 T D:250 E:50 B:40 C:25 D:80 A:10 B:100 V שימו לב שאנו לא סופרים את הקלט ואת הפלט!!! 200*250/max(80,250) = 200 δ δ δ 150 200 250 X 300 Y 400 Z 500

41 תוכנית ביצוע לשאילתא הפכנו ביטוי לאלגברה רלציונית
ביצענו אופטמיזציות על הביטוי כעת נקבע את סדר הביצוע של פעולות אסוציאטיביות וקומוטטיביות לבצע או נבחר אלגוריתם לביצוע כל פעולה נקבע את האופן שבו יועברו הנתונים משלב לשלב כתיבת תוצאות ביניים לדיסק העברה בזיכרון ב- pipeline נחליט על פעולות נוספות שיש לבצע מיון רלציות

42 תרגיל Z(D,F) Y(C,D) X(B,C) 4000 900 600 T D:40 C:50 B:50 V F~U[0,1]
נתונות הרלציות הנח ש-F הוא מספר ממשי בקטע [0,1] בהתפלגות אחידה. א. הערך את גודל Z(D,F) Y(C,D) X(B,C) 4000 900 600 T D:40 C:50 B:50 V F~U[0,1] D:50 C:100

43 א. הערך את גודל נסמן )הנחנו שמירת ערכים:(

44 ב. עומד לרשותנו זיכרון ראשי בגודל 12 בלוקים, בני 20 רשומות כל אחד.
ב. עומד לרשותנו זיכרון ראשי בגודל 12 בלוקים, בני 20 רשומות כל אחד. מהי הדרך היעילה ביותר לחשב את R? מהו מספר גישות הדיסק הנחוץ?

45 הדרך היעילה ביותר היא "להוריד" את ה-select, ולהתחיל מביצוע , כלומר לחשב את הביטוי נעריך את גודל התוצאה: נסמן , אז R1 יתפוס 2 בלוקים. לכן נשמור את התוצאה בזיכרון ולא נכתוב לדיסק. R1 R1 Z

46 Y Y נבצע join של R1 עם Y במעבר יחיד (כי R1 בזיכרון). השתמשנו בכך ש-
נסמן . R1 R2 R1 Y Y

47 נשאר לבצע את לכן לא נוכל לבצע במעבר יחיד.

48 Y Y כדי לבצע את השתמשנו בשני חוצצים כדי
כדי לבצע את השתמשנו בשני חוצצים כדי לשמור את R1 ושני חוצצי קלט כדי לקרוא את Y. נשארו לנו עוד 8 חוצצים פנויים. נוכל להשתמש בהם כדי לבצע ערבול על R2 , כאשר R2 מועבר ב- pipeline, רשומה אחרי רשומה, מהשלב הקודם. לכן לא נצטרך חוצצי קלט  R1 R20 R1 Y Y

49 X X לאחר מעבר ערבול אחד, גודל דלי ממוצע של X יהיה חוצצים.
נערבל את R2 ואת X ואז נבצע את ה-join . X0 X X

50 ביצוע ה-join : R1 R2 R R X0 X0 X0 X0 R20 R20 X0 X0 X0 X0 R20 R20

51 קריאת Z לזיכרון וביצוע select :
ביצוע join עם Y: חלוקת התוצאה לדליים: ערבול X (קריאה + כתיבה): ביצוע join בין הדליים של X לדליים של R2: סה"כ (ללא כתיבת תוצאה סופית):


Download ppt "תרגול 9 אלגברה רלציונית."

Similar presentations


Ads by Google