הרבה זמן אני כבר חושב על המנוע הסטטיסטי הזה, מצפה לו, חולם עליו. פעם, כשהאתר עוד היה בחיתוליו, הייתי יכול לעשות את כל הסטטיסטיקה לבד, על ה-Excel שלי (אפילו כללתי חלק מהתוצאות ב-התפתחות צ'יק צ'ק). זה היה כל כך פשוט: לוקחים את שני קבצי הלוג וטוענים אותם לתוך ה-Excel. קצת משחקים ב-Excel ויש סטטיסטיקות מעודכנות. אבל לפני חצי שנה בערך הפכו הקבצים האלה להיות גדולים מדי, ו-Excel פשוט מתמוטט כשהוא מנסה לטעון אותם. מאז אני חושב על מנוע סטטיסטי, שינתח את קבצי הלוג ויציג את התוצאות במסגרת האתר.
אז כשהתקרב תום השנה הראשונה לפעולת צ'יק צ'ק (ב-9 ביוני 2002), באמת התחלנו להוציא את זה אל הפועל. מי זה התחלנו? ראשון במלאכה היה עדי רן, שישב וכתב את לב המנוע הסטטיסטי: החלק שקורא את קבצי הלוג ומנתח אותם. אחר כך הצטרפה יונת שרון, וחיברה את לב המנוע ל-צ'יק צ'ק. ובסוף ישבתי אני (רועי שרון) ועיצבתי את החלק המסורתי שלי: ממשק המשתמש.
בסך הכל זו היתה עבודה הרבה יותר גדולה ממה שציפינו. אבל בדרך שיפרנו כמה מהמנגנונים של צ'יק צ'ק (בעיקר את אלה שתומכים באפליקציות חיצוניות), ודי נהננו בתהליך. את התוצאה אתם מוזמנים לשפוט בעצמכם.
קבצי הלוג
אם ברצוננו להבין מה עושה המנוע הסטטיסטי כדאי שנתחיל בנתונים שמוזנים לתוכו: קבצי הלוג. שני קבצי הלוג הם קבצים פשוטים מאד, שמכילים שורה לכל פעולה שקרתה באתר. בקובץ View.log נשמרים כל הביקורים באתר. כל פעם שמישהו מסתכל על דף באתר נוספת שורה לקובץ הזה. לדוגמא, חלק מהקובץ יכול להכיל:
{{
20020609223515 200110272028214101 לגדל ילדים בלי חיתולים
20020609223754 200202181505086655 בשמת א
20020609223838 200204302334335503 בישולים פשוטים
20020609223855 200204302334335503 מה חדש
20020609223855 200204302334335503 new=3
20020609224211 200204172027355776 מה חדש
20020609224211 200204172027355776 new=3
}}
השורה הראשונה אומרת שבשעה 22:35:15 ביום 9/6/2002 משתמש מסויים ביקר בדף לגדל ילדים בלי חיתולים. איך אני יודע? כי המספר הראשון אומר את זה -- הנה, תראו: 15 35 22 09 06 2002. מי המשתמש הזה? אי אפשר לדעת, כל מה שאנחנו יודעים זה את המספר של העוגיה על המחשב שלו (זה המספר השני), אבל אי אפשר להסיק מזה את שם המשתמש. בשורה השניה אפשר לראות שמישהו ביקר בדף בשמת א. אחר כך מישהו אחר ביקר ב-בישולים פשוטים, ואחר כך ב-מה חדש. וכן הלאה.
בקובץ הלוג השני, שנקרא change.log, נשמרים השינויים שקרו באתר:
{{
22763 20020604045313 200106270009086014 ואל אישך תשוקתך והוא ימשול בך צפריר שפרון new
22798 20020604130902 200206041309013338 אור שחר אור שחר new
22800 20020604131033 200206041310334546 למון ליים פלוני אלמונית edit
22802 20020604131512 200108080723536265 בתי ספר דמוקרטיים דוד רובנר edit
22804 20020604144128 200108080723536265 בתי ספר דמוקרטיים דוד רובנר edit
22811 20020604194557 200108272245001200 פטנטים לעצירות ר.ר. add
22812 20020604202046 200108080723536265 בתי ספר דמוקרטיים דוד רובנר add
}}
בשורה הראשונה (שינוי מספר 22763 באתר), בשעה 4:53:13 בבוקרו של יום 4/6/2002, פתח צפריר שפרון דף חדש בשם ואל אישך תשוקתך והוא ימשול בך. המילה בסוף השורה אומרת את סוג השינוי (במקרה הזה new, כלומר חדש). אפשר לראות כאן עוד שני סוגי שינויים: edit (כלומר, עריכה), ו-add (כלומר, הוספה).
מנגנון המטמון (Cache)
אחרי שהמנוע הסטטיסטי קורא את הקבצים הוא מנתח אותם ומייצר קובץ תוצאות. קובץ התוצאות מכיל את כל נתוני הסטטיסטיקה שחושבו על ידי המנוע, במספר טבלאות. הקובץ נשמר על השרת במבנה XML (אם זה לא אומר לכם דבר אז פשוט תתעלמו; זה לא ממש חשוב). הניתוח הזה יכול לארוך מספר דקות! קבצי הלוג מכילים כמה מאות אלפי רשומות, וזה לוקח זמן לקרוא את כולן ולנתחן.
על מנת להמנע מהפעולה הארוכה של החישוב בכל פעם שמישהו רוצה להסתכל על המידע הסטטיסטי החלטנו לשמור קבצי מטמון. מה זה? קובץ מטמון הוא קובץ השומר את תוצאות החישוב, כך שאין צורך לחשב את התוצאות מחדש. רק אם קובץ המטמון מתיישן מדי (לדוגמא, מעל יום), אז מחשבים את קובץ המטמון, והתוצאות מתעדכנות. פטנט נחמד, לא?
בגלל קבצי המטמון לא תמיד התוצאות מעודכנות על הדקה. אבל מצד שני הן לא אמורות להיות ישנות יותר מיום -- וגם זה מספיק עבור רוב האנשים. לפעמים, כאשר לא קיים קובץ מטמון עבור תוצאת חישוב מסויים, המנוע הסטטיסטי ינסה לחשב את התוצאות על המקום. אם הוא לא יצליח לעשות את זה תוך מספר שניות אז הוא יציג הודעת שגיאה, שאומרת שהתוצאות לא זמינות ושהן יהיו מוכנות כעבור זמן מה.
מנגנון התוכן הפעיל
אחרי שהניתוח הסטטיסטי הושלם, וכל התוצאות זמינות בקובץ המטמון, כל שנדרש הוא להציג אותן. לשם כך אנחנו משתמשים במנגנון התוכן הפעיל. המנגנון הזה מאפשר לכלול באמצע דף של צ'יק צ'ק קריאה לתוכנית חיצונית: כשמשתמש ניגש לדף הזה, התוכנית החיצונית מורצת, והתוצאות שלה נכללות במסגרת הדף.
אם אתם זוכרים, אז את המנגנון הזה כללנו כבר בגרסה 1.3 (ראו שינויים בצ'יק צ'ק) מלפני חצי שנה. כבר אז חשבנו על הרעיון הזה של הסטטיסטיקה, והתחלנו לבנות את התשתית (אם כי התשתית הזו מתאימה לעוד דברים, ולא רק לסטטיסטיקה). עתה אנחנו משתמשים במנגנון הזה בכל הדפים של הסטטיסטיקה, על מנת להציג תוצאות של המנוע הסטטיסטי במסגרת דפי האתר.
למעשה, המנגנון הזה מאפשר להמשיך לערוך ולהוסיף הערות לדפים שעוסקים בסטטיסטיקה! כך אפשר לדון על התוצאות הסטטיסטיות אם רוצים, או סתם לבנות עוד דפים שמכילים טבלאות שמעניינות אותנו. (מי שמעוניין לראות איך נראית שורת הפקודה של תוכן פעיל כזה מוזמן לנסות לערוך את אחד הדפים של הסטטיסטיקה.)
נשמח כמובן לשמוע הערות, ואם יש בעיות אז אתם מוזמנים לתת דיווח על בעיה. אה, ועוד דבר, אם מישהו מכם מעוניין ליצור מנוע גראפי שיוכל להציג את התוצאות הסטטיסטיות בגרפים יפים, אז אנחנו מחפשים מתנדבים! תהנו
ראו גם: סטטיסטיקה בצ'יק צ'ק, הסבר על הסטטיסטיקה.