|
01-09-2010, 15:45
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
אתה חושב שדפדפן הוא לא שם גנרי ל"לקוח HTTP", ושהפתרון שהצעתי לא גנרי ומתאים לכל אפליקציה. לא חסר היום מוצרי תוכנה שמדברים אחד עם השני ב HTTP בלי שום קשר לאתרי אינטרנט... והמגמה הזו רק מתחזקת כשדברים עוברים למחשוב ענן.
הקטע שאתה לא מבין הוא איך המנוע של השפות מתחיל לפרש את האפליקציה, ומה נאלץ להיטען בשתי הנ"ל מול כל טכנולוגיה אחרת. יש סיבה לצריכת הזיכרון המטורפת של שני הנ"ל, ולעובדה שבין instance-ים של בקשות שונות נגרר מידע. זה הזבל שמסביב שעליו אני מדבר.
כמות האפליקציות שכתובות בשתי הנ"ל בהחלט מוכרת לי. בייחוד בישראל, מדינת הגאונים.
1. איכשהוא פספסת את ה overhead בגישה ל DB שכאמור יושב בד"כ על מכונה אחרת ואפילו לא בהכרח על אותו LAN. או בכוונה, או ש... ?
2. אתה כאילו טוען שיצירת הקישורים בצורה חד פעמית במהלך יצירת הדף, קיימת רק כשניגשים אליהם ישירות קבצים, אבל נעדרת משום מה דווקא כשבונים אותם מ DB? אתה רציני? הסנריו-אים שלי דיברו על ה overhead בהורדת קבצים, כחלק מרינדור של דף (או לצורך העניין, שליפת מידע על ידי אפליקציה גם אם זה לא אתר אינטרנט). זה לא משנה את העובדה. בשיטה שלך אתה חייב לעבור באפליקציה ולעבור overhead מול DB, שיכול להיות אדיר ככל שה dataset שלך גדל. בשיטה שלי ("שלי" ? מודה, גם פייסבוק משתמשים בזה. אדיוטים שכמותם...) , אתה פשוט חוסך overhead. לחסוך overhead זה תמיד רעיון טוב. בייחוד שהוא לא באמת תורם למשהו.
2. זה כן משנה, כי יש לך IO הלוך וחזור מיותר בין האפליקציה ל DB. זה דורש משרת האפליקציה לבצע הרבה יותר טראנזקציות ממה שהוא צריך - ולחינם. אולי אתה חושב על אפליקציה שניגשים בה גג לקובץ אחד בשנייה. אני מדבר איתך על אתר אינטרנט שמספק גישה למאות/אלפי קבצים בשנייה וצפונה. אתה באמת חושב שיש איזשהוא מצב שבו זה רעיון טוב להעמיס את כל התעבורה הזו דרך האפליקציה שלך ודרך ה DB, עם כל רוחב הפס הנלווה, השיהוי, וכו', רק כדי ש... מה בעצם?
4. אשר להרשאות, אמרת בעצמך, אפשר דרך מערכת קבצים (איפה שרלוונטי...). אם אתה רוצה ברמה אפליקטיבית, אפשר לעשות סוג של security by obscurity, על ידי כך ששמות הקבצים יהיו בלתי אפשריים לניחוש (כמו סיסמאות) מלכתחילה, ואז רק מי שניגש לדף שנוצר על ידי המערכת ששמרה את הקבצים, ידע את מיקומם, וכך תנהל את ההרשאות אליהם. ושוב אני מפנה למערכת הקבצים האדירה של פייסבוק.
מה מאחסן יותר יעיל? מערכת קבצים
מה יותר נוח לגבות? האמת שמערכת קבצים. בייחוד אם ה DB שלך הוא MS-SQL. ושוב, אומר את זה אנוכי הקטן בתור בנאדם שעובד בתחום ה IT, ואחראי, בין השאר, על גיבוי של שתי הצורות...
ודאי שיראו הבדל בביצועים. וככל שיש לך יותר מידע ויותר טראנזקציות, יראו יותר הבדל. שוב, יש הבדל בין אפליקציה שמשרתת 5 משתמשים, לאחת שמשרתת מאות, אלפים, ועשרות אלפים. באופן כללי אני אומר, שכל דבר שה scaling שלו מסובך ברמת קושי עולה ככל שהוא גדל, הוא כנראה פתרון גרוע. מה לעשות, scaling בקלות הוא דבר שרוב האנשים מוצאים כעדיף...
אשר לטראנזקציות, תעשה טראנזקציות ב DB ברמת ה metadata. אל תמחק קבצים (או תמחק אותם באופליין אם בא לך). תן שם חדש לקובץ אחרי שינויים, ואת הישן תפנה בזמנך הפנוי, אם בכלל תפנה. בד"כ ממילא יש דרישות ל archiving (שמעת על Sarbanes–Oxley?), אז אתה לא הולך למחוק בכל מקרה..
צר לי, אבל כפי שאמרתי בהתחלה, יש מעט מאוד מקרים שבהם זה הגיוני לשמור BLOB-ים אדירים של מידע. והמקרים המועטים האלה, גם הם בעיקר בשל תירוצים יותר מאשר סיבה אמיתית. מה לעשות, אם שמירת קבצים ב DB הייתה הדרך היעילה ביותר, מערכות קבצים היו לא קיימות.
לא מפתיע שמיקרוסופט דוחפת את הכיוון הזה עם ה FileStream הזה שהזכרת. הם כבר ניסו פעם להפוך את מערכת הקבצים ל DB. רעיון מגוחך. קראו לזה WinFS. אתה זוכר מה קרה לזה בסוף? (אל דאגה, אני בטוח שבדרכם ל-ויסטה2 [סליחה, התכוונתי למילניום3], עוד יהיה resurrection לקשקוש הזה...)
|
|