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

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

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

תכנון מחדש של הארכיטקטורה של התכנה

מתוזמן נעוץ נעול הועבר ארכיון code613m
15 פוסטים 5 כותבים 938 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #2

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

    פורסם במקור בפורום CODE613 ב29/06/2016 12:59 (+03:00)

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

    תגובה 1 תגובה אחרונה
    1
    • A מנותק
      A מנותק
      avr416
      כתב ב נערך לאחרונה על ידי
      #3

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

      פורסם במקור בפורום CODE613 ב29/06/2016 13:26 (+03:00)

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

        לא מבין את ארכיטקט בקשר לDB, לדעתי התוכנה הזו לא צריכה בכלל מסד נתונים. כי היא מאוד סטטית. הכל קבוע (יחסית, לא שאי אפשר להוסיף ספרים אבל בגדול אין CRUD).
        אני לא מבין כ"כ את הכיוון שלך אברהם, אתה מנסה לעשות שהכל מתועד באובייקטים ובד בבד להיות אופליין. אני לא רואה פה כמעט צורך בOOP.
        אני הייתי עושה
        א. שמירה בדיסק של הספרים בצורה שתאפשר קריאה אקראית (תכף אסביר).
        ב. ביצוע מיפוי בין כל סוג חלוקה בספר לבין מיקום בדיסק, למשל ברכות>דף>22 (מזהה ספר>מזהה חלוקה>ערך) == קובץ 50 פוזיציה 35600. את המיפוי הזה הייתי גם שומר בדיסק וגם מעלה לזיכרון תמיד.
        ג. מיפוי ממש דומה אבל הפוך, בין ספר ומיקום לכל סוג חלוקה, כמו מזהה ספר,מיקום>סוג יחידה,יחידה.
        ד. מילון של Distinct של כל המילים שבכל המאגרים, לליסט של מזהה+מיקום כמו תפוח: (ברכות:15264, שמות:412). גם את המילון הזה הייתי שומר על דיסק, וטוען כל פעם בטעינת התוכנה לזיכרון.
        ה. בדיסק עצמו הייתי שומר את הטקסט בצורה עשירה כלומר עם סימנים שקל להמירם לעיצוב. וגם סימנים שיקלו על הסורק החד פעמי בהכנסת ספר לדעת את סוג היחידה.
        ו. בחיפוש מילים כל שהם כל הקומבינציות מול המילון של אות ד. בהתקבל התוצאות, לברר את המיקום הידידותי של כל תוצאה (מברכות:15264 לברכות דף כג) ע"י מילון של אות ה. לטעון מהמיקום המדוייק את התוצאה שמופיעה על המסך (אפשר לחסוך את היתר אבל לא קריטי) ולפענח אותה (מהסימנים העשירים ומסימני היחידות) ע"י פונקציה מתאימה.

        סליחה שאני מחרבש הכל...
        ארכיטקטורה זה כמו הסיפור עם האב הבן והחמור...

        פורסם במקור בפורום CODE613 ב29/06/2016 13:33 (+03:00)

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

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

        תגובה 1 תגובה אחרונה
        2
        • M מנותק
          M מנותק
          magicode
          כתב ב נערך לאחרונה על ידי
          #5

          גם אם משתמשים במסד נתונים צריך להשתמש בו בחכמה..

          זה לא הולך שמחפשים בתוך שדה TEXT רגיל.

          אני מביא פה מבנה של החיפוש של הפרום הזה.

          CREATE TABLE IF NOT EXISTS `phpbb_search_wordlist` (
            `word_id` mediumint(8) unsigned NOT NULL,
            `word_text` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
            `word_common` tinyint(1) unsigned NOT NULL DEFAULT '0',
            `word_count` mediumint(8) unsigned NOT NULL DEFAULT '0'
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
          
          ALTER TABLE `phpbb_search_wordlist`
            ADD PRIMARY KEY (`word_id`),
            ADD UNIQUE KEY `wrd_txt` (`word_text`),
            ADD KEY `wrd_cnt` (`word_count`);
          
          ALTER TABLE `phpbb_search_wordlist`
            MODIFY `word_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT;
          
          
          
          
          
          CREATE TABLE IF NOT EXISTS `phpbb_search_wordmatch` (
            `post_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
            `word_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
            `title_match` tinyint(1) unsigned NOT NULL DEFAULT '0'
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
           
          ALTER TABLE `phpbb_search_wordmatch`
            ADD UNIQUE KEY `unq_mtch` (`word_id`,`post_id`,`title_match`),
            ADD KEY `word_id` (`word_id`),
            ADD KEY `post_id` (`post_id`);
          

          פורסם במקור בפורום CODE613 ב29/06/2016 13:35 (+03:00)

          תגובה 1 תגובה אחרונה
          1
          • A מנותק
            A מנותק
            avr416
            כתב ב נערך לאחרונה על ידי
            #6

            @ארכיטקט

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

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

            פורסם במקור בפורום CODE613 ב29/06/2016 13:38 (+03:00)

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

              @avr416

              @ארכיטקט

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

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

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

              פורסם במקור בפורום CODE613 ב29/06/2016 13:47 (+03:00)

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

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

                @דוד ל.ט.

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

                אתה צודק ממש! אני באמת הרגשתי שזה קצת מיותר.
                מאידך, לא בדיוק הבנתי איך אני שומר את הטקסט בצורה עשירה? ע"י קובץ XML עם נתוני מטה דטה? או שמא בתוך הסטרינג להכניס * לפני הדגשה וכדו'? כמו כן, איך אני אסמן את המיקומים של הקובץ (החלוקה לפרקים עמודים וכו') בשביל הסריקה של המיפוי?
                מה זה "מילון של Distinct"? מחיפוש קצר בגוגל הבנתי שזאת מתודה להסרת כפולים??

                @דוד ל.ט.

                ארכיטקטורה זה כמו הסיפור עם האב הבן והחמור...

                לא מכיר את הסיפור 😞

                MAT - לא הבנתי מה פירוש השורה הבאה:

                ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
                

                תודה רבה רבה לכולם על ההשקעה בתשובות!!

                פורסם במקור בפורום CODE613 ב29/06/2016 15:18 (+03:00)

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

                  @avr416

                  מאידך, לא בדיוק הבנתי איך אני שומר את הטקסט בצורה עשירה? ע"י קובץ XML עם נתוני מטה דטה? או שמא בתוך הסטרינג להכניס * לפני הדגשה וכדו'?

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

                  {"Items":[{"typeUnit":15,"value":"22","display":null},{"Value":"בן בג בג אומר...","Formats":null},{"typeUnit":15,"value":"23","display":null},{"Value":"בן הא הא אומר...","Formats":null}]}
                  

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

                  @avr416

                  כמו כן, איך אני אסמן את המיקומים של הקובץ (החלוקה לפרקים עמודים וכו') בשביל הסריקה של המיפוי?

                  אתה מכין קוד שהעבודה שלו תהיה לסרוק ספר כתוב ולמפות כל מקום שמתחיל יחידה חדשה, לשמור את מזהה הספר (ברכות), סוג היחידה (פרק), ערך (3) ומיקום בקובץ (124005).

                  @avr416

                  מה זה "מילון של Distinct"? מחיפוש קצר בגוגל הבנתי שזאת מתודה להסרת כפולים??

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

                  @avr416

                  ארכיטקטורה זה כמו הסיפור עם האב הבן והחמור...

                  לא מכיר את הסיפור 😞

                  אמא שלי סיפרה לי כשהייתי קטן... https://en.wikipedia.org/wiki/The_miller,_his_son_and_the_donkey
                  אין לי כח לספר כעת 🙂

                  פורסם במקור בפורום CODE613 ב29/06/2016 16:23 (+03:00)

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

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

                  תגובה 1 תגובה אחרונה
                  1
                  • A מנותק
                    A מנותק
                    avr416
                    כתב ב נערך לאחרונה על ידי
                    #10

                    נזכרתי בסיפור (אחרי שראיתי את ההפניה לויקיפדיה..) :lol:
                    @דוד ל.ט.

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

                    {"Items":[{"typeUnit":15,"value":"22","display":null},{"Value":"בן בג בג אומר...","Formats":null},{"typeUnit":15,"value":"23","display":null},{"Value":"בן הא הא אומר...","Formats":null}]}
                    

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

                    אתה מתכוון לשמור את המיקום של הbyte (אין לי מושג איך לדעת מהו בדיוק הbyte שהוא תופס :?: ) או כמו שכתבת בהמשך "מיקום של התו { מתחילת הקובץ" ?
                    ומדוע לשמור את המיקום של { מתחילת הקובץ, אשמור כבר את המיקום של המילה עצמה מתחילת הקובץ?

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

                    פורסם במקור בפורום CODE613 ב29/06/2016 17:01 (+03:00)

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

                      תו, לא בית, כי בקידוד UTF כל תו הוא כמה בתים. בעצם תשתמש עם מה שאתה רוצה אבל בעקביות מול הReader.

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

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

                      פורסם במקור בפורום CODE613 ב29/06/2016 17:08 (+03:00)

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

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

                      תגובה 1 תגובה אחרונה
                      1
                      • A מנותק
                        A מנותק
                        avr416
                        כתב ב נערך לאחרונה על ידי
                        #12

                        שכוייח עצום!!
                        הבנתי סופסוף 🙂
                        אנסה ואעדכן.

                        פורסם במקור בפורום CODE613 ב29/06/2016 17:19 (+03:00)

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

                          @avr416

                          אנסה [size=150:28uvxemr]ואעדכן[/size:28uvxemr].

                          נשמח לשמוע מה עבד לך בסוף 🙂

                          פורסם במקור בפורום CODE613 ב30/07/2016 23:05 (+03:00)

                          תגובה 1 תגובה אחרונה
                          0
                          • A מנותק
                            A מנותק
                            avr416
                            כתב ב נערך לאחרונה על ידי
                            #14

                            @אהרן

                            @avr416
                            אנסה [size=150:3t2z1rnu]ואעדכן[/size:3t2z1rnu].

                            אני כתבתי בכתב רגיל :lol:
                            אז ככה, זה אכן סיפור קצת מורכב, התחלתי לעשות את זה, אך עצרתי באמצע כיון שכרגע אני לא כ"כ מתעסק עם תכנות עד סוף ה'זמן'. (אם כי אני עדיין מתגעגע וקופץ לפה מדי פעם לראות מה חדש :smile: ) לא סתם דוד התלונן שמשעמם פה..
                            אך אל דאגה!! אני מתכוון לחזור לזה (בלנ"ד) ואז כשהפרוייקט יהיה מוכן - אעדכן באיזה צורה עשיתי זאת.

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

                            פורסם במקור בפורום CODE613 ב30/07/2016 23:27 (+03:00)

                            תגובה 1 תגובה אחרונה
                            2
                            • א מנותק
                              א מנותק
                              אהרן
                              כתב ב נערך לאחרונה על ידי
                              #15

                              לא רואה שם אפשרות חיפוש.
                              יתכן גם שיש שם אינדקס.

                              פורסם במקור בפורום CODE613 ב30/07/2016 23:39 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • yossizY yossiz התייחס לנושא זה ב

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

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

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