הגבלה של מספר DataBase ב- MySQL

liron_m

New member
הגבלה של מספר DataBase ב- MySQL

רציתי לשאול האם יש הגבלה על מספר ה-DB שניתן לפתוח ב-MySQL? ואם לא, האם עדיף להקים מספר רב של DB עם נגיד 10 טבלאות, או לחילופין, להקים DB אחד עם הרבה טבלאות..?? אני אנסה להסביר שוב, מסד הנתונים שאני מנסה ליצור, כולל שלכל לקוח, יש כ-10 טבלאות. והלקוחות אינם קשורים אחד לשני. כך שבכל פעולה עובדים רק על לקוח בודד. אני שואל, האם כדאי ליצור DB נפרד לכל לקוח, או להשתמש ב-DB יחיד ובתוכו יהיו הרבה טבלאות של כל הלקוחות כולם. בתודה לירון
 
תמיד DB אחד.

אני לא מאמין שאני נותן עצות בפורום PHP, אבל זה באמת פשוט. תמיד עדיף DB אחד. והסיבה: מה אתה רוצה? לפתוח DB חדש עבור כל לקוח? ואם יצטרפו כל יום 10 לקוחות? זה טפשי. בכל טבלה רלונטית, הוסף עמודת קוד לקוח, וכך הנתונים שלך מכילים את כל הלקוחות יחד. רוצה לדעת נתונים של לקוח בודד? עשה שאילתה. בהצלחה.
 

liron_m

New member
אולי לא הסברתי את עצמי נכון

העניין הוא, שיהיו לכל היותר כ- 100 לקוחות. ולכל לקוח יש כ- 10 טבלאות. בכל פעם שנכנסים לאתר, עובדים על לקוח ספציפי. כשמסיימים איתו עוברים ללקוח אחר. וגם ככה מספר האנשים שעובדים עם האתר הוא כ- 10 אנשים. (האתר לא אמור להיות חופשי בכל הרשת). הסיבה לשאלה שלי, היא שרוב הקוד כתוב עבור לקוח בודד, ועל מנת ליצור עוד ועוד לקוחות, העניין של יצירת DB חדש, עם בדיוק אותם הטבלאות נראה לי הרבה יותר פרקטי. וכאשר רוצים לעבוד עם לקוח מסוים (לעדכן את הנתונים שלו) פשוט בוחרים את ה-DB שלו. אתה לא חושב? תודה לירון
 

bzini

New member
זה לא כל כך משנה

מנסיון, חשיבות שמירה על DB בודד קיימת רק במקרה שהאלטרנטיבה היא להתחבר לשני DB מאותו סקריפט. DB גדול אחד יחזיר תוצאות הרבה! יותר מהר מאשר להתחבר ל DB אחד לקבל תוצאות שאילתא ואז להתחבר ל DB שני ולקבל תוצאות משאילתא אחרת. הזמן שלוקח להתחבר ל DB הוא ברוב המקרים הרבה יותר ארוך מהזמן שלוקח להריץ שאילתא. במקרה שלך, מכיוון שאתה עובד כל פעם עם לקוח בודד אני חושב שאין חשיבות לבחירה בין DB גדול אחד או DB לכל לקוח. אם אתה אומר שהקוד כבר כתוב ללקוח בודד, אני הייתי בוחר באופציה של DB נפרד לכל לקוח ושינוי שם ה DB בזמן הקריאה לפונקציית ההתחברות ל DB, ללא כל שינוי אחר בקוד. אני לא יכול לעזור לך לגבי השאלה בנוגע למגבלות MYSQL ומס' DB, את זה תאלץ לחפש בדקומנטציה. נקודה אחרונה, יותר קשה לנהל 10 DB על שרת מאשר DB איד גדול, נקודה למחשבה...
 

liron_m

New member
המון תודה...

ראשית אני רוצה להודות על התשובה. אולם אתה מדבר על ניהול של DB רבים, על מה בדיוק הכוונה? איזה ניהול יש לקיים, פרט לגיבוי שוטף של הנתונים ? תודה לירון
 

bzini

New member
דוגמא קטנה

בא נגיד שיש לך שדה שהגבלת את הגודל שלו ל 32B. בעוד שנה תגיע למסקנה שאתה צריך 64B. עכשיו צריך ללכת לכל DB (כפול 100 לי הגדרתך) ולשנות את גודל השדה. אם היה DB אחד גדול שינוי קטן אחד היה פותר את הבעיה. כנ"ל לגבי מחיקות, הוספת טבלאות וכו'. ואל תגיד לי זה לא יקרה כי מנסיון זה יקרה במוקדם או במאוחר.
 

liron_m

New member
מה זאת אומרת הגבלת גודל?

האם אתה מתכוון לסוג המשתנה של השדה? מכל מקרה, גם אם אני משתמש ב-DB יחיד אז אצטרך לשנות את סוג המשתנים בטבלה בכל טבלה וטבלה, גם אם הם כולן באותו DB. דבר נוסף, שאני חושב עליו עכשיו, שתמיד ניתן ליצור סקריפט שירוץ על כל ה-DB וישנה את סוג המשתנה. אתה לא חושב? לירון
 

bzini

New member
לא ממש

הכוונה היא שאם הגדרת שדה מסוג char צריך להגדיר לו גם גודל (מס' תווים) מקסימלי. תמיד אפשר להגדיר את המקסימום (אני לא בטוח מה המספר ב MYSQL אבל בד"כ זה 255) אבל זה לא ממש חכם. אם בעתיד תרצה לשנות את גודל השדה תהיה לך עבודה קשה. לגבי סקריפט קיימת אפשרות אבל גם סקריפט צריך לכתוב ואם היה לך DB בודד היית פותר את בעיית הגודל השתי שניות לכל היותר. בכל מקרה זב רק עוד שיקול שצריך לקחת בחשבון ואני לא בטוח שזהו שיקול מרכזי. תאימות הקוד של המערכת הקיימת לארכיטקטורה הנבחרת חשובה לדעתי הרבה יותר. אגב, עוד סיבה לבחור ב DB נפרדים היא אבטחה. לכל DB ניתן להגדיר אבטחה שונה (שם משתמש, סיסמא, הרשאות וכו') מה שמשפר את רמת האבטחה של המערכת. אבל שוב זה שיקול צדדי ובכל זאת משהו לחשוב עליו.
 

Nomaed Dominus

New member
אני תומך בשיטה של ה-DB היחיד

יש 10 טבלאות סה"כ + 1 טבלה של לקוחות (אם עדיין לא ספרת אותה). עכשיו, לכל טבלה, תוסיף שדה שהוא גם אינדקס. משהו כמו user_id. ובכל השאילתות פשוט צריך להוסיף ל-WHERE משהו כמו
`user_id`='{$uid}'​
 
למעלה