שאיבת נתונים מד"ב mysql ישירות לעומת מזכרון בתהליך nodejs רץ
-
יש לי בממשק הניהול ללקוחות שלי (php-yii2) דף של רשימת תורים, שבו עלי להעביר לjs של הדף גם מערך של המנויים שלו, ומפעם לפעם אם יש שינויים והוספות אני אמור לרענן אותו.
וזאת מלבד הנתונים העיקריים של הדף, בו מוצג רשימת תורים.
יש לי 2 דרכים להעביר לphp היוצר את הjs את המידע, א. ע"י שליפת הנתונים מטבלת המנויים (חיבור ל mysql + פעולת סינון על עמודה פרוייקט-יש עליו אינדקס), ב. גישה לתהליך nodejs פנימי ע"י גישה לכתובת http://127.0.0.1:3030/getContacts והתהליך יחזיר מערך מוכן של הנתונים (בתהליך שמור לי בזכרון בלאו הכי כל טבלת המנויים בתוך אובייקט המכיל תתי איבייקטים על פי שם הפרוייקט, דהיינו אני שולף ס'ה res.send(myData.Contacts[projectName]).
אציין שהרבה מהפעולות של המערכת הנ'ל מבוצעות בעיקר על ידי הנוד, אך רק התצוגה של הממשק שבדר'כ שולף הכל ישירות מהד"ב בנוי בphp.
השאלה שלי מבחינת צריכת cpu ומבחינת איכות ומהירות, האם יש הבדל או בעיות העלולות לצוץ..
תודה -
זה תלוי בהרבה פרטים, אם הכל כבר ממויין והסינון גם מתבצע שמה אז זה אמור להיות יותר מהר כי הmysql אין לו את הפריוילגיה לשמור הכל בזיכרון (אם היה לו, הוא לבטח היה מהר יותר כשיש עיבוד/מיון).
נ.ב. אציין, וזה נקודה שלא דחוף להתייחס אליה אבל כדאי לדעת אותה, שהצורה הזאת שכל המערכת על הזיכרון של נוד היא לא מומלצת, כי פשוט זה לא התפקיד של נוד וממילא הוא מבצע אותו פחות טוב. אמנם לעניין מהירות זה ינצח כמעט תמיד (מדובר על מהירות שלא משמעותית כשבכל מקרה עד ללקוח יש עשרות מיליסקונדים - ממילא הוא יחכה כמו ילד טוב), אבל בהיבט כולל, כמו בדיוק השאלה שלך הזאת או כמו השיקול של הפעלה מחדש של האפליקציה, והשיקול של צריכת זיכרון מול התועלת, השיקול של המקביליות - יכולת לכמה אפליקציות לעבוד בו זמנית גם לכתוב לנתונים כולל האפשרות להפעיל את הנוד בכמה מופעים בשביל ניצול העיבוד המקבילי של המחשב, ועוד, עדיף לעבוד עם מסד נתונים ייעודי כמו redis שבעצם גם עובד ממש על הזיכרון והוא מהר מאוד.
בנוגע לכאן אם תשתמש עם redis תרויח שתוכל מPHP להתחבר לredis ולא לעבור דרך http פנימי מסורבל. -
@dovid אמר בשאיבת נתונים מד"ב mysql ישירות לעומת מזכרון בתהליך nodejs רץ:
הצורה הזאת שכל המערכת על הזיכרון של נוד היא לא מומלצת
תודה על כל התוספת, נצטרך בעזה"י עם הזמן להגיע לזה.
בכל מקרה עיקר הסיבה שאני על נוד ואני שומר נתונים בזיכרון היא בגלל צורת העבודה שלי עם המערכות בימות המשיח, שם לכל נתון יש לי קריאה חדשה בhttp ואבוי היה לי אם הייתי שולף לכל קריאה מחדש את כל הנתונים, יכולים להיות לי בדקה כמה מאות בקשות מיותרות לשליפת נתונים מהדאטהביס. (זה היה פעם, והcpu היה תמיד גבוה, לעומת המעבר לנוד שמאז הcpu עבור mysql עומד ברוב היום על אחוזים בודדים 2-5/10)
אני מתפלא אם redis אמור לעזור לי בזה.