פתיחת מסד נתונים בכל קריאה
-
אני בונה שרת בGO עם מסד נתונים MYSQL (עם הרבה קריאות בו זמנית)
נראה לי שיש לי שתי אפשרויות- לפתוח את המסד נתונים כשהשרת קם ולהעביר את המשתנה לתוך כל הפונקציות
- לפתוח את המסד נתונים בכל קריאה בתוך כל פונקציה
מה עדיף?
האם יש בעיה להשאיר את המסד נתנוים פתוח כל הזמן ולסגור אותו רק כשהשרת נסגר?
-
@nigun ההמלצה היא ליצור מאגר חיבורים ולהשתמש בו, חפש משהו כמו pool connection
-
-
@יוסף-בן-שמעון
אני יודע שאני יכול לעשות את זה (לכן שאלתי)
השאלה היא מה ההשלכות? -
בכל הכלים המודרניים שיש היום, יצירת קונקשיים חדש עושה שימוש בconnection pull שזה אוסף של קונקשנים מנוהל.
שימוש באותו חיבור למסד, עושה בעיות במקביליות ובטרנזקציות נדמה לי ועוד כמה דברים שאינני מבין בהם. אני לא מבין בהם כי אין צורך, אני לא ממציא את הגלגל ואם אומרים לי ליצור חיבור כל פעם (עם מנהל שמאחורי הקלעים ממחזר אם צריך) אני מסודר.
תשובה יפה בנושא הזה, במקרה שם זה על דוטנט: https://softwareengineering.stackexchange.com/a/398790/112215 -
-
@dovid חושבני שלא זו הכוונה, כשאתה פותח מאגר חיבורים מנוהל, אתה לא אמור לסגור אותו אחרי כל שאילתה, המאגר מנהל את יצירת החיבור וסגירתו.
אם הוא יסגור כל פעם את המאגר זה יצור עומס מיותר לחלוטין
לפי ההוראות בגיטהאב, וכך גם בלינק שהוא הביא מסטאק, צריך להגדיר משתנה גלובלי שמקבל את הערך מ sql.Open וזה מחזיק את המאגר המנוהל, מכאן ואילך הוא צריך לבקש מהמאגר חיבור פנוי ולתשאל אותו על ידי db.QueryRow וזהו -
לא ביקשתי שייצור מאגר, אם ככה היה נשמע זה ראיה טובה לזה שאני לא מכיר את go.
מה שאמרתי שצריך להיות ככה
--פתיחת חיבור
----תשאול
--סגירת חיבור
כל מקום ומקום שבשימוש. לגבי הבזבוז שבסגירה יש את ניהול הpool שאמרתי בבטחון שהוא לבטח קיים בgo (שזה אומר שהחיבור לא נסגר ומתי שפותחים חיבור חדש בעצם ייעשה בו שימוש חוזר).
אני לא יודע איך בגו פותחים חיבור, ייתכן שזה אוטומטי כפי שאתה אומר אני לא יודע.
ממילא אם השאלה של @nigun זה מה לעשות תכלס אני יענה לעבור לC# כי אני לא מכיר go. -
@dovid אכן, עכשיו אני מבין שנכנסתי לסוגיא בראש של נוד, אם אתה עושה close אתה הורג את המאגר, צחוק הגורל שדוטנט השפה הכי עילית שרק עושים פווו ויש לך אפליקציה, דוקא הם לא טרחו להסתיר ממך את המימוש של סגירת חיבור והחזרתו למאגר, ואילו בנוד ובגו שלכאורה הרבה יותר "ברזליות", המימוש הזה מוסתר מעיני המפתח
-
@יוסף-בן-שמעון
אז מה אני אמור לעשות?- ליצור משתנה גלובלי
2.לבצע פתיחה רק פעם אחת
- ליצור משתנה גלובלי