התייעצות ...

flenger

New member
התייעצות ...

אני אנסה לנסח את הבעיה בצורה הברורה ביותר נאמר ויש 2 טבלאות לצורך העניין נקרא להן A ו B ובינהן יש קשר של MANY TO MANY ( בגדול גם זה לא משמעותי ) מה שחשוב הוא שיש טבלה נוספת המקשרת בינהם עכשיו נניח שיש יחס גדול יחסית בין A ל B נאמר 1 ל 400 , 200 במקרה של 10000 רשומות בטבלה A יהיו בטבלה המקשרת בין 4 מיליון ל 2 . במקרים קיצוניים יותר הטבלה המקשרת יכולה להגיע ל100 מליון רשומות פה מתחילה הבעיה . במידה ואני הייתי רוצה לשלוף את כל הB רשומות השייכות ל A (במידה ומדובר ברשומה אחד מתוך טבלה A ) הדבר הוא פשוט אך שאני רוצה לשלוף את כולם , לצורך דוח למשל הדבר נעשה פחות פשוט - מבחינת זמן השליף *נוסיף לזה טבלה מקשרת נוספת ובכלל העניין מסתבך עוד יותר רציתי לדעת אם יש דרך אחרת להתמודד עם מצבים כאלה האם צריך לבנות את הטבלאות בצורה שונה ? איך ניתן להקל על השליפה ** כרגע המצב התשובה היחידה שקיבלתי מה EXECUTION PLAN זה להוסיף עוד INDEXES שבאמת עוזר אך עדיין רציתי לדעת אם יש פתרון טוב יותר ? מה עושים במקרים כאלה שיש יחסים גדולים מאוד בין טבלאות ? שאילתת SELECT הכי פשוט יכולה לקחת הרבה מאוד זמן
 

גרי רשף

New member
אתה רוצה ליצור דוח של מאה מיליון רשומות?

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

flenger

New member
אני בהחלט מסכים איתך

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

pitoach

New member
כמה נקודות קטנות למחשבה

1. אין שום אדם בעולם שיכול לקרוא דוח אין סופי מפני שהעניים לא מסוגלות לקלוט ברוחב אין סופי ולכל אחד יש זווית שבו העניים יכולות לראות. בכל מקרה גם דוח באורך ק"מ לא נוכל לראות את כולו אם אנחנו קרובים מספיק כדי לקרוא אותו (כדי לראות את כולו עלינו להתרחק יותר מדי כניראה) * לכן גם כשרוצים להעביר לנו סיפור טוב וארוך מחלקים אותו לעמודים שלכולם ביחד קוראים ספר. 2. יש הבדל ניכר בין להציג את כל הנתונים ובין להוציא את כל הנתונים (להציג כאמור ראה את הבעיה בנקודה ראשונה). 3. הצגת כמות גדולה של תוכן לוקח זמן גם בלי קשר לעבודה הקשורה למסד נתונים. אתה יכול לבדוק כמה זמן ייקח להציג מליארד שורות בחלון הפקודות ועדיין תגלה שעלייך להמתין. לא אחת אנימבצע פעולות בחלון הפקודות ומגדיר לא להציג את הפלט מפני שזה מקצר את הפעולה לפעמים מ 20 שעות לחצי שעה (במקרה של גיבוי דיסקים למשל). * לא תמיד העיבוד ושליפת (מציאת) הרשומות לוקח זמן בדוחות כמו תהליך הממשק הגרפי של הצגת הדוחות / תעבורה ועוד. 4. הטענה שהלקוח תמיד צודק לטעמי אינה מיקצועית לחלוטין. תפקידו של המפתח לתת יעוץ כשהוא נתקל במשהו שנראה לו לא נכון ובטח אם זה נראה לו ברמה של אבסורדיות. לא אחת אני מסרב לבצע עבודות אבסורדיות ונהנה מהלקוח שחוזר אלי אחרי שמישהו אחר ביצע לו את השטות שהוא ביקש במקור. תפקידו של איש המיקצוע לעשות עבודה מיקצועית. * כמו שאם אני הולך למוסך ואומר שיש לי נזילה של שמן אז אם המוסך מוצא שיש נזילה של מים ולא שמן אני מצפה שהוא יתקן אותי ויטפל במערכת המים ולא שאשלם על טיפול במערכת השמן והנזילה של המים תמשיך
 

tenen

New member
כבר הייתי עד למקום שבדרישה כזו יש היגיון...

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

flenger

New member
בגדול , כולכם צודקים

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

pitoach

New member
ממליץ לעבור על הנקודות למחשבה שכתבתי מעל

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