בכיף
אני אנסה להבהיר את הנקודות שהעלת:
>> זה רק רשימה של מילים בלי שום נתון נוסף. נראה לי שדה אחד בכל שורה מספיק. אפילו בלי ID. רק להוסיף לזה אינדקס רגיל.
* באופן תיארוטי אם אי שימוש ב ID והשמות הן ייחודיים בכל מקרה אז אתה לא צריך את הטר ID
>> תה המלצת שאולי כדאי לחתוך את זה לכמה טבלאות. השאלה אם זה לא מיותר אם יש אינדקס?
* זה ממש לא מה שהמלצתי!
חשוב מאוד להבין שאני נמנע מלתת המלצה בתחום ארכיטקטורה, למערכת שאני מכיר אותה. זה חוסר מקצועיות ויכול להוביל לאבסורדים לא קטנים. רק דיברתי על אפשרות באופן כללי במקרה של מספר רשומות גבוה. מספר רשומות גבוהה יכול להיות למשל כמה מליוני רשומות של טקסטים... למעשה זה גם יכול להיות כמה מליוני רשומות... זה דיי תלוי בנתני המערכת, ומה שגבוה לאחד יכול להיות נמוך לאחר.
70 מליון רשומות כתבתי ש MySQL אמור לטפל בזה להערכי למרות שמנסיון שלי זה כבר יורגש במהירות.
>> אחתוך את זה לפי האות הראשונה של המילה. טבלה למילים שמתחילים בא', טבלה למילים שמתחילים בב' וכו' - האם זה היה יותר מהיר מהכל בטבלה אחת אם יש אינדקס (שהוא למעשה כבר מסדר את זה לפי אלף בית, כך נראה לי)?
* זו שאלה טובה אבל העניין שניהול הטבלאות הנפרדות עולה מאבים גם כן והדברים תלויים מאוד באופן השימוש בנתונים ולא רק במסד הנתונים. מסד הנתונים לא מנותק מהאפליקציות שניגשות אליו, למרות שזו נקודה שרוב ה DBA טועים בה לדעתי.
למשל אפליקציה שצריכה רק את נתונים של השבוע האחרון טוב לפעמים יהיה להחזיק את הנתונים הישנים בטבלה נפרדת "ארכיון", ואת הנתונים של השבועיים האחרונים בטבלה "חיה". אבל אם תשאל את השאלה בצורה מנותקת מהשימוש אז עלולים להגיד ל שאין סיבה להפריד 20K רשומות ממליארד רשומות אחרות והאינדקס הכללי יספיק (זה א נכון!)
גם אינדקס מחיחיב קריה של נתונים. נתונים של האינדקס כמובן וככל שטבלה גולה יותר האינדקס גדול יותר. מהירות עבודה עם אינדקס נקבעת בדרך כלל ממספר הרמות שלו. בשרתי SQL למשל כל הנתונים נשמרי באלמנט שנקרא "דף". כל דף מכיל תמיד 8K נתונים. אין הבדל תיאורטית במהירות בין אינדקס של 7K לאינדקס של 1K אבל אם תיאלץ לקפוץ רמה לשימוש ב 12K אז יהיה עלייך לקרוא 2 פעולות IO במקום ר פעולה אחת. תחשוב על אינדקס כמו מבנה של עץ נתונים (אתה יכול לחפש בגוגל עץ נתונים)
ספציפית במקרה הנוכחי צריך לבדוק מה השימוש ומה המערכת שלך אבל אני לא מניח בניחוש ראשני שיהיה צורך בחלוקה
>> נחנו כנראה מדברים על מערכות מאוד שונות. רוב האתרים הקטנים באינטרנט שמאוכסנים על שרתי לינוקס, מאוחסנים עשרות אתרים על שרת בגדול הזה - והם עובדים בסדר...לא טסים, אבל בסדר
אכן אנחנו דיברנו על דברים מעט שונים אבל לא בהרבה. מערכת הפעלה לינוקס בנוייה לחלטין שונה ממערכת וינדוס. לינוקס מובסס גרעין שיכול לעבוד בפני עצמו ומסביבו מוסיפים מודולים שונים. וינדוס בנויה על מכלול אחד בעקרון. מערכות וינדוס בשם CORE הם בערך בדיחה אחת גדולה (אם כי מאוד יעילים) ונועדו לתת למי שלא מבין את ההרגשה שהנה הוא עובד עם מערכת CORE. מעשית אלו מערכות וינדוס שהורידו מהן מודולים שונים כדי למטב את העבודה שלהן (שים לב להבדל: גרעין שמוסיפים לו מודולים לעומת מערכת שלמה, שמורידים ממנה מודולים). בגדול מערכות CORE לא כוללות ממשק GUI והעודה איתן נעשית בעזרת פקודות בלבד (ממשק כמו ה CMD של וינדוס)
נחזור לשאלה: הסברתי מעל שמערכת מינימלית תהיה עם 1 גיגה מכיוון שדיב רתי על וינדוס ומערכת ההפעלה עצמה מחייבת מינימום של 500 מגה לשימוש שלה. מערכת סטנדרטית לאתר אינטר קטנים מאוד פרטיים היא כמו שכתבתי מעל: מכונה וירטואלית עם מינימום 1 גיגה.
במקרה של לינוקס אתה חוסך 500 מגה של מערכת ההפעלה ואכן 500 מגה היא הדרישה המינימלית למערכת שצריכה להחזיק אתרי אינטרנט ביתיים קטנים. שימוש בשת MYSQL מחייב עוד לפחות 500 מגה כדי לעבוד תקין ועדיף הרבה יותר אבל תץיארוטית כן הוא יעבוד עם פחות.
>> אני חושב שהמעבד של שרתים הוא סוג אחר לגמרי ממעבד של מחשבים רגילים. השרת הזה באמת חלש, אבל זה החוזק סטנדרטי לשרתים של אתרי אינטרנט.
* לצערי אתה טועה לחלוטין
מעבד הוא מעבד בעקרון ואנחנו לא דנים בכיצד מפתחים מעבד ומה ההבדל בין מעבדים (זה לא קשור לנושא ולא חשוב מבחינתינו). אבל השימוש במעבד נעשה בדרכים שונות. מעבד של שרת הוא בדיוק אותו מעבד כמו של מכונה שמשמשת לשימוש ביתי אם עושים שימוש באותו סוג. i7 הוא סוג מעבדים מאוד נפוץ במחשבים ביתיים וגם בשרתים קטנים למשל.
קודם בוא נתחיל מכך שאין היום מכונות עם 500 מגה זכרון. לא תמצא בחנויות אפשרות לרכוש זכרון כל כך קטן כניראה. זה מצביע שאתה בעצם עובד עם מכונה וירטואלית או מכונה מימי הפלמ"ח. אני מניח שאתה מדבר על מכונה וירטואלית ו
אם זה שירות חיצוני ואמרו לך שאתה מקבל מכונה נפרדת אז עבדו עלייך ככל הנראה!
עתה נחזור לעניין המעבד, במכונה וירטואלית המעבד וירטואלי וכן הזכרון. הגדרת המשאבים תלויה באופן ההגדרה של המכונה הוירטואלית. בדרך כלל עושים שימוש בזכרון שיתופי וכן במעבד שיתוי. מה שה אומר זה שאם יש לך מכונה עם 10 גיגה זכרון למשל אתה יכול להקים עליה 11 מערכות של מכונות וירטואליות עם 1 גיגה זכרון כל אחת. כיצד?!?
הרעיון הוא שסומכים על כך שמעשית לא כל המכונות הוירטואליות עושות שימוש בכל הזכרון שהוקצה להם באותו רגע וסומכים על כך שתמיד יהיה 1 גיגה זכרון פנוי כדי להקים עוד מכונה וירטואליץ אותו דבר ורה בערך עם המעבד (לא מדוייק אבל דומה).
>> בעקבות הערה שלך עשיתי בדיקה גם על המחשב האישי שלי (i5 8GB SSD) וגם על השרת "הקטנצ'יק" כדי לוודא שאני לא סתם הולך לפתח משהו שיצטרך מחשב על... וצירפתי להודעה תמונה עם התוצאה. כמובן שהמחשב הרבה יותר מהיר מהשרת, אבל גם השרת מתמודד יפה עם 30 אלף שאילתות בשישים שניות.
* אלו נתונים סבירים למחשב ביתי קצת מיושן. אין בעיה מכיוון שהוא הרבה יותר חזק ממכונה וירטואלית שנותנים לך כניראה. תבדוק עליו וכבדיקה ראשונית
>> אני אפילו לא טורח לבדוק...
אתה לא צריך לטרוח! זה מתמטיקה פשוטה שאתה חייב למוד לבצע באש או עם נייר אם אתה עובד בפיתוח או עם מסדי נתונים.
כל תו תופס מקום של בייט אחד או שתיים (תלוי בשפה איתה עובדים למשל ובקידוד). 70 מליון מילים כפול ממוצע של 10 אותיות למילה נותן 700 מליון תווים ולכן 700 מגה בייט בזכרון יכול להיות בערך הגודל שצריך אם אכן מדובר בבייט אחד לכל אות.
מעשית שומרים נתונים מעט שונה בצורה מכווצת... זה כבר עניין אחר שאפשר לדון עם המפתח (זה קצת מורכז להכין את האלגוריתמים אבל השימוש פשוט אחר כך וחוסך זכרון אולי על חשבון מעבד שצריך לעבוד יותר)
>> נראה נחמד, אבל לא מתאים ללינוקס
זה רק לשרתי SQL
ברור שלא מתאים לך
לסיכום: אני חושב שיש לך את הבסיס כרגע וכל מה שנשאר זה לבצע בדיקה ולקבל התרשמות איתי
* בטח יש כאן כמה עשרות טעויות הקלדה.. אין לי כוח לתקן
אני מקווה שההודעה קריאה...