דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. פתיחת מסד נתונים בכל קריאה

פתיחת מסד נתונים בכל קריאה

מתוזמן נעוץ נעול הועבר תכנות
27 פוסטים 4 כותבים 351 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN nigun

    @יוסף-בן-שמעון
    מה אני עושה עם זה?
    https://github.com/go-sql-driver/mysql#connection-pool-and-timeouts

    י מנותק
    י מנותק
    יוסף בן שמעון
    כתב ב נערך לאחרונה על ידי
    #6

    @nigun אם אני מבין נכון כתוב שם שזו ברירת המחדל של הדריבר והאו מנהל את המאגר, אתה רק מקצה משתנה גלובלי שמקבל את הערך מ sql.Open וזה מחזיק את המאגר

    nigunN תגובה 1 תגובה אחרונה
    1
    • י יוסף בן שמעון

      @nigun אם אני מבין נכון כתוב שם שזו ברירת המחדל של הדריבר והאו מנהל את המאגר, אתה רק מקצה משתנה גלובלי שמקבל את הערך מ sql.Open וזה מחזיק את המאגר

      nigunN מנותק
      nigunN מנותק
      nigun
      כתב ב נערך לאחרונה על ידי
      #7

      @יוסף-בן-שמעון
      אני יודע שאני יכול לעשות את זה (לכן שאלתי)
      השאלה היא מה ההשלכות?

      מייל: nigun@duck.com

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid
        ניהול
        כתב ב נערך לאחרונה על ידי
        #8

        בכל הכלים המודרניים שיש היום, יצירת קונקשיים חדש עושה שימוש בconnection pull שזה אוסף של קונקשנים מנוהל.

        שימוש באותו חיבור למסד, עושה בעיות במקביליות ובטרנזקציות נדמה לי ועוד כמה דברים שאינני מבין בהם. אני לא מבין בהם כי אין צורך, אני לא ממציא את הגלגל ואם אומרים לי ליצור חיבור כל פעם (עם מנהל שמאחורי הקלעים ממחזר אם צריך) אני מסודר.
        תשובה יפה בנושא הזה, במקרה שם זה על דוטנט: https://softwareengineering.stackexchange.com/a/398790/112215

        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
        nigunN 2 תגובות תגובה אחרונה
        4
        • dovidD dovid

          בכל הכלים המודרניים שיש היום, יצירת קונקשיים חדש עושה שימוש בconnection pull שזה אוסף של קונקשנים מנוהל.

          שימוש באותו חיבור למסד, עושה בעיות במקביליות ובטרנזקציות נדמה לי ועוד כמה דברים שאינני מבין בהם. אני לא מבין בהם כי אין צורך, אני לא ממציא את הגלגל ואם אומרים לי ליצור חיבור כל פעם (עם מנהל שמאחורי הקלעים ממחזר אם צריך) אני מסודר.
          תשובה יפה בנושא הזה, במקרה שם זה על דוטנט: https://softwareengineering.stackexchange.com/a/398790/112215

          nigunN מנותק
          nigunN מנותק
          nigun
          כתב ב נערך לאחרונה על ידי
          #9

          @dovid
          זהו שלא היה ברור לי האם חייבים לעשות חיבור בכל פעם
          אבל אם זה מנוהל מאחורי הקלעים אז מצויין

          מייל: nigun@duck.com

          תגובה 1 תגובה אחרונה
          0
          • dovidD dovid

            בכל הכלים המודרניים שיש היום, יצירת קונקשיים חדש עושה שימוש בconnection pull שזה אוסף של קונקשנים מנוהל.

            שימוש באותו חיבור למסד, עושה בעיות במקביליות ובטרנזקציות נדמה לי ועוד כמה דברים שאינני מבין בהם. אני לא מבין בהם כי אין צורך, אני לא ממציא את הגלגל ואם אומרים לי ליצור חיבור כל פעם (עם מנהל שמאחורי הקלעים ממחזר אם צריך) אני מסודר.
            תשובה יפה בנושא הזה, במקרה שם זה על דוטנט: https://softwareengineering.stackexchange.com/a/398790/112215

            nigunN מנותק
            nigunN מנותק
            nigun
            כתב ב נערך לאחרונה על ידי
            #10

            @dovid
            פה יש דיון ארוך בנושא
            אבל לא הבנתי את המסקנא כ"כ
            מישהו יכול לסכם את הדיון שם.

            מייל: nigun@duck.com

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי
              #11

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

              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              nigunN תגובה 1 תגובה אחרונה
              1
              • dovidD dovid

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

                nigunN מנותק
                nigunN מנותק
                nigun
                כתב ב נערך לאחרונה על ידי nigun
                #12

                @dovid
                נראה לי שאני מפספס משהו לפי מה שאני מבין מכאן ומכאן
                כשאני קורא לOPEN
                זה לא פותח את המסד נתונים אלא פותח את הבריכה (pool בלע"ז)
                והם מביאים דוגמא איך להקים שרת HTTP עם פתיחה אחת
                כנראה שאני מפספס משהו
                אבל עדיין לא הבנתי מה אני אמור לעשות.
                נ.ב. סליחה אם אני מטרטר אותך לשווא

                מייל: nigun@duck.com

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid
                  ניהול
                  כתב ב נערך לאחרונה על ידי dovid
                  #13

                  תפתח ותסגור כמו ילד טוב את המסד כל פעם וכל מקום שאתה משתמש בו.
                  בלי לחשוב/לדעת/להבין מה קורה (בינתיים)...
                  האם אתה מתקשה לעשות זאת? או שמשהו לא עובד כשורה?

                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                  nigunN תגובה 1 תגובה אחרונה
                  0
                  • dovidD dovid

                    תפתח ותסגור כמו ילד טוב את המסד כל פעם וכל מקום שאתה משתמש בו.
                    בלי לחשוב/לדעת/להבין מה קורה (בינתיים)...
                    האם אתה מתקשה לעשות זאת? או שמשהו לא עובד כשורה?

                    nigunN מנותק
                    nigunN מנותק
                    nigun
                    כתב ב נערך לאחרונה על ידי
                    #14

                    @dovid
                    לא
                    אמנם זה דרש פקודת החלף קטנה, אבל זה לא נורא
                    אבל השאלה שלי מה נכון לעשות.
                    (למה שאני יגלה את עמצי תקוע עוד שנה בגלל שיש מידי הרבה חיבורים תקועים)

                    מייל: nigun@duck.com

                    dovidD תגובה 1 תגובה אחרונה
                    0
                    • nigunN nigun

                      @dovid
                      לא
                      אמנם זה דרש פקודת החלף קטנה, אבל זה לא נורא
                      אבל השאלה שלי מה נכון לעשות.
                      (למה שאני יגלה את עמצי תקוע עוד שנה בגלל שיש מידי הרבה חיבורים תקועים)

                      dovidD מנותק
                      dovidD מנותק
                      dovid
                      ניהול
                      כתב ב נערך לאחרונה על ידי dovid
                      #15

                      @nigun אז אני יכתוב ליתר בטחון שוב: זה בדיוק מה שהכי נכון לעשות.
                      אתה יכול ללכת בשמחה שאת הבעיה הזו פתרת בצורה הטובה ביותר! נקסט, לבעיות אחרות.

                      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                      י תגובה 1 תגובה אחרונה
                      2
                      • dovidD dovid

                        @nigun אז אני יכתוב ליתר בטחון שוב: זה בדיוק מה שהכי נכון לעשות.
                        אתה יכול ללכת בשמחה שאת הבעיה הזו פתרת בצורה הטובה ביותר! נקסט, לבעיות אחרות.

                        י מנותק
                        י מנותק
                        יוסף בן שמעון
                        כתב ב נערך לאחרונה על ידי
                        #16

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

                        תגובה 1 תגובה אחרונה
                        1
                        • dovidD מנותק
                          dovidD מנותק
                          dovid
                          ניהול
                          כתב ב נערך לאחרונה על ידי
                          #17

                          לא ביקשתי שייצור מאגר, אם ככה היה נשמע זה ראיה טובה לזה שאני לא מכיר את go.
                          מה שאמרתי שצריך להיות ככה
                          --פתיחת חיבור
                          ----תשאול
                          --סגירת חיבור
                          כל מקום ומקום שבשימוש. לגבי הבזבוז שבסגירה יש את ניהול הpool שאמרתי בבטחון שהוא לבטח קיים בgo (שזה אומר שהחיבור לא נסגר ומתי שפותחים חיבור חדש בעצם ייעשה בו שימוש חוזר).
                          אני לא יודע איך בגו פותחים חיבור, ייתכן שזה אוטומטי כפי שאתה אומר אני לא יודע.
                          ממילא אם השאלה של @nigun זה מה לעשות תכלס אני יענה לעבור לC# 🙂 כי אני לא מכיר go.

                          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                          י תגובה 1 תגובה אחרונה
                          2
                          • dovidD dovid

                            לא ביקשתי שייצור מאגר, אם ככה היה נשמע זה ראיה טובה לזה שאני לא מכיר את go.
                            מה שאמרתי שצריך להיות ככה
                            --פתיחת חיבור
                            ----תשאול
                            --סגירת חיבור
                            כל מקום ומקום שבשימוש. לגבי הבזבוז שבסגירה יש את ניהול הpool שאמרתי בבטחון שהוא לבטח קיים בgo (שזה אומר שהחיבור לא נסגר ומתי שפותחים חיבור חדש בעצם ייעשה בו שימוש חוזר).
                            אני לא יודע איך בגו פותחים חיבור, ייתכן שזה אוטומטי כפי שאתה אומר אני לא יודע.
                            ממילא אם השאלה של @nigun זה מה לעשות תכלס אני יענה לעבור לC# 🙂 כי אני לא מכיר go.

                            י מנותק
                            י מנותק
                            יוסף בן שמעון
                            כתב ב נערך לאחרונה על ידי
                            #18

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

                            nigunN תגובה 1 תגובה אחרונה
                            1
                            • י יוסף בן שמעון

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

                              nigunN מנותק
                              nigunN מנותק
                              nigun
                              כתב ב נערך לאחרונה על ידי
                              #19

                              @יוסף-בן-שמעון
                              אז מה אני אמור לעשות?

                              1. ליצור משתנה גלובלי
                                2.לבצע פתיחה רק פעם אחת

                              מייל: nigun@duck.com

                              dovidD תגובה 1 תגובה אחרונה
                              0
                              • nigunN nigun

                                @יוסף-בן-שמעון
                                אז מה אני אמור לעשות?

                                1. ליצור משתנה גלובלי
                                  2.לבצע פתיחה רק פעם אחת
                                dovidD מנותק
                                dovidD מנותק
                                dovid
                                ניהול
                                כתב ב נערך לאחרונה על ידי
                                #20

                                @nigun תביא לי אתר שמסביר איך להשתמש בsql (עם דוגמאות עשירות ומפורטות ולא תיעוד) ואני אכתוב לך בדיוק מה לעשות.

                                • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                                • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                                nigunN תגובה 1 תגובה אחרונה
                                0
                                • dovidD dovid

                                  @nigun תביא לי אתר שמסביר איך להשתמש בsql (עם דוגמאות עשירות ומפורטות ולא תיעוד) ואני אכתוב לך בדיוק מה לעשות.

                                  nigunN מנותק
                                  nigunN מנותק
                                  nigun
                                  כתב ב נערך לאחרונה על ידי
                                  #21

                                  @dovid
                                  אלו טובים?
                                  http://go-database-sql.org/accessing.html
                                  https://www.alexedwards.net/blog/organising-database-access

                                  מייל: nigun@duck.com

                                  dovidD תגובה 1 תגובה אחרונה
                                  0
                                  • nigunN nigun

                                    @dovid
                                    אלו טובים?
                                    http://go-database-sql.org/accessing.html
                                    https://www.alexedwards.net/blog/organising-database-access

                                    dovidD מנותק
                                    dovidD מנותק
                                    dovid
                                    ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #22

                                    @nigun כן.
                                    לפי מה שכתוב לך אין לך בכלל פתיחת קונקשיין.
                                    הdb.Open לא יוצר קונקשיין אלא סה"כ מקים מופע שנועד מטבעו להיות בעל חיים ארוכים ולא אמורים לסגרו (שם הוא סוגר אותו עם defer כשהתוכנית תיגמר). המופע הזה יכול להיות אחד לכל התוכנה כמו ש@יוסף-בן-שמעון אמר.
                                    מה עם קונקשנים? זה נראה שמנהלים לך את זה מצויין מאחורי הקלעים (יש לזה חיסרון קצת כי אם אני מבין טוב אתה לא יכול להבטיח ששתי פקודות ירוצו על אותו קונקשיין) ובעצם כל קריאה לQuery מחזיקה קונקשיין שנסגר בrows.Close().
                                    אז סיכמנו: var db *sql.DB אחד לכל האפליקציה.

                                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                                    תגובה 1 תגובה אחרונה
                                    2
                                    • nigunN מנותק
                                      nigunN מנותק
                                      nigun
                                      כתב ב נערך לאחרונה על ידי
                                      #23

                                      שוב למדתי בדרך הקשה שצריך לקרוא דוקומנטיצות מהתחלה לסוף
                                      בגלל שלא ידעתי בדיוק איך מתנהל הסשנים בGO
                                      הגעתי מהר מאוד לSQL Error 1040: Too Many Connection
                                      אחרי שקראתי את המדריך שהבאתי למעלה הייתי צריך לעשות שינויים גדולים בקוד בשביל לתקן את זה
                                      (מזל שהרצתי בדיקת עומסים)

                                      מייל: nigun@duck.com

                                      י תגובה 1 תגובה אחרונה
                                      0
                                      • nigunN nigun

                                        שוב למדתי בדרך הקשה שצריך לקרוא דוקומנטיצות מהתחלה לסוף
                                        בגלל שלא ידעתי בדיוק איך מתנהל הסשנים בGO
                                        הגעתי מהר מאוד לSQL Error 1040: Too Many Connection
                                        אחרי שקראתי את המדריך שהבאתי למעלה הייתי צריך לעשות שינויים גדולים בקוד בשביל לתקן את זה
                                        (מזל שהרצתי בדיקת עומסים)

                                        י מנותק
                                        י מנותק
                                        יוסף בן שמעון
                                        כתב ב נערך לאחרונה על ידי
                                        #24

                                        @nigun פרט הרחב נמק

                                        nigunN תגובה 1 תגובה אחרונה
                                        0
                                        • י יוסף בן שמעון

                                          @nigun פרט הרחב נמק

                                          nigunN מנותק
                                          nigunN מנותק
                                          nigun
                                          כתב ב נערך לאחרונה על ידי
                                          #25

                                          @יוסף-בן-שמעון
                                          א. קראתי לבקשת INSERT עם Query ולא עם exec
                                          כיוון שאני לא צריך את הפלט זה מבזבז נתונים, כי הוא יוצר פלט וזה משאיר את החיבור פתוח ליותר זמן
                                          ב. במקרה של שגיאה עשיתי return בלי פקודה נוספת לrows.Close()
                                          מה שגרם לחלק מהבקשות להישאר פתוח משום מה.
                                          ולמדתי שמומלץ לזרוק הרבה Close כי אם לא יועיל לא יזיק
                                          ג. למדתי שעדיף באופן כללי להכין את הבקשה עם Prepare ולעשות עליו כמה בקשות
                                          (במקרה שלי כל בקשה נמצא בתוך פונקציה נפרדת כך שוויתרתי על זה כי זה מידי הרבה עבודה לבנות את כל הפונקציות מחדש)
                                          ד. למדתי שאם בקשה אמורה לקבל רק שורה אחת משתמשים בQueryRow ולא בQuery
                                          יש עוד כמה דברים שלא ירדתי לעומקם עדיין למשל ניהול ערכים רקים (NULL)

                                          מייל: nigun@duck.com

                                          תגובה 1 תגובה אחרונה
                                          1
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום