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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. כיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#)

כיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#)

מתוזמן נעוץ נעול הועבר תכנות
20 פוסטים 6 כותבים 754 צפיות 5 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי
    #3

    לא מבין את הסיטואציה, למה הקובץ מכווץ ומה הבעיה לחלץ אותו?

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

      אתה יכול לייצר תבנית קובץ משלך, שמכילה את ה-metadata הזה, ואת הכיווץ כל blob בנפרד (לקמן zlob)
      מבנה הקובץ
      metadata
      zlob
      zlob
      ...
      ה-metadata יכיל את המיקום בקובץ של כל zlob
      זה יאפשר לך לטעון במהירות רק את ה-zlob הרצוי לפי דרישה ולפרוס אותו ל-blob

      pcinfogmachP מנותק
      pcinfogmachP מנותק
      pcinfogmach
      כתב ב נערך לאחרונה על ידי
      #4

      @OdedDvir
      תודה ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ.

      yossizY OdedDvirO 2 תגובות תגובה אחרונה
      0
      • dovidD dovid

        לא מבין את הסיטואציה, למה הקובץ מכווץ ומה הבעיה לחלץ אותו?

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

        הקובץ מכיל אינדקס בסופו עם בלובים בגודל קבוע המכילים מידע על מיקומים וגדלים של בלובים בגודל בלתי קבוע בתוך המסמך, בסוף הקובץ ישנו מספר שמתאר את אורך האינדקס.
        כאשר הקובץ מכווץ (למשל עם Gzip), הגישה הישירה לאינדקס נקטעת. אני לא מצליח לקרוא את האינדקס מבלי להסיר את הכיווץ מכל הקובץ קודם.

        בעצם אני מדבר על Random acces לחלקים מתוך התוכן של קובץ מכווץ.

        קומפיונטק תגובה 1 תגובה אחרונה
        0
        • pcinfogmachP pcinfogmach

          הקובץ מכיל אינדקס בסופו עם בלובים בגודל קבוע המכילים מידע על מיקומים וגדלים של בלובים בגודל בלתי קבוע בתוך המסמך, בסוף הקובץ ישנו מספר שמתאר את אורך האינדקס.
          כאשר הקובץ מכווץ (למשל עם Gzip), הגישה הישירה לאינדקס נקטעת. אני לא מצליח לקרוא את האינדקס מבלי להסיר את הכיווץ מכל הקובץ קודם.

          בעצם אני מדבר על Random acces לחלקים מתוך התוכן של קובץ מכווץ.

          קומפיונטק מנותק
          קומפיונטק מנותק
          קומפיונט
          כתב ב נערך לאחרונה על ידי
          #6

          @pcinfogmach אם אתה יכול לשנות את מבנה הקובץ, אז תשנה אותו כמו שכתב @OdedDvir שהמידע על ה - blobים יהיה בתחילת הקובץ (offset, length) ורק ה blobים עצמם יהיו מכווצים, לא כל הקובץ.

          pcinfogmachP תגובה 1 תגובה אחרונה
          1
          • קומפיונטק קומפיונט

            @pcinfogmach אם אתה יכול לשנות את מבנה הקובץ, אז תשנה אותו כמו שכתב @OdedDvir שהמידע על ה - blobים יהיה בתחילת הקובץ (offset, length) ורק ה blobים עצמם יהיו מכווצים, לא כל הקובץ.

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

            @קומפיונט
            הבנתי אז זהו הדרך האופטימלית להשתמש עם zlobs תודה - אנסה ליישם זאת.

            תגובה 1 תגובה אחרונה
            1
            • pcinfogmachP pcinfogmach

              @OdedDvir
              תודה ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ.

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

              @pcinfogmach כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

              ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ

              כדי לקבל random access נדמה לי שאין לך ברירה. מה שכן אפשר לבדוק זה אפשרות של "מילון" מותאם אישית משותף לכל ה-blob-ים המכווצים. זה אמור להיות כמעט זהה לכיווץ כל הקובץ (ההשפעה שיהיה לזה על הדחיסה תלוי מאוד בתוכן ה-blob-ים)
              ע"ע: https://github.com/EamonNerbonne/ZlibWithDictionary

              נ.ב. אם לא היה מספיק ברור: zlob זו מילה מומצאת ל-blob מכווץ
              עריכה: אני רואה ש-mysql כבר המציאו את המילה

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

              תגובה 1 תגובה אחרונה
              2
              • pcinfogmachP pcinfogmach

                @OdedDvir
                תודה ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ.

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

                @pcinfogmach כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                @OdedDvir
                תודה ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ.

                בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע

                @yossiz כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                עריכה: אני רואה ש-mysql כבר המציאו את המילה

                חח, אשרי שכיוונתי 🤣

                dovidD תגובה 1 תגובה אחרונה
                2
                • OdedDvirO OdedDvir

                  @pcinfogmach כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                  @OdedDvir
                  תודה ברם אם הבנתי נכון Zlob תופס הרבה יותר מקום מאשר קובץ שכולו מכווץ.

                  בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע

                  @yossiz כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                  עריכה: אני רואה ש-mysql כבר המציאו את המילה

                  חח, אשרי שכיוונתי 🤣

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

                  @OdedDvir כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                  בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע

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

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

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

                    ניסיתי כעת בעצמי את ספריית ZstdNet על קובץ יבמות של תורת אמת (MN_YEVAMOT_L2.txt) עם אימון מול כל השורות ודחיסה של כל שורה בנפרד, תוצאות מצויינות: כלל השורות ביחד 12% לעומת 40% בGZipStream.

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

                      @OdedDvir כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                      בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע

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

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

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

                      @dovid כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

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

                      יעילות הדחיסה אכן השתפרה:

                      ניסיתי כעת בעצמי את ספריית ZstdNet על קובץ יבמות של תורת אמת (MN_YEVAMOT_L2.txt) עם אימון מול כל השורות ודחיסה של כל שורה בנפרד, תוצאות מצויינות: כלל השורות ביחד 12% לעומת 40% בGZipStream.

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

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

                        @dovid כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

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

                        יעילות הדחיסה אכן השתפרה:

                        ניסיתי כעת בעצמי את ספריית ZstdNet על קובץ יבמות של תורת אמת (MN_YEVAMOT_L2.txt) עם אימון מול כל השורות ודחיסה של כל שורה בנפרד, תוצאות מצויינות: כלל השורות ביחד 12% לעומת 40% בGZipStream.

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

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

                        @dovid כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

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

                        ZstdNet יותר יעיל משמעותית בחילוץ עם מילון (יותר מפי שלוש מחילוץ gzip).

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

                          @OdedDvir כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):

                          בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע

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

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

                          pcinfogmachP מנותק
                          pcinfogmachP מנותק
                          pcinfogmach
                          כתב ב נערך לאחרונה על ידי pcinfogmach
                          #14
                          פוסט זה נמחק!
                          תגובה 1 תגובה אחרונה
                          0
                          • dovidD dovid

                            ניסיתי כעת בעצמי את ספריית ZstdNet על קובץ יבמות של תורת אמת (MN_YEVAMOT_L2.txt) עם אימון מול כל השורות ודחיסה של כל שורה בנפרד, תוצאות מצויינות: כלל השורות ביחד 12% לעומת 40% בGZipStream.

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

                            @dovid
                            איך עושים את האימון?

                            תגובה 1 תגובה אחרונה
                            0
                            • dovidD מנותק
                              dovidD מנותק
                              dovid
                              ניהול
                              כתב ב נערך לאחרונה על ידי dovid
                              #16
                              var file = toratEmetLoc + @"020_MISHNA\102_SEDER_NASHIM\24_MAS_YEVAMOT\MN_YEVAMOT_L2.txt";
                              
                              System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
                              var text = File.ReadAllText(file, Encoding.GetEncoding(1255));
                              var lines = text.Split('\n');
                              var linesAsBytes = lines.Select(l => Encoding.UTF8.GetBytes(l)).ToArray();
                              
                              //train
                              var dic = DictBuilder.TrainFromBuffer(linesAsBytes.Where(l => l.Length > 100));
                              var option = new CompressionOptions(dic, CompressionOptions.MaxCompressionLevel);
                              
                              using var compressor = new Compressor(option);
                              var perLineZstd = linesAsBytes.Select(x => compressor.Wrap(x));
                              

                              זה רק להדגמה,
                              במציאות אתה תשמור את תוצאות האימון לקובץ ומשם תטען אותו בהמשך.

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

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

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

                                  @Aharon-0 עקב אחרי השרשור טוב? לא יצרתי מילון מטקסט אלא מבייטים,
                                  הסיבה שאני קורא את הטקסט היא כדי לדמות קטעים קטנים (שורות).

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

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

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

                                      @Aharon-0 אם כוונתך על הפיצול והקריאה כטקסט, לא התייחסתי אליהם, זו סימולציה בלבד. במציאות יהיה נטו רצפי בייטים.

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


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

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

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