ABA


"php+mysql - עד כמה זה קריטי לשלוף אותה טבלה פעמיים או יותר?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20346 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20346
SiLeNt NoAm
חבר מתאריך 26.5.02
1693 הודעות, דרג אמינות חבר זה
   14:14   15.11.13   
אל הפורום  
  php+mysql - עד כמה זה קריטי לשלוף אותה טבלה פעמיים או יותר?  
 
באותו דף שלי ביצעתי פעמיים שליפה מאותה הטבלה רק שכל פעם עם WHERE אחר..
האם היה עלי לצמצם לפעם אחת ולתחום כל מקרה ב- IF ? טעינת הדף או עומס על שרת יכול להיות מושפע ברמה כזאת ששווה לשים לב לכמות השליפות בכל דף באתר?





בדיחות | משחקים |
הורדות |
סרטונים


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  כל מקרה לגופו זה תלוי במקרה משה הלולן 15.11.13 15:09 1
  זה קריטי במערכות גדולות, last_test 15.11.13 15:55 2
     תודה רבה לשניכם! :) SiLeNt NoAm 15.11.13 16:33 3
  השאיפה שלך בתור מתכנת תמיד תהיה ״להרוג״ פעולות מיותרות ליל קיץ 15.11.13 21:49 4
     זה נכון, last_test 15.11.13 22:32 5
         למרות שאני עצלן צימצתי את מספר החיבורים בדף ל-1 :) SiLeNt NoAm 16.11.13 15:43 6
             אין פה שום קשר לעצלנות, last_test 16.11.13 19:04 7
                 תודה על העזרה פה, לומד הרבה מהפורום :) SiLeNt NoAm 17.11.13 18:39 8
                     תכלס לא ענו לך תשובה 100% מדוייקת לפי דעתי משה הלולן 17.11.13 21:19 9
                         אני רוצה לשפר קצת את התשובה שלך, last_test 18.11.13 18:25 10
                             אם כבר התחלתם להיכנס לעומק של דברים אני אפריע עם עוד חידוד SiLeNt NoAm 18.11.13 22:09 11
                                 אין כאן כלל אצבע Deuce  19.11.13 21:56 12

       
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   15:09   15.11.13   
אל הפורום  
  1. כל מקרה לגופו זה תלוי במקרה  
בתגובה להודעה מספר 0
 
   וכן הרבה פעמים העומס נוצר במסד נתונים אבל זה שאלה כללית חסר פרטים בשביל לענות במקרה שלך


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
last_test
חבר מתאריך 20.8.13
328 הודעות, דרג אמינות חבר זה
   15:55   15.11.13   
אל הפורום  
  2. זה קריטי במערכות גדולות,  
בתגובה להודעה מספר 0
 
   זה גם פשוט bad practice.

המטרה שלך בסופו של דבר היא להציג x נתונים במבנה מסויים ו-y נתונים במבנה אחר באותו עמוד.

אין לך 2 rest requests שאמורים להביא מידע שונה כל פעם.

אתה באופן מיותר לחלוטין מתחבר פעמיים למסד נתונים ומאלץ אותו לעשות 2 שליפות, תגדיל את כמות המשתמשים שלך ל-1000, אז יש לך 2000 שליפות כשכולם ייכנסו לאתר שלך במקביל, זה קצת overkill מיותר לשרת לתת לו 50% יותר עבודה ממה שהוא צריך לעשות.

תשלוף את כל הנתונים ב-פעם אחת, את כל העיבוד תעשה ב-php.

דרך אגב אתמול נתקלתי במשהו שנראה מגניב, תשתית ל-php שמומשה בתור extension ב-C, טענות רבות שזה ה-framework הכי מהיר כיום.

http://phalconphp.com/en/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
SiLeNt NoAm
חבר מתאריך 26.5.02
1693 הודעות, דרג אמינות חבר זה
   16:33   15.11.13   
אל הפורום  
  3. תודה רבה לשניכם! :)  
בתגובה להודעה מספר 2
 





בדיחות | משחקים |
הורדות |
סרטונים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ליל קיץ לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.2.10
10048 הודעות, 7 פידבק, 14 נקודות
   21:49   15.11.13   
אל הפורום  
  4. השאיפה שלך בתור מתכנת תמיד תהיה ״להרוג״ פעולות מיותרות  
בתגובה להודעה מספר 0
 
   לא משנה אם זה דטאבייס או לא, אם 2 פעולות ניתנות לצימצום ע״י פעולה אחת -
זכית במשאבי שרת, זכית בפחות active connections, זכית ב bandwidth, זכית במהירות התגובה של הקוד -
משמע: ייעלת את הקוד = הוזלת עלויות אחזקה ומהירות תגובה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
last_test
חבר מתאריך 20.8.13
328 הודעות, דרג אמינות חבר זה
   22:32   15.11.13   
אל הפורום  
  5. זה נכון,  
בתגובה להודעה מספר 4
 
   לגבי active connections תמיד יש לו את האופציה להשתמש ב-persistent connection מה שמשפר את ה-performance, ה-thread שאחראי על פתיחה וסגירה של connections לוקח לא מעט משאבים.

כמובן שיש ל-persistent connection את החולשות שלה, שמסתכמות בעיקר ב-transactions/connection user sessions/table locks.

לגבי התעבורה אני אחדד את זה יותר, יותר מדובר בכמות המידע שיעבור ב-2 ה-requestים האלה יותר מאשר המידע אשר יחזור אליך.

ב-שפה כמו C-Sharp פחות היה מדאיג אותי לחשוב על הדברים האלה, קיימת שם אופטימיזציה להכלץ


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
SiLeNt NoAm
חבר מתאריך 26.5.02
1693 הודעות, דרג אמינות חבר זה
   15:43   16.11.13   
אל הפורום  
  6. למרות שאני עצלן צימצתי את מספר החיבורים בדף ל-1 :)  
בתגובה להודעה מספר 5
 





בדיחות | משחקים |
הורדות |
סרטונים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
last_test
חבר מתאריך 20.8.13
328 הודעות, דרג אמינות חבר זה
   19:04   16.11.13   
אל הפורום  
  7. אין פה שום קשר לעצלנות,  
בתגובה להודעה מספר 6
 
   למה שתהיה זקוק ליותר מחיבור אחד (בלי שום קשר לpersistent connection/normal connection), אתה צריך שיהיה לך קובץ בשם db_connection.include.php לעשות לו include בכל עמוד שבו אתה משתמש בו, אין שום מצב לכתוב את הקוד הבא למשל:



$connection = mysql_connect....
$query = mysql_query....
$connection2 = mysql_connection
$query2 = mysql_query....


זה אומר שאתה צריך לשאול פה יותר

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
SiLeNt NoAm
חבר מתאריך 26.5.02
1693 הודעות, דרג אמינות חבר זה
   18:39   17.11.13   
אל הפורום  
  8. תודה על העזרה פה, לומד הרבה מהפורום :)  
בתגובה להודעה מספר 7
 





בדיחות | משחקים |
הורדות |
סרטונים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   21:19   17.11.13   
אל הפורום  
  9. תכלס לא ענו לך תשובה 100% מדוייקת לפי דעתי  
בתגובה להודעה מספר 8
 
   ערכתי לאחרונה בתאריך 17.11.13 בשעה 21:24 בברכה, משה הלולן
 
יש מקרים שעדיף לעשות 2 שאילתות מאשר 1 .
לדוגמא אם החיבור שלהם לשאילתה אחת מסובך עם joins וכו שלוקח לה הרבה זמן לרוץ יחסית, עדיף לעשות 2 select פשוטים.

אבל בכל מקרה במילא יש כמה שכבות ש"מחפות" על זה
memcached
אחרי זה הcache של mysql
וכו' לכן לרוב עדיף באמת שאילתה אחת

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
last_test
חבר מתאריך 20.8.13
328 הודעות, דרג אמינות חבר זה
   18:25   18.11.13   
אל הפורום  
  10. אני רוצה לשפר קצת את התשובה שלך,  
בתגובה להודעה מספר 9
 
   ל-MySQL יש מנגנון שנקרא MySQL Query Cache הרעיון מאחוריו הוא שאם שלחת שאילתא לשרת קיבלת מידע מסויים, שלחת שוב את השאילתא לשרת ולא התבצע שום עדכון בטבלאות, אתה תקבל את אותו מידע מה-Cache.

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

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

הדרך הנכונה להשתמש בו היא להריץ DESCRIBE/EXPLAIN על שאילתות שאנחנו יודעים שהן כבדות, לבחור מתוכן את השאילתות שמתבצעות ב-frequency הגבוה ביותר ולשמור את התוצאות שלהן ב-Memcached.

עכשיו אני שוב חוזר לבעיה של הבחור, אתה צריך להבין שבשאילתות הבסיסיות ביותר שמשתמשות ב-LEFT JOIN/RIGHT JOIN/INNER JOIN/CROSS JOIN/OUTER JOIN מתבצעות אופטימיזציות של המנוע עצמו, כמובן שזה גבולי ביחס לאיך שהוא כותב את השאילתא, אבל אין לו את הדאגות האלה.

שאילתות שמתבצעות על מספר טבלאות קטן, זה ממש לא רלוונטי לחלק את זה ל-2 שאילתות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
SiLeNt NoAm
חבר מתאריך 26.5.02
1693 הודעות, דרג אמינות חבר זה
   22:09   18.11.13   
אל הפורום  
  11. אם כבר התחלתם להיכנס לעומק של דברים אני אפריע עם עוד חידוד  
בתגובה להודעה מספר 10
 
מצב 1 - שליפה של כל הנתונים מטבלה מסויימת ללא כל התניה ועבודה עם השליפה הזו בכמה מקרים בדף.

מצב 2 - 3 שליפות של כמה נתונים ספציפיים שונים ושימוש של כל אחד מהם פעם אחת בדף.

מה עדיף?





בדיחות | משחקים |
הורדות |
סרטונים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   21:56   19.11.13   
אל הפורום  
  12. אין כאן כלל אצבע  
בתגובה להודעה מספר 11
 
ובכל זאת - אם מדובר בטבלה בגודל סביר (מאות אלפי שורות) אז כנראה שכדאי לעשות כמה שליפות ספציפיות מאשר שליפה אחת ענקית.

כאשר אתה שם את המידע שלך ב-DB רלציוני אתה רוצה להנות באיזשהו אופן מהעובדה שהוא מובנה ואתה יכול לנצל למשל יכולות index על ה-DB. אם בסופו של יום אתה שולף את כל ה-DB, אל תשמור את הנתונים שם כי זה לא נותן כלום.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net