
13-03-2009, 02:39
|
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
|
benchmark עבור 3 שיטות שונות לשליפת configs המאוחסנים בצורה שונה
זהו benchmark עבור 3 שיטות שונות לשליפת configs המאוחסנים בצורה שונה.
שיטה הראשונה, היא איחסון ה-configs בקבצים בתוך מערך, כאשר המפתח של האיבר מציין את שם הקונפיגורציה, והערך של המערך מציין את הערך המתאים עבור הקונפיגורציה הזו.
בשיטה זו, לכל קבוצת קונפיגורציה (או configuration group) יש קובץ נפרד שבו היא מאוחסנת.
יתרון שיטה זו הוא שניתן לאחסן כמות בלתי מוגבלת (תיאורטית) של ערכים מסוגים שונים, וזה כולל את הסוגים של PHP שהם: boolean, null, string, numbers. וכל זה עוד מבלי שאצטרך להגדיר באופן ספציפי את סוג הערך (כמו שמבצעים בהגדרת טורים במסד נתונים). יתרון נוסף (ואולי קטן) זה שלא צריך לפתוח חיבור למסד הנתונים בשביל להשיג את המידע.
החיסרון הוא, ובכן אני לא מצליח לחשוב על אחד כזה כרגע. בעצם אולי החסרון היחיד זה שכאשר מבצעים גיבוי ל-DB, המידע שבקבצים (כלומר קונפיגורציה, במקרה שלנו) לא ייכלל בגיבוי. אבל זה שטויות כיוון שאפשר לגבות את הקבצים בקלות...
שיטה שנייה, זה איחסון הנתונים בטבלה ב-DB, כאשר השם של הטור הוא השם של הקונפיג, והערך שבשדה זה הערך המתאים.
בשיטה זו, כל קבוצת קונפיגורציה היא רשומה נפרדת בטבלה.
יתרון - אין משהו ניכר.
חסרון - יש הגבלה עבור סוג המידע (צריך להגדיר את סוג הערך שבטורים ואנו מוגבלים אליו, אלא אם נשנה אותו). יש הגבלה עבור גודלו של המידע, בהתאם לסוג הטור שהגדרנו. צריך לפתוח חיבור למסד הנתונים כדי להשיג מידע.
שיטה שלישית, זה איחסון הנתונים בטבלה ב-DB, כאשר יש רק 4 טורים של: cfg_key, cfg_id, cfg_name, cfg_value. קבוצות הקונפיגורציה נבדלות אחת מהשנייה לפי הערך שבשדה cfg_key.
קבוצת קונפיגורציה אחת עלולה לכלול X שורות.
יתרון - אין משהו ניכר.
חסרון - כמו של השיטה השנייה... בעצם כאן אנו יותר מוגבלים כיוון שהטור cfg_value צריך להתאים לכל הערכים שיכולים להיות למידע של כל הקונפיגורציות שנשים. לא מסובך להסתדר עם זה, אבל עדיין זאת מגבלה...
תוצאות הבדיקות בקובץ הבא:
results.txt
הקובץ שאיתו ביצעתי את הבדיקה הוא:
fetching_rows_VS_include.php
יש לציין שהפעם עשיתי את הבדיקות בדיוק הגבוהה ביותר האפשרי: עבור כל סוג של שיטה, גרמתי לשאר השיטות להיחשב כהערה (php note) על מנת שלא יעמיסו על הבדיקה של השיטה הספציפית, ווידאתי שה-CPU מיוצב על 99% פנוי. כמובן שיצאתי מתוכנות מיותרות שלא יפריעו...
בנוסף הרצתי את הלולאה (שבודקת את הזמן) פעם אחת בלבד. כל תוצאה רשמתי בקובץ results.txt ובסופו של דבר עשיתי ממוצע. 12 בדיקות לדעתי מספיקות...
המסקנה היא שהשיטה של הקבצים מהירה ב-160% (כאשר גודל המידע סטנדרטי) ולמעשה טובה יותר ונוחה הרבה יותר, מהסיבות שאין מגבלה לגודל המידע ואפשר להכניס מידע מגוון (כל סוגי ה-scalar ו- null). בנוסף יש גישה למידע דרך הקבצים, שזו עוד נוחות אקסטרא. הבעיה היחידה היא כאמור, הגיבוי...
המקרה היחידי שבו שיטת הקבצים הייתה איטית יותר, זה כאשר גודל המידע היה עצום (לדוגמא, 60,000 תוים עבור קונפיג\אלמנט\אובייקט\איבר אחד!), ואז האיטיות הייתה ממש בולטת., יחסית ל-2 השיטות האחרות. אבל מכיוון שמידע שהוא קונפיגורציה לא אמור להיות כל כך גדול, המקרה הזה זניח ולדעתי אין להתחשב בו.
בקובץ הבדיקה התייחסתי ל- configuration groups בתור מידע הקונפיגורציה שהוגדר עבור אלמנט מסויים. לדוגמא, להגדרות החיבור של מסד נתונים יש קבוצת קונפיגורציה אחת, ובקבוצה זו יש כמה אלמנטים של mysql_user, mysql_server, mysql_password וכו'...
נערך לאחרונה ע"י dorM בתאריך 13-03-2009 בשעה 02:41.
|