הדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?
-
בס"ד
שלום וברכה, לחברי הפורום היקרים.
אשמח לקבל את חוות דעתכם לגבי הדברים החשובים שצריך לדעת ולתכנן מראש לשימוש בmySql עם המון שורות, בוא נאמר שיכול להגיע בטבלה מסוימת למעלה מ 5.5M שורות בחודש, ולא מדבר על אם הרצה לעשות log / history על כל פעולה בתוכנה...
עוד דבר, האם זה נכון לעשות לכל לקוח dataBase משלו, למרות שיהיו דברים משותפים?
בוא ניקח לדוגמא, אם אני אעשה רשימות השמעה של שירים או כתובות למשל, כל אחד יוכל לעשות לעצמו רשימות ולשתף רשימות משתמשים אחרים,
אחד שקיבל כמה רשימות מכמה משתמשים שהם יצרו אותם, אותו אחד יוכל לראות את כולם ביחד רק יצויין לו איזה משתמש שיתף אותו וכדו',
כמובן שהDataBase העיקרי שם יהיו המשתמשים היוצרים וגם המשתמשי קצה, וזה יהי קצת מורכב כ"פ לחפש בכל הDBים - כמובן שיש רעיונות כמו למשל להשים את ההרשאות בDB המרכזי וכדו', אבל היות וזה רק דוגמא אז לא ניכנס לפתרונות ספציפיים.
לסיכום:
א. האם זה נכון להשתמש בDB אחד או לחלק אותם למשתמשים?
ב. מה חשוב להשים לב, לפני שיוצרים DB שעשוי לקלוט המון שורות?
ג. האם seqeulize מתאים - כי לי זכור שזה כמו משתנים (jsonים) שיושבים על השרת, ובשביל לקרוא הוא לא בהכרח מתחבר ל mySql - זכור לי שניסיתי פעם לעדכן את הmySql ישירות (לא דרך ה seqeulize) ולא קיבלתי את זה עד שהפעלתי שוב את השרת
אז כמובן שהשאלה מתחלקת ל2 אם משתמשים ב db אחד או באחד לכל משתמש האם גם אז זה רלוונטי / אפקטיבי?אודה על תשובות מחכימות,
תודה מראש... -
DB אחד עבור כל המשתמשים
להגדיר אינדקסים בעמודות הנכונות
seqeulize בהחלט מתאים ומחובר ל db הוא לא שומר את המידע בזיכרון (RAM) -
Sequlize זה סה"כ ממשק שממיר קוד לשאילתת SQL, הוא לא מחזיק שום דבר בזיכרון
-
@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
להגדיר אינדקסים בעמודות הנכונות
כמו מה? (חוץ מהמפתחות)
-
@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
seqeulize בהחלט מתאים ומחובר ל db הוא לא שומר את המידע בזיכרון (RAM)
@יוסף-בן-שמעון כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
Sequlize זה סה"כ ממשק שממיר קוד לשאילתת SQL, הוא לא מחזיק שום דבר בזיכרון
@avi-rz כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
זכור לי שניסיתי פעם לעדכן את הmySql ישירות (לא דרך ה seqeulize) ולא קיבלתי את זה עד שהפעלתי שוב את השרת
כנראה השתמשתי באיזו הגדרה שם, יש שם אופציה של זיכרון.
-
@avi-rz כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
להגדיר אינדקסים בעמודות הנכונות
כמו מה? (חוץ מהמפתחות)
אינדקסים זה לא משהו שאפשר לדעת מבלי להכיר את המבנה המלא של ה db + רוב השאילתות המבוצעות בדרך כלל.
-
@dovid נאמר שמדובר בטבלה של פעילות, כל פעילות בתוכנה כגון כניסה, קבלת נתונים, הוספה, עדכון ומחיקה נרשמת (אולי גם כולל הפרטים המעודכנים, והישנים), וכמובן משתמש, ip, זמן, url וכדו'.
למשל ארצה לבדוק פעילות כניסה אם יש מאותו ip הרבה פעמים בזמן יחסית קצר והסטטוס נכשל.
או היסטוריה לשורה מסוימת לקבל את כל האינדיקציה עליה, מתי ומי הוסיף, שינה קיבל וכדו'. -
@avi-rz כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
@dovid נאמר שמדובר בטבלה של פעילות, כל פעילות בתוכנה כגון כניסה, קבלת נתונים, הוספה, עדכון ומחיקה נרשמת (אולי גם כולל הפרטים המעודכנים, והישנים), וכמובן משתמש, ip, זמן, url וכדו'.
למשל ארצה לבדוק פעילות כניסה אם יש מאותו ip הרבה פעמים בזמן יחסית קצר והסטטוס נכשל.
או היסטוריה לשורה מסוימת לקבל את כל האינדיקציה עליה, מתי ומי הוסיף, שינה קיבל וכדו'.קצת קשה להמליץ לך במצב בו לא יודעים ממש את התמונה המלאה,
כעיקרון תחשוב בכיוון הבא
לדוגמא יש לך טבלה שיש בו עמודה של ip ועוד עמודות שבהם יש זמן, סוג פעולה ועוד,
ואתה יודע שרוב השאילתות שלך יהיה למצוא את כל המידע לפי ip מסויים במקרה כזה תעשה אינדקס על העמודה ip כך הdb לא יצטרך לחפש עבורך בכל מליוני השורות שיהיה לך כי הוא יודע מיד באיזה שורות נמצאים המידע של ה ip שעליו אתה רוצה לקבל מידע,
לפעמים לא טוב לעשות אינדקס לדוגמא אם רוב השימוש הוא רק כתיבה וקריאה והכתיבה אמור להיות הכי מהר שאפשר וקריאה לא איפכת לנו אם יקח זמן לא נעשה אינדקס כי בכל כתיבה ה db צריך לטפל גם באינדקס
בקיצער ממש על רגל אחת... -
@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
לדוגמא יש לך טבלה שיש בו עמודה של ip ועוד עמודות שבהם יש זמן, סוג פעולה ועוד,
ואתה יודע שרוב השאילתות שלך יהיה למצוא את כל המידע לפי ip מסויים במקרה כזה תעשה אינדקס על העמודה ip כך הdb לא יצטרך לחפש עבורך בכל מליוני השורות שיהיה לך כי הוא יודע מיד באיזה שורות נמצאים המידע של ה ip שעליו אתה רוצה לקבל מידע,תודה רבה, ממש עזרת לי.
את העיקרון הזה אני כבר מכיר ועובד כמה שנים, שזה אומר בעצם "ID",
אבל מה שאני מבין ממך, אם למשל אני רוצה לקבל ID מסויים אבל רק אם זה פעיל, אז בעצם אני צריך לאנדקס גם העמודה של הפעיל?@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
לפעמים לא טוב לעשות אינדקס לדוגמא אם רוב השימוש הוא רק כתיבה וקריאה והכתיבה אמור להיות הכי מהר שאפשר וקריאה לא איפכת לנו אם יקח זמן לא נעשה אינדקס כי בכל כתיבה ה db צריך לטפל גם באינדקס
תודה, יעזור לי בעז"ה.
-
@avi-rz כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
את העיקרון הזה אני כבר מכיר ועובד כמה שנים, שזה אומר בעצם "ID",
אני לא בטוח שהבנת מה אמרתי, id בדרך כלל זה primary key שזה משהו אחר,
@avi-rz כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
אבל מה שאני מבין ממך, אם למשל אני רוצה לקבל ID מסויים אבל רק אם זה פעיל, אז בעצם אני צריך לאנדקס גם העמודה של הפעיל?
לעשות אינדקס על id זה לא נכון ולא ייתן לך כלום אתה מבין למה?
אם לא, תגיד אני ינסה להסביר יותר בהרחבה איך עובד אינדקסים עד כמה שאני הבנתי. -
@ivrtikshoret כתב בהדברים החשובים לריבוי שורות ב mySql | והאם seqelize אכן מתאים?:
תגיד אני ינסה להסביר יותר בהרחבה איך עובד אינדקסים עד כמה שאני הבנתי.
תודה על המענה המקצועי,
אשמח, לדעת או להפנות אותי, ניסיתי קצת לקרוא על העומק של אינדקסים, וכולם מדברים על מפתח (ID) בעיקר, עכשיו אני באמצע לעבור על זה נושאים מתקדמים ב MySQL: חלק ג׳ – מנועי אחסון, ומבנה האינדקסים דןןקא שם אני אוחז עכשיו בפיצול של ה Clustered Index, או Primary Index
אשמח לדעת את נקודת הליבה של האינדקס.
איך שהבנתי ביחס לשאילתה זה בwhere רגיל, רק הנפק"מ זה איך שהמנוע (הבלתי נראה) שולף את הנתונים, נכון?נ.ב. התעסקתי הרבה עם תוכנה ונתונים, אך בלי להבין לעומק את הנקודה הזאת, (וכמו"כ עוד כמה דברים, כמו ש @dovid העיר לי בעבר). - שוב, תודה לכל החברים ולמנהל היקר על הפורום המבורך!