על ידי ניר_סופר* » 06 ינואר 2003, 02:03
מעולם לא כתבתי משהו מהסוג הזה, אז בטח יש כאן כמה רעיונות לא ממש מוצלחים. אבל בכל זאת...
איך אתם יוצרים את קובץ מה חדש על השרת?
- האם ציק צק בודק את תאריכי השינוים של הקבצים בכל בקשה למה חדש?
- או שהוא מחזיק בזיכרון hash table שמתעדכן בכל פעם שדף עובר עריכה כלשהיא?
נניח שבכל פעם שדף עובר עריכה, נוצרת שורה חדשה בטבלה שם דף: רשימת 4-5 שינויים אחרונים, תאריך שינוי אחרון
ובנוסף מתעדכנת רשימה של שינויים בפורמט: זמן, דף שתשמש לשליפת נתונים מתוך הטבלה בהמשך. הרשימה ממוינת כמובן, מאחר והיא נבנית באופן כרונולוגי.
כשאתה מקבל בקשה לנתונים למה חדש, אתה שולף מהרשימה את כל השינוים שמתאימים למספר הימים, ושולף מהטבלה את האינפורמציה לכל שינוי. בגלל שהכל נשמר בזיכרון, ושליפת נתונם מרשימה ממוינת היא מהירה ביותר, לא שונה בהרבה ממערך ב-C ? ושליפת נתונים מטבלת מהזיכרון היא מהירה מאד ולא תלויה בגודל הטבלה, זה צריך לקחת מעט מאד זמן.רק צריך לפרמט כ-xml ולשלוח.
עכשיו רק נשאר לכתוב את זה כתוכנת שרת נפרדת, "שרת מה חדש", שירוץ על מחשב אחר משרת הדפים או באותו מחשב כתהליך נפרד, ויש לך פתרון מהיר לאספקת דפי מה חדש, בלי קשר לשרת הדפים. שרת מה חדש לעולם לא ניגש לדיסק של השרת. בעצם לעולם אין צורך בגישה לדיסק כדי לבדוק איזה קבצים השתנו, כי כל שינוי מתועד על ידי שרת השינויים. קצת דומה למערכת קבצים עם Jornaling, שכל שינוי מתועד.
שרת כזה כמובן לא תלוי בשרת הדפים, ואפשר גם לכתוב אותו בשפה אחרת. התקשורת בינו לבין שרת הדפים היא דרך מערכת ההפעלה. זה אולי די איטי, אבל כמות המידע שצריך להעביר היא מאד קטנה, וגם כמות השינויים בטח לא ממש גדולה. נניח שאתם משרתים 1000 לקוחות בו זמנית. כמה יבצעו פעולת עריכה? אני מנחש שמעט מאד. רוב האנשים קוראים ורק חלק קטן כותבים, ולכתוב לוקח זמן. אני מניח שרוב זמן הפעולה של ציק צק הוא בקריאת דפים מהדיסק ושליחה ללקוחות.
כמובן שצריך לפתור את הבעייה של התקשורת בין שני השרתים. שרת הדפים צריך להודיע לשרת מה חדש בכל פעם שמשתנה דף, כדי לעדכן את הטבלה והרשימה בזכרון. השינוי צריך להיות מאד מהיר, כי מדובר בהעברה מעט מאוד מידע, שליפת שורה בטבלה ועדכון של רשימת כותבים, בכל פעם שמשתנה עמוד.
האם רצים כמה תהליכים של ציק צק באותו זמן על השרת? האם שרת מה חדש גם יצטרך לרוץ בצורה כזאת על מנת שהשרת יוכל לטפל בו זמנית בכמה בקשות, או שבעצם אין טעם לטפל ביחד בכמה בקשות ועדיף שיחכו בתור לטיפול על ידי תהליך אחד?
מעולם לא כתבתי משהו מהסוג הזה, אז בטח יש כאן כמה רעיונות לא ממש מוצלחים. אבל בכל זאת...
איך אתם יוצרים את קובץ מה חדש על השרת?
[list]
[*] האם ציק צק בודק את תאריכי השינוים של הקבצים בכל בקשה למה חדש?
[*] או שהוא מחזיק בזיכרון hash table שמתעדכן בכל פעם שדף עובר עריכה כלשהיא?
[/list]
נניח שבכל פעם שדף עובר עריכה, נוצרת שורה חדשה בטבלה שם דף: רשימת 4-5 שינויים אחרונים, תאריך שינוי אחרון
ובנוסף מתעדכנת רשימה של שינויים בפורמט: זמן, דף שתשמש לשליפת נתונים מתוך הטבלה בהמשך. הרשימה ממוינת כמובן, מאחר והיא נבנית באופן כרונולוגי.
כשאתה מקבל בקשה לנתונים למה חדש, אתה שולף מהרשימה את כל השינוים שמתאימים למספר הימים, ושולף מהטבלה את האינפורמציה לכל שינוי. בגלל שהכל נשמר בזיכרון, ושליפת נתונם מרשימה ממוינת היא מהירה ביותר, לא שונה בהרבה ממערך ב-C ? ושליפת נתונים מטבלת מהזיכרון היא מהירה מאד ולא תלויה בגודל הטבלה, זה צריך לקחת מעט מאד זמן.רק צריך לפרמט כ-xml ולשלוח.
עכשיו רק נשאר לכתוב את זה כתוכנת שרת נפרדת, "שרת מה חדש", שירוץ על מחשב אחר משרת הדפים או באותו מחשב כתהליך נפרד, ויש לך פתרון מהיר לאספקת דפי מה חדש, בלי קשר לשרת הדפים. שרת מה חדש לעולם לא ניגש לדיסק של השרת. בעצם לעולם אין צורך בגישה לדיסק כדי לבדוק איזה קבצים השתנו, כי כל שינוי מתועד על ידי שרת השינויים. קצת דומה למערכת קבצים עם Jornaling, שכל שינוי מתועד.
שרת כזה כמובן לא תלוי בשרת הדפים, ואפשר גם לכתוב אותו בשפה אחרת. התקשורת בינו לבין שרת הדפים היא דרך מערכת ההפעלה. זה אולי די איטי, אבל כמות המידע שצריך להעביר היא מאד קטנה, וגם כמות השינויים בטח לא ממש גדולה. נניח שאתם משרתים 1000 לקוחות בו זמנית. כמה יבצעו פעולת עריכה? אני מנחש שמעט מאד. רוב האנשים קוראים ורק חלק קטן כותבים, ולכתוב לוקח זמן. אני מניח שרוב זמן הפעולה של ציק צק הוא בקריאת דפים מהדיסק ושליחה ללקוחות.
כמובן שצריך לפתור את הבעייה של התקשורת בין שני השרתים. שרת הדפים צריך להודיע לשרת מה חדש בכל פעם שמשתנה דף, כדי לעדכן את הטבלה והרשימה בזכרון. השינוי צריך להיות מאד מהיר, כי מדובר בהעברה מעט מאוד מידע, שליפת שורה בטבלה ועדכון של רשימת כותבים, בכל פעם שמשתנה עמוד.
האם רצים כמה תהליכים של ציק צק באותו זמן על השרת? האם שרת מה חדש גם יצטרך לרוץ בצורה כזאת על מנת שהשרת יוכל לטפל בו זמנית בכמה בקשות, או שבעצם אין טעם לטפל ביחד בכמה בקשות ועדיף שיחכו בתור לטיפול על ידי תהליך אחד?