שיפור ביצועים בהצגת סיכומי נתונים עדכניים
-
שלום וברכה
אשמח לעזרה מהמומחים בעלי הנסיון.בניתי ממשק לניהול נתונים, שהמשתמש יכול לבצע בו מגוון פעולות של קריאה, כתיבה, מחיקה וכדו' על DB
במחלקה מסויימת בממשק יש סיכום נתונים שמסכם המון המון נתונים
מה שקורה כעת שבעת הכניסה למחלקה המערכת מריצה שאילתת סיכום שאורכת כמה שניות, כדי לסכם מחדש את הנתונים, אני מעוניין לזרז את תהליך טעינת הסיכומיםהשאלה מהי הדרך הנכונה כדי לשפר את הביצועים, חשבתי על 2 דרכים, אבל יש בהם חסרונות לכאורה:
- להריץ ברקע שאילתה שתסכום את הנתונים אחת לכמה שניות ותכניס אותם לטבלה צדדית, כך שבמחלקת הסיכום יצטרכו רק לשלוף את הטבלה ההיא. החסרון בזה שהנתונים לא יהיו מעודכנים נכון להרגע (זה די חשוב להיות מדיוק..)
- בכל פעולת שינוי בנתונים כגון הוספה, עדכון או מחיקה, להפעיל בנוסף עדכון על טבלת הסיכומים (שאילתה קצרה יחסית ולא מורגשת, כי היא לא צריכה לסכום את הכל, אלא לעדכן את השינוי הספציפי הזה). החסרון בזה, שזה מסרבל מאוד את הפיתוח, ומחייב תוספות מיותרות לקוד.
כתבתי רעיונות שעלו במחשבתי.
אני מאמין שאני לא הראשון שנדרש לבעיה זו, אשמח לשמוע מה מקובל לעשות וכיצד פותרים את הדבר הזה. -
@מומחה-באקסס לענ"ד דרך 1 ודאי לא נכונה (אלא אם כן אין אפשרות אחרת), זה פשוט בזבוז משאבים ונותן לך בסוף תשובה לא מדויקת,
דרך 2 נשמע לי יותר נכון, למרות שאני מבין את ההסתייגות מפאת תוספת הסיבוך, אבל כמו שאמר החכם "תעשה את זה הכי פשוט שאפשר אבל לא יותר פשוט מזה" פה אני לא רואה אפשרות שלישיתאני לא יודע אם אקסס מאפשר triggers, אם כן, אפשר להשיג את התוצאה בלי סיבוך יותר מדי
בכל מקרה, אפשר לסדר את הקוד בצורה כזו שיש רק מקום אחד בו תצטרך להוסיף עדכונים אלו וכל הפונקציות בקוד יעדכנו את ה-DB רק דרך פונקציות אלו -
@מומחה-באקסס כתב בשיפור ביצועים בהצגת סיכומי נתונים עדכניים:
להריץ ברקע שאילתה שתסכום את הנתונים אחת לכמה שניות ותכניס אותם לטבלה צדדית, כך שבמחלקת הסיכום יצטרכו רק לשלוף את הטבלה ההיא. החסרון בזה שהנתונים לא יהיו מעודכנים נכון להרגע (זה די חשוב להיות מדיוק..)
למה בטעינת הדוח אתה לא יכול להריץ שוב את הדלתא של השינוי? (לדוגמא לשים בטבלת העזר את הזמן/המזהה האחרון שאיתו השתמשת, [במידה ואתה סוכם רק עסקאות שנוספו] ואז בפתיחת הדוח/מסך להריץ רק מאותו הרגע שזה קצת)
לא כתבת באיזה פלטפורמה הקוד כתוב. @yossiz העריך שזה אקסס בגלל הניק שלך. אבל יעזור שתכתוב מה הפלטפורמה.
אישית כנראה הייתי משתמש בדרך השנייה. (יש מקרים שאני משתמש בראשונה עם הדלתא שהצעתי)
בנוסף, ייתכן לפעמים שאפשר למטב את שאילתת הסיכום (לדוגמא אינדקס על מזהה הלקוח), יעזור אם תשים כאן דוגמא קונקרטית
-
@yossiz
תודה!
ראשית, הממשק בנוי ב web ולא באקסס (שם הניק הוא מהימים שבהם התעסקתי עם אקסס, מאז ---) ואני משתמש עם DB של mySQL
לגבי הפתרון של triggers או פונקציה האחראית לעדכון ה DB, זה אכן יעיל יותר לגבי אופציה 2, אבל זה עדיין לא פותר את הבעיה, כיון שהלוגיקה שכל שינוי נתון משפיע על הסיכום הוא שונה (כלומר זה לא פלוס או מינוס, אלא מערך של סיכומים) כך שבכל מקרה אצטרך ליצור עבור כל וריאציה של שינוי את הלוגיקה לעדכון ה DB -
@מומחה-באקסס ייתכן שזה פחות מורכב ממה שאתה חשוב, אבל כמו שכתב @clickone, דוגמה קונקרטית תעזור פה
האם הצעת @clickone של חישוב הדלתא יכול לעזור? -
@yossiz
אני חושב שלא יעזור חישוב הדלתא (אם אכן הבנתי את הרעיון) מדובר על חישוב של כל הרשומות מחדש ולא יעזור לחשב את ההשפעה החדשות בנפרד
אתם צודקים שכדאי לתת דוגמא קונקרטית, אני אשב לפשט ולצמצם למינימום את מבנה הטבלאות והסיכום, ואעלה כאן
תודה לבנתיים!
עריכה: העלתי פוסט מקביל עם חלק מהבעיה..