מסדי נתונים - מה זה אומר ומה עדיף לי

התחבר

מסדי נתונים - מה זה אומר ומה עדיף לי

מסדי נתונים - מה זה אומר ומה עדיף לי

מסדי נתונים - 

בטח לא פעם ולא פעמיים שמעתם את המונח הזה מסד נתונים , כמה אתם יודעים עליו , איזה סוגים קיימים כיום , מה התפתחויות בתחום עד כה ומה הכי מתאים עבורכם , אני ינסה לעשות לכם סקירה קטנה על הנושא בתקווה לשפוף קצת אור , חשוב להבין מסדי נתונים זה נושא עצום , ישנם לפחות עשרה סוגים נפוצים מאוד , החלקוה הגסה ביניהם היא דיי פשוטה מסד נתונים מבוסס SQL ומס נתונים מבוסס NOSQL - 

MYSQL - כיום תחת המטריה של MARIADB - 

מסד זה הינו המסד הכי נפוץ בעולם ישנם MYSQL וישנו PROGRESIVESQL , לעל אחד יש יתרונות שאני ימנה חלק מהם בדגש על MYSQL ההבדל ביניהם הינו קשור לביצועים מבנה טבלאות ואופן הריצה על האינדקסים - 
MYSQL הינו הכי נפוץ הרוב הגס של שרתים ברחבי העולם מבוססים עליו כמעט בכולם הוא מותקן הוא מתחלק בתוכו ל2 משפחות עיקריות משפחה אחת שייכת ל LINUX שזה UBUNTO, CENTOS , REDHAT , DEBIAN ועוד לא מעט הפצות של משפחת לינוקס ומצד שני יש את משפחת MICROSOFT שאצלה הוא נקרא כבר MSSQL , שניהם מסתמשים באותה שפה SQL אבל ישנם הבדלים בפקודות הזמינות בכל שפה ושפה , הרוב הגס של העולם משתמש בקוד פתוח שזה MYSQL ומי שמחזיק שירותים על גבי שרתי מיקרוסופט יכול גם להשתמש בMYSQL או לבחור במסד עם רישון סגור שזה MSSQL , משפחת מיקרוסופט מציעה המון פתרונות חלקם גם טובים מאוד אך רוב הפתרונות שהיא מציעה הינם בקוד סגור ודורשים קניית רשיונות מידי שנה או לפחות חידושם של רשיונות שכאלו , במשפחת מיקרוסופט הכל הינו בתשלום יש לקנות רישון לשרת , רשיון למגנון רשת IIS אשר עובד על פני השרת וכמובן במידה ותחברו רישון ל MSSQL או רישון פתוח אשר מגביל אותם בביצועים נפח וכל מיני הגבלות על מנת שתקנו את הרישון המלא. חשוב להבין חייבים רישיונות לפחות לשרת ול IIS במשפחת מיקרוסופט ולכן ההאחזקה שלהם לרוב יקרה יותר הן בשרתים מאוחסנים , הן בשירות ועוד , הבעיה היא שמבחינת ביצועים ברוב המקרים שרתי לינוקס ישאירו אבק לשרתי מיקרוסופט, אני ירחיב בהמשך מה רלוונטי יותר או פחות סביב מיקרוסופט ובכלל למה היא כל כך נפוצה בארצינו - ישראל הקטנה, אבל קודם כל נתחיל עם האופן סורס MYSQL - 

אז ככה מסד נתונים התחיל אי שם כבר בשנות ה60 הרעיון היה לפני שצריך וניתן לשמור את המידע על גבי טקסטים שונים וכל שורה באותו מסמך טקסט מציינת רשומה , הבעיה היתה שבמידה וכל הנתונים נמצאים בתוך קובץ טקסט איך ניגשים אליהם מספיק מהר בכיד שכל התממשקות תיהיה מהירה ככל האפשר , ואז נולדו המסדים , אחת החלוצות בתחום אשר מחזיקה את שני הסוגים של המסדים וגם יש להם מעיין שפה משם עצמה הינה אורקל - ORACLE , היא גם המפתחת הרישמתי של JAVA שזו שפת תיכנות עלית ויש לה עשרות מוצרים בתחום המסדי נתונים , בדומה למיקרוספוט הדבר היחידי החינם באורקל זה הטקסט שאני כותב פה , כל השאר יעלו לכם כסף וגם לא מעט , אורקל נחשבת לטובה בתחומה ובעיקר מיועדת לחברות ענק ולמסדים מאוד מואד גדולים ולכן משנות ה60 ועד היום ניתן לאמר שבשוק מסדי הנתונים עם רישיון סגור היא הבולטת ביותר, נולדמו גם מקצועות אשר מאוד מאופיינים עם חברת אורקל כגון DB MASTER ועוד כל מיני טיטלים למיניהם אשר אותם תוכלו ללמוד בבתי הספר השונים , במכללות וכו , ידע גדול לא תירכשו אבל תעודה אין ספק שתקבלו, במקביל אליה היתה חברה קטנה בשם SUN אשר החליטה להנגיש את נושא המסדים לכולם ניתן לאמר שזה תיחלתו של האופן סורס כמו שאנו מכירים אותו כיום , משם MYSQL עברה גילגולים רבים אך העיקרונות שלה נשארו דיי דומים , מדובר במסד אשר מוגדר בתצורה הבאה - 

מסד נתונים נאמר בשם DATA - מתחתיו טבלאות נאמר בשם Users - ובתוך טבלת Users ,תוכלו למצוא רשומות , כל רשומה בנויה מתאים בסנגון הבא - 

תא ID | תא FULLNAME | תא תאריך וכן הלאה 
ישנם כל מיני הגבלות אבל בשימוש נכון כנראה שלא תגיעו להגבלות הללו.
אז בעצם מסד נתונים לקח קובץ טקסט אשר היה מחזיק המון שרותו כל שורה הופרדה באנטר או \N המחשב היה צריך לעבור שורה שורה בכדי למצוא את מבוקשו , אותו עיקרון הפך לטבלה ובתוך הטבלה רשומות ובתוך הרשומות תאים , ככה שניתן לגשת למידע בצורה הרבה יותר נוחה וכמובן מהירה , אין צורך לקרוא הכל בשביל מספר פרטים וכדומה , אך מן הסתם המסד גודל ככל שעובר הזמן ופתאום לאותה טבלה אשר התחילה במספר רושמות יש עכשיו מאות רשומות ואז החיפוש הפך לאיטי ואז נולדו האינדקסים , בעצם טבלאות צד קטנות מאוד אשר מחזיקות בעצם חלקיק מהנתונים אשר מפנות לרשומה שאותה אנו נחפש ובכך  טבלה במכילה מאות אלפי רשומות בעזרת אינדקסים עדיין יכולה להיות קלה ומהירה לחיפוש, כל שדרה בתוך הרשומה רצוי ואך לפעמים חייב להיות שדה מסוג מסויים - סוג השדות הבולטים ביותר - הינם - 

שדה LONG או VAR אשר נועד בעיקרון לטקסט
שדה INT או THINYINT או BIGINT אשר נועד למספרים חיוביים 
שדה BINARY - אשר נועד ל 0 או 1
שדה DATE - אשר נועד לתאירכים בתצורת מסד
אלו הם הבסיסיים ישנם עוד כמה עשרות סוגים לטובת שימושים יותר ספיציפים ומיוחדים

כמו כן גם המסד עצמו וגם הטבלה עצמה צריכה להכי את הערכים סביב פורמט כתיבה אשר רלוונטי לה , ישנם לא מעט אך הנפוץ ביניהם הינו UTF8 GENERAL הינו מה שמוגדר לרוב.

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

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

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

אך כמו שאמרתי למעלה הערך אותו יש לשנות הינו - 

SQL_MODE - צריך להיות על ריק או "" במידה ויאן לכם הגדרה מאוד מדוייקת של סוגי השדות אליהם אתם כותבים במסד 

* MARIADB הוסיפה בדיפולט מניעה גורפת של הנושא ולכן במידה והשרת עולה עקב קריסה או משהו דומה סביר להניח שלא תוכלו לכתוב למסד עקב זאת.