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

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

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

ניהול של עדכון נתונים כשיש הרבה משתמשים

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 3 כותבים 166 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אבי 203א מחובר
    אבי 203א מחובר
    אבי 203
    כתב ב נערך לאחרונה על ידי
    #1

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

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

    
    for (var i = 0; i < truma.amount ; i++) {
    		let  results   = await wixData.query("card").eq("sug", "הגרלה").ascending("ms").isEmpty("torem").limit(1).find()
            let item = results.items[0];
            item.torem = truma._id;
         await   wixData.update("card", item);
    }
    וכו...
    

    מה שקואה שם יש מישהו שרוכש עשר לדוגמא ומיהו אחר באותה שניה קונה 4 למשל, אז השני לוקח חלק לראשון...

    איך אני עוצר את זה.
    תוןדה רבה

    https://www.av-digital.co.il/

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

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

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

      
      for (var i = 0; i < truma.amount ; i++) {
      		let  results   = await wixData.query("card").eq("sug", "הגרלה").ascending("ms").isEmpty("torem").limit(1).find()
              let item = results.items[0];
              item.torem = truma._id;
           await   wixData.update("card", item);
      }
      וכו...
      

      מה שקואה שם יש מישהו שרוכש עשר לדוגמא ומיהו אחר באותה שניה קונה 4 למשל, אז השני לוקח חלק לראשון...

      איך אני עוצר את זה.
      תוןדה רבה

      אבי 203א מחובר
      אבי 203א מחובר
      אבי 203
      כתב ב נערך לאחרונה על ידי
      #2

      @אבי-203 תוך כדי שאני כותב עלה לי רעיון אולי בסוף התהליך לבדוק אם יצא לו לפי הכמות ואם לא להפעיל את הפונקצייה בחזרה, רק שאלה: אם אני באמצע פונקציה קורא שוב לפוקצייה עצמה היא עוצרת ומתחילה מחדש? כך.

      let cardragil = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "הגרלה").find()
      let cardbonus = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "בונוס").find()
      console.log(cardragil,cardbonus);
        if (cardragil.length===truma.amount&&cardbonus.length===bonus) {
            return ms
      
        }else{
      postData(truma)
      
        }
      

      https://www.av-digital.co.il/

      yossizY תגובה 1 תגובה אחרונה
      0
      • אבי 203א אבי 203

        @אבי-203 תוך כדי שאני כותב עלה לי רעיון אולי בסוף התהליך לבדוק אם יצא לו לפי הכמות ואם לא להפעיל את הפונקצייה בחזרה, רק שאלה: אם אני באמצע פונקציה קורא שוב לפוקצייה עצמה היא עוצרת ומתחילה מחדש? כך.

        let cardragil = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "הגרלה").find()
        let cardbonus = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "בונוס").find()
        console.log(cardragil,cardbonus);
          if (cardragil.length===truma.amount&&cardbonus.length===bonus) {
              return ms
        
          }else{
        postData(truma)
        
          }
        
        yossizY מנותק
        yossizY מנותק
        yossiz
        כתב ב נערך לאחרונה על ידי yossiz
        #3

        @אבי-203 אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

        אם אני באמצע פונקציה קורא שוב לפוקצייה עצמה היא עוצרת ומתחילה מחדש?

        כן. זה מתנהג בדיוק כמו קריאה לפונקציה אחרת.

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

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

        מקריאת פוסטים בפורום של Wix‏ [1, 2] מתברר שאין ל-Wix פתרון לבעיה של עדכונים מקבילים ( 😮 ), והם באמת ממליצים על הפתרון שלך שנקרא בשפה המקצועית Optimistic concurrency control, ז.א. עושים את הפעולה בלי שום נעילה של ה-DB, ובודקים אח"כ אם הצליח או לא.

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        dovidD תגובה 1 תגובה אחרונה
        3
        • yossizY yossiz

          @אבי-203 אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

          אם אני באמצע פונקציה קורא שוב לפוקצייה עצמה היא עוצרת ומתחילה מחדש?

          כן. זה מתנהג בדיוק כמו קריאה לפונקציה אחרת.

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

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

          מקריאת פוסטים בפורום של Wix‏ [1, 2] מתברר שאין ל-Wix פתרון לבעיה של עדכונים מקבילים ( 😮 ), והם באמת ממליצים על הפתרון שלך שנקרא בשפה המקצועית Optimistic concurrency control, ז.א. עושים את הפעולה בלי שום נעילה של ה-DB, ובודקים אח"כ אם הצליח או לא.

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

          @yossiz בWIX הקוד לא רץ באותו קונטקסט?
          כי בנוד (של טריד בודד) אפשר להכריח סדר ולמנוע מקבילות עם פרומייס (כל פעולה היא then של הקודמת).

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

            @yossiz בWIX הקוד לא רץ באותו קונטקסט?
            כי בנוד (של טריד בודד) אפשר להכריח סדר ולמנוע מקבילות עם פרומייס (כל פעולה היא then של הקודמת).

            yossizY מנותק
            yossizY מנותק
            yossiz
            כתב ב נערך לאחרונה על ידי yossiz
            #5

            @dovid אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

            בWIX הקוד לא רץ באותו קונטקסט?

            שאלה טובה... מקריאה מהירה של התיעוד הבנתי שפונקצייות wixdata עובדות גם בדפדפן וגם בצד שרת.

            כי בנוד (של טריד בודד) אפשר להכריח סדר ולמנוע מקבילות עם פרומייס (כל פעולה היא then של הקודמת).

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

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

              @dovid אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

              בWIX הקוד לא רץ באותו קונטקסט?

              שאלה טובה... מקריאה מהירה של התיעוד הבנתי שפונקצייות wixdata עובדות גם בדפדפן וגם בצד שרת.

              כי בנוד (של טריד בודד) אפשר להכריח סדר ולמנוע מקבילות עם פרומייס (כל פעולה היא then של הקודמת).

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

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

              @yossiz לא הייתי קורא לזה נעילה, התכוונתי לטריק שבמחייב את ההרצה הבאה לחכות לקודמת ע"י פרומייז:

              var complexActionControl = Promise.resolve();
              
              app.post('/complex-action', function(req, res) {
                 complexActionControl  = complexActionControl.then(complexAction)
              });
              
              function complexAction() {
                //bla bla
              }
              
              
              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              yossizY תגובה 1 תגובה אחרונה
              1
              • dovidD dovid

                @yossiz לא הייתי קורא לזה נעילה, התכוונתי לטריק שבמחייב את ההרצה הבאה לחכות לקודמת ע"י פרומייז:

                var complexActionControl = Promise.resolve();
                
                app.post('/complex-action', function(req, res) {
                   complexActionControl  = complexActionControl.then(complexAction)
                });
                
                function complexAction() {
                  //bla bla
                }
                
                
                yossizY מנותק
                yossizY מנותק
                yossiz
                כתב ב נערך לאחרונה על ידי
                #7

                @dovid בעניותי לא הבנתי, לדעתי, אם complexAction הוא פונקציה אסינכרונית אז עדיין הם יבוצעו במקביל.

                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

                  @dovid בעניותי לא הבנתי, לדעתי, אם complexAction הוא פונקציה אסינכרונית אז עדיין הם יבוצעו במקביל.

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

                  @yossiz אם בתוך complexAction יש קריאה אסינכרונית, אז מחזירים אותה בעצמה.
                  פה למשל שיעשה return על הwixData.query.
                  הנה מה שאני מתכוון https://repl.it/@davidlevtov/PromotedIncompatibleProcedures

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

                    @yossiz אם בתוך complexAction יש קריאה אסינכרונית, אז מחזירים אותה בעצמה.
                    פה למשל שיעשה return על הwixData.query.
                    הנה מה שאני מתכוון https://repl.it/@davidlevtov/PromotedIncompatibleProcedures

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

                    @dovid אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

                    הנה מה שאני מתכוון https://repl.it/@davidlevtov/PromotedIncompatibleProcedures

                    מיד אחרי שעזבתי את המחשב הבנתי איך זה עובד... סליחה על ההטרחה.

                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                    dovidD תגובה 1 תגובה אחרונה
                    1
                    • yossizY yossiz

                      @dovid אמר בניהול של עדכון נתונים כשיש הרבה משתמשים:

                      הנה מה שאני מתכוון https://repl.it/@davidlevtov/PromotedIncompatibleProcedures

                      מיד אחרי שעזבתי את המחשב הבנתי איך זה עובד... סליחה על ההטרחה.

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

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

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

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

                        אבי 203א מחובר
                        אבי 203א מחובר
                        אבי 203
                        כתב ב נערך לאחרונה על ידי אבי 203
                        #11

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

                        זה בדף הצד לקוח

                        	postData(truma).then((ms) => {
                        	$w('#html2').hide()
                        
                        $w('#text119').text = String(ms)
                        $w('#repeater1').expand()
                        $w("#dynamicDataset").refresh()
                        $w('#dataset3').refresh()
                        emails(truma, ms)
                        
                         } );			
                        

                        וזה בצד אחורי

                        
                        export async function postData(truma) {
                            let carim = Number(truma.amount),
                           bonusim =(Math.floor( truma.amount/2))
                         await tikun(truma,carim,bonusim).then((ms)=>{
                            
                          wixData.get("tormim", truma._id)
                        				.then((item5) => {
                        item5.ishur=  true
                        item5.status = "מאושר"
                        item5.card1=  ms
                        			wixData.update("tormim", item5)
                        			} )
                          .catch( (err) => {
                            let errorMsg = err;
                          } );
                             return ms;
                        
                          })
                        
                        
                        export async function tikun(truma,carim,bonusim) {
                        
                        
                        for (var i = 0; i <carim ; i++) {
                        		let  results   = await wixData.query("card").eq("sug", "הגרלה").ascending("ms").isEmpty("torem").isEmpty("toremim").limit(1).find()
                                let item = results.items[0];
                                item.torem = truma._id; 
                             await   wixData.update("card", item);
                             
                              await wixData.insertReference("tormim", "card", truma._id, results.items[0]._id) 
                         }
                               for (var ii = 0; ii < bonusim ; ii++) {
                        	let  results2   = await wixData.query("card").eq("sug", "בונוס").ascending("ms").isEmpty("torem").isEmpty("toremim").limit(1).find()
                              
                                let item2 = results2.items[0];
                                console.log(item2);
                        
                                item2.torem =  truma._id
                               await wixData.update("card", item2);
                        
                             await wixData.insertReference("tormim", "card", truma._id, results2.items[0]._id)
                        
                         }
                        
                        let ms;
                        let cardragil = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "הגרלה").find()
                        let cardbonus = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "בונוס").find()
                        console.log(cardragil,cardbonus);
                          if (cardragil.length===carim && cardbonus.length===bonusim) {
                           let rels =  await  wixData.query("card").eq("torem",truma._id ).find()
                           console.log(rels);
                           await rels.items.map(obj => {
                               if (ms===undefined ||ms===null ||!ms) {
                        			   	ms = obj.ms + ","
                        
                              }else{
                        			   	ms += obj.ms + ","
                        }
                            })
                            return ms;
                          }else{
                         carim =carim - cardragil.length,
                        bonusim = bonusim -cardbonus.length
                        await tikun(truma,carim,bonusim)
                        console.log(2);
                          }
                          
                           }
                        

                        בתכלס ערך ms חוזר אלי undefined
                        כנראה שהוא חוזר לפני הסיום כי במסד הנתונים זה נשמר טוב.

                        אשמח כמובן להבין שיש פתרון פשוט יותר,

                        https://www.av-digital.co.il/

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

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

                          זה בדף הצד לקוח

                          	postData(truma).then((ms) => {
                          	$w('#html2').hide()
                          
                          $w('#text119').text = String(ms)
                          $w('#repeater1').expand()
                          $w("#dynamicDataset").refresh()
                          $w('#dataset3').refresh()
                          emails(truma, ms)
                          
                           } );			
                          

                          וזה בצד אחורי

                          
                          export async function postData(truma) {
                              let carim = Number(truma.amount),
                             bonusim =(Math.floor( truma.amount/2))
                           await tikun(truma,carim,bonusim).then((ms)=>{
                              
                            wixData.get("tormim", truma._id)
                          				.then((item5) => {
                          item5.ishur=  true
                          item5.status = "מאושר"
                          item5.card1=  ms
                          			wixData.update("tormim", item5)
                          			} )
                            .catch( (err) => {
                              let errorMsg = err;
                            } );
                               return ms;
                          
                            })
                          
                          
                          export async function tikun(truma,carim,bonusim) {
                          
                          
                          for (var i = 0; i <carim ; i++) {
                          		let  results   = await wixData.query("card").eq("sug", "הגרלה").ascending("ms").isEmpty("torem").isEmpty("toremim").limit(1).find()
                                  let item = results.items[0];
                                  item.torem = truma._id; 
                               await   wixData.update("card", item);
                               
                                await wixData.insertReference("tormim", "card", truma._id, results.items[0]._id) 
                           }
                                 for (var ii = 0; ii < bonusim ; ii++) {
                          	let  results2   = await wixData.query("card").eq("sug", "בונוס").ascending("ms").isEmpty("torem").isEmpty("toremim").limit(1).find()
                                
                                  let item2 = results2.items[0];
                                  console.log(item2);
                          
                                  item2.torem =  truma._id
                                 await wixData.update("card", item2);
                          
                               await wixData.insertReference("tormim", "card", truma._id, results2.items[0]._id)
                          
                           }
                          
                          let ms;
                          let cardragil = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "הגרלה").find()
                          let cardbonus = await  wixData.query("card").eq("torem",truma._id ).eq("sug", "בונוס").find()
                          console.log(cardragil,cardbonus);
                            if (cardragil.length===carim && cardbonus.length===bonusim) {
                             let rels =  await  wixData.query("card").eq("torem",truma._id ).find()
                             console.log(rels);
                             await rels.items.map(obj => {
                                 if (ms===undefined ||ms===null ||!ms) {
                          			   	ms = obj.ms + ","
                          
                                }else{
                          			   	ms += obj.ms + ","
                          }
                              })
                              return ms;
                            }else{
                           carim =carim - cardragil.length,
                          bonusim = bonusim -cardbonus.length
                          await tikun(truma,carim,bonusim)
                          console.log(2);
                            }
                            
                             }
                          

                          בתכלס ערך ms חוזר אלי undefined
                          כנראה שהוא חוזר לפני הסיום כי במסד הנתונים זה נשמר טוב.

                          אשמח כמובן להבין שיש פתרון פשוט יותר,

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

                          @אבי-203 זה מה שחבר בWIX כתב לי

                          "אתה צריך למעשה מנגנון כפול שמנהל תורים (Queues) וולידציה כפולה לפני שהרכישה מתבצעת לוודא שהכרטיס לא נרכש, כמו במערכות למכירת כרטיסים

                          1. למנוע שהשרת לא יציע את אותו כרטיס לשני אנשים
                          2. לתת X זמן ללקוח כשהוא נמצא בעמוד ההזמנה הודעה שאומר (״הכרטיס זמין לך ל X זמן הקרוב״)
                          3. רגע לפני הרכישה לעשות בדיקה שהכרטיס לא נרכש.

                          זה דורש לא מעט קוד מורכב תחפש בגוגל How to manage Promises into dynamic queue with vanilla JavaScript"

                          סוף ציטוט.

                          זה לא הכי יעזור לי כי אני לא יודע כמה כמות ירכוש כל אחד. ושוב לכאורה תהיה בעיה כמה לתפוס, ואם לא תופס את אותם המספרים, אם יש בו זמנית 10- 20 נציגים.

                          https://www.av-digital.co.il/

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


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

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

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