דילוג לתוכן
0
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
  • דף הבית
  • חוקי הפורום
  • מדריכים
  • פוסטים אחרונים
  • לא נפתר
  • תגיות
  • פופולרי
  • משתמשים
  • תרומות לאוצריא
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו אתר

פורום אוצריא

אוצריא - דף הבית
|
קח שותפות בהוספת ספרים
|
תרום לאוצריא
  1. דף הבית
  2. בעיות - תוכנת אוצריא
  3. בעיה | db של ספרים אשיים גדול מדי

בעיה | db של ספרים אשיים גדול מדי

מתוזמן נעוץ נעול הועבר נפתר בעיות - תוכנת אוצריא
מאגר אישימאגר נתוניםsqliteנפח-אחסון
9 פוסטים 5 כותבים 191 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • shmuelS
      shmuelS
      shmuel
      כתב ב נערך לאחרונה על ידי
      #1

      מסד הנתונים של הספרים האישיים עצום — פי שניים מגודל הקבצים שהוא כולל.

      והוא גם אינו מתנקה: כאשר אני מורה לתוכנית לקרוא את הקבצים ישירות מהדיסק, מסד הנתונים עדיין נשאר באותו גודל, אף שהנתונים נמחקו — כפי שניתן לראות בקלות באמצעות SQLiteSpy.

      Otzaria-BotO תגובה 1 תגובה אחרונה
      1
      • shmuelS shmuel

        מסד הנתונים של הספרים האישיים עצום — פי שניים מגודל הקבצים שהוא כולל.

        והוא גם אינו מתנקה: כאשר אני מורה לתוכנית לקרוא את הקבצים ישירות מהדיסק, מסד הנתונים עדיין נשאר באותו גודל, אף שהנתונים נמחקו — כפי שניתן לראות בקלות באמצעות SQLiteSpy.

        Otzaria-BotO
        Otzaria-BotO
        Otzaria-Bot
        כתב ב נערך לאחרונה על ידי
        #2

        שני דברים נפרדים כאן, ושניהם אמיתיים.

        1. הגודל עצמו — זו התנהגות מתוכננת, לא תקלה

        user_books.db לא שומר את הקבצים, אלא את הטקסט המחולץ שורה-שורה בטבלת line (content כטקסט לא-דחוס), ועליה שלושה אינדקסים: (bookId, lineIndex), tocEntryId, heRef. מעליהם tocEntry, tocText, line_toc. בנוסף יש מטמונים שמחזיקים עותק נוסף של אותו תוכן: docx_text_cache (הטקסט המלא של כל DOCX שהומר), pdf_outline_cache ו-pdf_anchor_cache.

        וכיוון ש-DOCX הוא בעצם קובץ zip דחוס — טבעי שהטקסט שנחלץ ממנו למסד לא-דחוס יהיה גדול מהמקור. פי שניים זה בהחלט בטווח הצפוי.

        2. שהוא לא מתכווץ — כאן יש פער אמיתי בקוד

        בדקתי בענף dev: חיפוש VACUUM ו-auto_vacuum בכל המאגר מחזיר אפס תוצאות. מסד הנתונים עובד ב-WAL, בלי auto_vacuum. משמעות: השורות באמת נמחקות, הדפים משתחררים ל-freelist הפנימי, אבל הקובץ שומר על ה-high-water mark שלו לנצח. השטח הפנוי ימוזער לספרים חדשים שתוסיף, אבל לא יוחזר למערכת ההפעלה לעולם. זה בדיוק מה שראית ב-SQLiteSpy.

        מה לעשות בינתיים

        סגור את אוצריא לגמרי, גבה את user_books.db, והרץ עליו VACUUM; ידנית ב-SQLiteSpy. הקובץ יצטמק לגודל האמיתי. שים לב שיש גם user_books.db-wal לצדו — VACUUM יטפל בזה.

        אל תמחק את הקובץ במקום זה: הוא מכיל גם את הקישורים האישיים והדורות שיובאו מ-CSV/JSON (user_link, book_generation), ואלה לא ייבנו מחדש מסריקה.

        דיווח

        זה שווה Issue — בקשה ל-VACUUM אחרי prune/כיבוי מצב ה-DB, או auto_vacuum=INCREMENTAL, ובמקביל ניקוי docx_text_cache לספרים שעברו לקריאה ישירה מהדיסק:
        https://github.com/Otzaria/otzaria/issues

        הפורום לא מחליף את זה — בלי Issue זה פשוט יישכח.

        shmuelS 2 תגובות תגובה אחרונה
        0
        • Otzaria-BotO Otzaria-Bot

          שני דברים נפרדים כאן, ושניהם אמיתיים.

          1. הגודל עצמו — זו התנהגות מתוכננת, לא תקלה

          user_books.db לא שומר את הקבצים, אלא את הטקסט המחולץ שורה-שורה בטבלת line (content כטקסט לא-דחוס), ועליה שלושה אינדקסים: (bookId, lineIndex), tocEntryId, heRef. מעליהם tocEntry, tocText, line_toc. בנוסף יש מטמונים שמחזיקים עותק נוסף של אותו תוכן: docx_text_cache (הטקסט המלא של כל DOCX שהומר), pdf_outline_cache ו-pdf_anchor_cache.

          וכיוון ש-DOCX הוא בעצם קובץ zip דחוס — טבעי שהטקסט שנחלץ ממנו למסד לא-דחוס יהיה גדול מהמקור. פי שניים זה בהחלט בטווח הצפוי.

          2. שהוא לא מתכווץ — כאן יש פער אמיתי בקוד

          בדקתי בענף dev: חיפוש VACUUM ו-auto_vacuum בכל המאגר מחזיר אפס תוצאות. מסד הנתונים עובד ב-WAL, בלי auto_vacuum. משמעות: השורות באמת נמחקות, הדפים משתחררים ל-freelist הפנימי, אבל הקובץ שומר על ה-high-water mark שלו לנצח. השטח הפנוי ימוזער לספרים חדשים שתוסיף, אבל לא יוחזר למערכת ההפעלה לעולם. זה בדיוק מה שראית ב-SQLiteSpy.

          מה לעשות בינתיים

          סגור את אוצריא לגמרי, גבה את user_books.db, והרץ עליו VACUUM; ידנית ב-SQLiteSpy. הקובץ יצטמק לגודל האמיתי. שים לב שיש גם user_books.db-wal לצדו — VACUUM יטפל בזה.

          אל תמחק את הקובץ במקום זה: הוא מכיל גם את הקישורים האישיים והדורות שיובאו מ-CSV/JSON (user_link, book_generation), ואלה לא ייבנו מחדש מסריקה.

          דיווח

          זה שווה Issue — בקשה ל-VACUUM אחרי prune/כיבוי מצב ה-DB, או auto_vacuum=INCREMENTAL, ובמקביל ניקוי docx_text_cache לספרים שעברו לקריאה ישירה מהדיסק:
          https://github.com/Otzaria/otzaria/issues

          הפורום לא מחליף את זה — בלי Issue זה פשוט יישכח.

          shmuelS
          shmuelS
          shmuel
          כתב ב נערך לאחרונה על ידי
          #3

          @Otzaria-Bot
          how do i open an issue

          Otzaria-BotO ח 2 תגובות תגובה אחרונה
          0
          • shmuelS shmuel

            @Otzaria-Bot
            how do i open an issue

            Otzaria-BotO
            Otzaria-BotO
            Otzaria-Bot
            כתב ב נערך לאחרונה על ידי
            #4

            באתר: https://github.com/Otzaria/otzaria/issues

            השלבים:

            1. צריך חשבון GitHub — הרשמה חינם ב-github.com אם אין לך.
            2. להיכנס ללינק למעלה וללחוץ על הכפתור הירוק New issue.
            3. כותרת קצרה שמתארת את הבעיה. במקרה שלך משהו כמו: user_books.db לא מתכווץ אחרי מחיקת ספרים — אין VACUUM
            4. בגוף ההודעה: תיאור הבעיה, מה עשית, מה ציפית שיקרה ומה קרה בפועל. כדאי לציין מערכת הפעלה וגרסת אוצריא, ולצרף את מה שראית ב-SQLiteSpy (צילום מסך נגרר ישירות לתיבת הטקסט).
            5. Submit new issue.

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

            תגובה 1 תגובה אחרונה
            0
            • shmuelS shmuel

              @Otzaria-Bot
              how do i open an issue

              ח
              ח
              חד צורבא
              כתב ב נערך לאחרונה על ידי
              #5

              @shmuel תתחדש על התמונת פרופיל
              אגב לא מצאתי לזה תרגום האנגלית, איך באמת אתם אומרים ?

              shmuelS תגובה 1 תגובה אחרונה
              0
              • ח חד צורבא

                @shmuel תתחדש על התמונת פרופיל
                אגב לא מצאתי לזה תרגום האנגלית, איך באמת אתם אומרים ?

                shmuelS
                shmuelS
                shmuel
                כתב ב נערך לאחרונה על ידי
                #6

                @חד-צורבא אין מילה לתתחדש

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

                  @הבל-הבלים

                  תגובה 1 תגובה אחרונה
                  0
                  • shmuelS shmuel סימן נושא זה כנפתר ב
                  • Otzaria-BotO Otzaria-Bot

                    שני דברים נפרדים כאן, ושניהם אמיתיים.

                    1. הגודל עצמו — זו התנהגות מתוכננת, לא תקלה

                    user_books.db לא שומר את הקבצים, אלא את הטקסט המחולץ שורה-שורה בטבלת line (content כטקסט לא-דחוס), ועליה שלושה אינדקסים: (bookId, lineIndex), tocEntryId, heRef. מעליהם tocEntry, tocText, line_toc. בנוסף יש מטמונים שמחזיקים עותק נוסף של אותו תוכן: docx_text_cache (הטקסט המלא של כל DOCX שהומר), pdf_outline_cache ו-pdf_anchor_cache.

                    וכיוון ש-DOCX הוא בעצם קובץ zip דחוס — טבעי שהטקסט שנחלץ ממנו למסד לא-דחוס יהיה גדול מהמקור. פי שניים זה בהחלט בטווח הצפוי.

                    2. שהוא לא מתכווץ — כאן יש פער אמיתי בקוד

                    בדקתי בענף dev: חיפוש VACUUM ו-auto_vacuum בכל המאגר מחזיר אפס תוצאות. מסד הנתונים עובד ב-WAL, בלי auto_vacuum. משמעות: השורות באמת נמחקות, הדפים משתחררים ל-freelist הפנימי, אבל הקובץ שומר על ה-high-water mark שלו לנצח. השטח הפנוי ימוזער לספרים חדשים שתוסיף, אבל לא יוחזר למערכת ההפעלה לעולם. זה בדיוק מה שראית ב-SQLiteSpy.

                    מה לעשות בינתיים

                    סגור את אוצריא לגמרי, גבה את user_books.db, והרץ עליו VACUUM; ידנית ב-SQLiteSpy. הקובץ יצטמק לגודל האמיתי. שים לב שיש גם user_books.db-wal לצדו — VACUUM יטפל בזה.

                    אל תמחק את הקובץ במקום זה: הוא מכיל גם את הקישורים האישיים והדורות שיובאו מ-CSV/JSON (user_link, book_generation), ואלה לא ייבנו מחדש מסריקה.

                    דיווח

                    זה שווה Issue — בקשה ל-VACUUM אחרי prune/כיבוי מצב ה-DB, או auto_vacuum=INCREMENTAL, ובמקביל ניקוי docx_text_cache לספרים שעברו לקריאה ישירה מהדיסק:
                    https://github.com/Otzaria/otzaria/issues

                    הפורום לא מחליף את זה — בלי Issue זה פשוט יישכח.

                    shmuelS
                    shmuelS
                    shmuel
                    כתב ב נערך לאחרונה על ידי
                    #8

                    @Otzaria-Bot כתב:

                    שני דברים נפרדים כאן, ושניהם אמיתיים.

                    1. הגודל עצמו — זו התנהגות מתוכננת, לא תקלה

                    user_books.db לא שומר את הקבצים, אלא את הטקסט המחולץ שורה-שורה בטבלת line (content כטקסט לא-דחוס), ועליה שלושה אינדקסים: (bookId, lineIndex), tocEntryId, heRef. מעליהם tocEntry, tocText, line_toc. בנוסף יש מטמונים שמחזיקים עותק נוסף של אותו תוכן: docx_text_cache (הטקסט המלא של כל DOCX שהומר), pdf_outline_cache ו-pdf_anchor_cache.

                    וכיוון ש-DOCX הוא בעצם קובץ zip דחוס — טבעי שהטקסט שנחלץ ממנו למסד לא-דחוס יהיה גדול מהמקור. פי שניים זה בהחלט בטווח הצפוי.

                    1. שהוא לא מתכווץ — כאן יש פער אמיתי בקוד

                    בדקתי בענף dev: חיפוש VACUUM ו-auto_vacuum בכל המאגר מחזיר אפס תוצאות. מסד הנתונים עובד ב-WAL, בלי auto_vacuum. משמעות: השורות באמת נמחקות, הדפים משתחררים ל-freelist הפנימי, אבל הקובץ שומר על ה-high-water mark שלו לנצח. השטח הפנוי ימוזער לספרים חדשים שתוסיף, אבל לא יוחזר למערכת ההפעלה לעולם. זה בדיוק מה שראית ב-SQLiteSpy.

                    מה לעשות בינתיים

                    סגור את אוצריא לגמרי, גבה את user_books.db, והרץ עליו VACUUM; ידנית ב-SQLiteSpy. הקובץ יצטמק לגודל האמיתי. שים לב שיש גם user_books.db-wal לצדו — VACUUM יטפל בזה.

                    אל תמחק את הקובץ במקום זה: הוא מכיל גם את הקישורים האישיים והדורות שיובאו מ-CSV/JSON (user_link, book_generation), ואלה לא ייבנו מחדש מסריקה.

                    דיווח

                    זה שווה Issue — בקשה ל-VACUUM אחרי prune/כיבוי מצב ה-DB, או auto_vacuum=INCREMENTAL, ובמקביל ניקוי docx_text_cache לספרים שעברו לקריאה ישירה מהדיסק:
                    https://github.com/Otzaria/otzaria/issues

                    הפורום לא מחליף את זה — בלי Issue זה פשוט יישכח.

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

                    הנקודה המרכזית היא לא ש־user_books.db שומר קבצי DOCX/PDF דחוסים, אלא שהמסד נראה מנופח בגלל כפילויות מבניות בנתונים עצמם. לפי מה שאני רואה, הרבה מידע נשמר כמה פעמים:

                    שם הספר חוזר על כל שורה,
                    נתוני כותרות נשמרים ביותר ממקום אחד,
                    יש חפיפה בין טבלאות line, tocEntry, tocText, line_toc,
                    וגם caches נוספים שכנראה משמרים מידע דומה.
                    אם ה־TOC והטקסט המובנה כבר מספקים גישה מהירה ומדויקת לנתונים, לא ברור למה צריך לשכפל את שם הספר על כל שורה, או למה כותרות צריכות להישמר גם בטקסט וגם בהפניות.

                    לכן, לדעתי הבעיה העיקרית כאן היא לא רק ש־SQLite לא מתכווץ אחרי מחיקות, אלא שיש כאן עיצוב סכימה לא יעיל שגורם לניפוח מיותר מלכתחילה.

                    במילים אחרות:

                    אי־התכווצות של הקובץ היא בעיית תחזוקה של SQLite.
                    אבל הכפילויות בנתונים עצמן הן כנראה מקור הניפוח האמיתי.
                    לכן הייתי מציע להתמקד קודם בבחינה של הסכימה:

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

                    תגובה 1 תגובה אחרונה
                    0
                    • shmuelS shmuel סימן נושא זה כלא נפתר ב
                    • י. פל.י
                      י. פל.י
                      י. פל.
                      כתב ב נערך לאחרונה על ידי י. פל.
                      #9

                      הבעיה הייתה אמיתית - ותוקנה.

                      תגובה 1 תגובה אחרונה
                      2
                      • shmuelS shmuel סימן נושא זה כנפתר ב

                      שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

                      בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

                      הרשמה התחברות

                      • התחברות

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

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון