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

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

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

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

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

    @ליבל
    בPHP אין שום רווח בלתפוס את הזכרון כי במילא זה לא נשמר בין הקריאות לשרת
    אבל בGO (ונראה לי שגם בנוד) אפשר לשמור נתון במשתנה ולהגיש אותו ללקוח מתוך הזכרון מאשר לקרוא מחדש כל פעם

    מייל: nigun@duck.com

    תגובה 1 תגובה אחרונה
    0
    • י מנותק
      י מנותק
      יוסף בן שמעון
      כתב ב נערך לאחרונה על ידי
      #4

      @nigun ההמלצה היא ליצור מאגר חיבורים ולהשתמש בו, חפש משהו כמו pool connection

      nigunN תגובה 1 תגובה אחרונה
      1
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
        #5

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

        מייל: nigun@duck.com

        י תגובה 1 תגובה אחרונה
        0
        • י מנותק
          י מנותק
          יוסף בן שמעון
          השיב לnigun ב נערך לאחרונה על ידי
          #6

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

          nigunN תגובה 1 תגובה אחרונה
          1
          • 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
              • nigunN מנותק
                nigunN מנותק
                nigun
                השיב לdovid ב נערך לאחרונה על ידי
                #9

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

                מייל: nigun@duck.com

                תגובה 1 תגובה אחרונה
                0
                • nigunN מנותק
                  nigunN מנותק
                  nigun
                  השיב לdovid ב נערך לאחרונה על ידי
                  #10

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

                  מייל: nigun@duck.com

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

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

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    nigunN תגובה 1 תגובה אחרונה
                    1
                    • nigunN מנותק
                      nigunN מנותק
                      nigun
                      השיב לdovid ב נערך לאחרונה על ידי nigun
                      #12

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

                      מייל: nigun@duck.com

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

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

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        nigunN תגובה 1 תגובה אחרונה
                        0
                        • nigunN מנותק
                          nigunN מנותק
                          nigun
                          השיב לdovid ב נערך לאחרונה על ידי
                          #14

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

                          מייל: nigun@duck.com

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מחובר
                            dovidD מחובר
                            dovid ניהול
                            השיב לnigun ב נערך לאחרונה על ידי dovid
                            #15

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

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            י תגובה 1 תגובה אחרונה
                            2
                            • י מנותק
                              י מנותק
                              יוסף בן שמעון
                              השיב לdovid ב נערך לאחרונה על ידי
                              #16

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

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

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

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                י תגובה 1 תגובה אחרונה
                                2
                                • י מנותק
                                  י מנותק
                                  יוסף בן שמעון
                                  השיב לdovid ב נערך לאחרונה על ידי
                                  #18

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

                                  nigunN תגובה 1 תגובה אחרונה
                                  1
                                  • nigunN מנותק
                                    nigunN מנותק
                                    nigun
                                    השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
                                    #19

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

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

                                    מייל: nigun@duck.com

                                    dovidD תגובה 1 תגובה אחרונה
                                    0
                                    • dovidD מחובר
                                      dovidD מחובר
                                      dovid ניהול
                                      השיב לnigun ב נערך לאחרונה על ידי
                                      #20

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

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      nigunN תגובה 1 תגובה אחרונה
                                      0
                                      • nigunN מנותק
                                        nigunN מנותק
                                        nigun
                                        השיב לdovid ב נערך לאחרונה על ידי
                                        #21

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

                                        מייל: nigun@duck.com

                                        dovidD תגובה 1 תגובה אחרונה
                                        0
                                        • dovidD מחובר
                                          dovidD מחובר
                                          dovid ניהול
                                          השיב לnigun ב נערך לאחרונה על ידי
                                          #22

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

                                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                          תגובה 1 תגובה אחרונה
                                          2

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

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

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