מסד נתונים: mongoDb או MySql או אחר
-
בס"ד
המדריכים בד"כ משתמשים במונגו זה נראה מצד הקלילות שבו, בפרט עם השימוש ב mongooes שהופך אותו ליותר נגיש ועושה קצת סדר במבנה הטבלאות (מצד החסרון של מונגו, בסדר העמודות בטבלאות).
האם באמת נכון שלפעמים יכול להיות מהיר יותר מsql פי כמה, בגלל שזה חוסך את ההמרה של הג'סונים שצריך לעשות בSQL בגלל שכולו מובנה על ג'סון.
ומצד שני עושה רושם שיש עדיפות למסד נתונים של SQL, מעניין מה הוא? ואם באמת חשוב?בינתיים אני השתמשתי, בphpMyAdmin אבל פתאום אני חושב, שזה מאבד לי חלק מהמהירות של נוד, כי אם אני בכל בקשה למסד נתונים ממשיך את הקוד בcallback זאת אומרת שהקוד תלוי הרבה בPHP,
אולי באמת עדיף להשתמש בSql אחר, כגון Sqlite,
אשמח לישמוע עוד צדדים בנושא ובעיקר הכרעות - עדיף מנסיון, ולא רק תיאורטי. -
@avi-rz השאלה שלך כוללת הנחות שגויות.
MySql אינו קשור או תלוי לphpMyAdmin.
(phpMyAdmin זה סה"כ קליינט - כלי חמוד לצפות בנתונים, ולהריץ שאילתות וכדומה).
MySql לא מבוסס על PHP, והוא גם מודרני ומהיר (לא פחות מנוד) עד כמה שזה מתאפשר.mongo אכן יותר מהר בלי קשר לjson מסיבה פשוטה: אם אתה בתור באיזה קיוסק ואתה מבקש את החומרים של טוסט תקבל אותם מיידית. אך אם תבקש טוסט תתבקש להמתין.
בעוד mysql בנוי באופן שהרבה לוגיקה של אופי הנתונים באחריותו, ולעומת זאת מונגו בבסיסו לא מתערב בכך (בשניהם זה ממש לא מדוייק, בהתאם לשימושים ולשכלולים שיש בהם כיום לשני הצדדים - מונגו היום יכול היום להיות מאוד מתערב אבל עדיין פחות מmysql. לעומת זאת mysql לא יכול להיות "גולמי", הוא בנוי להיות "מבוגר אחראי" ויש לזה מחיר).
אם אחרי שהנתונים אצלך ביד או לפני שאתה מכניס אותם, אתה עושה כל מיני בדיקות והתאמות וותיקופים, אתה מוצא את עצמך עושה את העבודה שmysql עושה. לפעמים זה שווה, בגלל שיש חלק משמעותי של פעולות בהם לא נדרשת שום לוגיקה, אלא רק שליפה וכדומה.sqlLite זה מסד נתונים מוטמע, כלומר במקום שיש את האפליקציה שלך ולצידה תוכנה אחרת של מונגו או של mysql אז האפליקציה שלך עצמה אחראית לגמרי על ניהול הנתונים (ספריה של sqlite דואגת לזה, אבל זה בעצם התהליך שלך מריץ הכל).
יש לזה רק חסרונות מבחינת ביצועים, המעלה של זה היא ניידות ועצמאיות (לא צריך להגדיר כלום בשרת אליו אתה מעביר את האפליקציה). זה נח מאוד לאפליקציות רזות ו/או שצריכות לפעול על סביבה של מחשבים לא "שרתיים". לשם דוגמה תוכנת דסקטופ שמפיצים והיא צריכה מסד משתמשת במסד הזה - כמו גוגל כרום. -
אני רוצה לתקן את הרושם של התשובה שלי,
נשמע מדבריי שכל הנושא זה שהnoSql לא עושה עבודה שהmysql כן עושה ולכן זה עובר לאחריות המפתח.
אז זה לא רק עניין של אחריות, כי יש דברים שרק המסד יכול לעשות בצורה טובה (כי הוא מחליט איך לאחסן פיזית על הדיסק). למשל join או שליפה לפי אינדקס, זה דברים שבmysql יעבדו באופן יעיל יותר, גם אם המפתח של האפליקציה מוכשר מאוד בכתיבת קוד יעיל.@nigun בלי "אם כבר". פתח נושא מפואר לצורך השאלה הזאת הלא פחות חשובה.
-
@dovid
תודה רבה, על התשובה המפורטת.@dovid אמר במסד נתונים: mongoDb או MySql או אחר:
MySql לא מבוסס על PHP,
חשבתי באמת שהפניות לmySql נשלחות לשרת הPHP והוא מכניס אותם,
אכן נודעתי לזה שהפעלתי רק את הmySql ולא את האפצ'י, וזה עבד - תודה.@dovid אמר במסד נתונים: mongoDb או MySql או אחר:
אם אחרי שהנתונים אצלך ביד או לפני שאתה מכניס אותם, אתה עושה כל מיני בדיקות והתאמות וותיקופים, אתה מוצא את עצמך עושה את העבודה שmysql עושה.
כלפי מה הדברים אמורים? האם הSchemas לא אמורה למלאות את החסר הזה,
ובכלל גם במונגו וגם בmySql יש את הSchemas במונגו ואת הSequelize בmySql
שבעצם מה שנשאר זה לבנות את הקלאסים,עם הTypes של כל שדה, והם כבר מייצרים את הטבלאות,@dovid אמר במסד נתונים: mongoDb או MySql או אחר:
אז זה לא רק עניין של אחריות, כי יש דברים שרק המסד יכול לעשות בצורה טובה (כי הוא מחליט איך לאחסן פיזית על הדיסק). למשל join או שליפה לפי אינדקס, זה דברים שבmysql יעבדו באופן יעיל יותר,
אז בעצם ההבדל הוא שעובדים עם מסד נתונים של SQL שאז אכן זוכים לכל המעלות הנ"ל, ובאיזה סוג זה עדיין משנה? (קריטי /לא קריטי /בכלל לא /קשור לצרכים)?
-
@avi-rz
על קצה המזלג,
תתאר לך כל מסד נתונים הכי פשוט,של נניח רשימת לקוחות.
לכל לקוח יש מאפיינים כגון, כתובת, סוג מוצרים מועדפים. מוצרים שרכש בעבר וכו'.בעולם של NoSql, המבנה של מערכת כזאת היא (באופן עקרוני) שלכל לקוח יש אובייקט גדול שמכיל את כל הפרטים הנ"ל.
בעולם של SQL יש שימוש קבוע בטבלאות חיבורים.
כך שלא נכתוב אצל הלקוח מה שם העיר שהוא גר בה, אלא מה המזהה של העיר בטבלת הערים.
וכך ברשימת המוצרים וכו.
יש שימוש נרחב בקשרי many to many ו many to one
בעולם של noSql, באופן עקרוני זה לא אמור לעבוד בצורה של join-ים.יש על זה המון חומר ברשת.