מהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?
-
מכיון שהתוכנה שלי תורת אמת בוורד בנוייה על בסיס מסמכי טקסט סטטיים. תהיתי לעצמי האם יש צורה יותר טובה לשמור את התוכן של הספרים מאשר בתוך מסמך טקסט פשוט.
כלומר האם וכיצד יש צורה לשמור את הטקסט באופן שיאפשר טעינה מהירה יותר של הטקסט. את ההבדל מתחילים לראות במסמכי טקסט ארוכים שם הטעינה עלולה לקחת כמה שניות טובות. או כאשר התוכנה מנסה לשלוף כמה מסמכים בו זמנית. -
אתה בטוח שהבעיה היא זמן טעינה מהדיסק (IO) ולא זמן עיבוד הטקסט (CPU)?
התוכן הוא טקסט ולכן טבעי שכך אתה שומר, אין הוקוס פוקוס, ומה שאתה טוען זה מה שאתה לכאורה צריך.
עם זאת יש כמה כיוונים לתקוף את הבעיה, השאלה מה רלוונטי ובשביל זה צריך להכיר טוב את התנהגות התוכנה שלך ומשתמשיה:
א. שליפה יותר סלקטיבית - לטעון רק מה שצריך ולא מסמך מלא.
בשביל זה צריך לשמור את הטקסט במקטעים בקבצים נפרדים או בשורות נפרדות במסד נתונים.
ב. שימוש בדחיסה ופריסה כדי לחסוך מכמות הטעינה מהדיסק על חשבון העיבוד.
זה יכול לעלות יותר במחשבים מסויימים, וגם ייתכן שזה לוקח יותר אנרגיית בטריה במחשבים ניידים.
ג. טעינה חכמה מראש - למשל בעת חיפוש, טעינת X התוצאות הראשונות ברקע כניחוש שכנראה המשתמש יבחר באחד מהם. -
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
אתה בטוח שהבעיה היא זמן טעינה מהדיסק (IO) ולא זמן עיבוד הטקסט (CPU)?
כן בדקתי את זה. כמובן שגם עיבוד הנתונים לוקח יותר זמן, אבל גם הטעינה.
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
ב. שימוש בדחיסה ופריסה כדי לחסוך מכמות הטעינה מהדיסק על חשבון העיבוד.
זה יכול לעלות יותר במחשבים מסויימים, וגם ייתכן שזה לוקח יותר אנרגיית בטריה במחשבים ניידים.האמת היא ששמתי לב שבספריות כמו lucene הטעינה של הטקסט השמור יותר מהירה האם זה בעצם מה שהם עושים?
כמו"כ מדבריך נשמע שלא בהכרח מומלץ ללכת על הכיוון הזה? הבנתי נכון? -
@pcinfogmach כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
האמת היא ששמתי לב שבספריות כמו lucene הטעינה יותר מהירה האם זה בעצם מה שהם עושים?
אני חושב שזה בגלל הטעינה הסלקטיבית, הם טוענים בדיוק את אותו נפח מהר יותר?
כמו"כ מדבריך נשמע שלא בהכרח מומלץ ללכת על הכיוון הזה? הבנתי נכון?
בדוק את זה.
כתוב קוד שטוען טקסט ארוך במיוחד בשני הצורות: בצורת טקסט רגיל וגם דחוס בDeflateStream ואז בטעינה לפענח אותו.
תעקוב במנהל המשימות על עלות המעבד באחוזים ואולי גם עלות האנרגיה (לא יודע איך בודקים) של שני הדרכים, אם היא לא שולית אז זה בהחלט סיבה להימנע מזה.
אם תעשה תוכנה תוכל לבקש את המבדק מחברים עם מחשבים שונים.
ייתכן שישנם דחיסות שיהיו יותר אידיאליות מDeflateStream אבל זה ללא ספק בדיוק אותו כיוון - אם הוא שגוי תדע שאין לך מה לחפש עם דחיסה. -
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
הם טוענים בדיוק את אותו נפח מהר יותר?
אני חושב שכן אם הבנתי נכון ככה ה-Highlighter שלהם עובד הוא טוען את תוכן הספר ואז יוצר tokens ואז מחשב גזירים
-
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
א. שליפה יותר סלקטיבית - לטעון רק מה שצריך ולא מסמך מלא.
יש צורה גם לשלוף חלקים מאמצע או מסוף המסמך?
-
@pcinfogmach כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
א. שליפה יותר סלקטיבית - לטעון רק מה שצריך ולא מסמך מלא.
יש צורה גם לשלוף חלקים מאמצע או מסוף המסמך?
לא בקובץ טקסט.
לכן צריך לשמור מלא קבצים קטנים או להשתמש במסד נתונים. -
@pcinfogmach כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
כן בדקתי את זה. כמובן שגם עיבוד הנתונים לוקח יותר זמן, אבל גם הטעינה.
בדוק את זה לעומק יותר, האם בלי שום עיבוד יש טעינה שלוקחת זמן? כמה MB מדובר?
-
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
לכן צריך לשמור מלא קבצים קטנים או להשתמש במסד נתונים.
מצד איחסון הטקסט בלבד ולא משאר הבחינות האם אני מרוויח משהו ממסד נתונים (חוץ מהעובדה שאין לי אלפי קבצי טקסט במחשב).
-
@pcinfogmach זה לא נשמע הגיוני שטעינה מהדיסק הוא צואר הבקבוק. זה לא אמור להיות כמה שניות. אני בטוח שהטעינה האיטית הוא בגלל פירמוט הטקסט להציג בפקד
-
אוקיי בבדיקות שערכתי בlinqpad נראה שאתם צודקים במקסימום שהגעתי אליו היה 0.200 שניות
-
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
@pcinfogmach כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
@dovid כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
א. שליפה יותר סלקטיבית - לטעון רק מה שצריך ולא מסמך מלא.
יש צורה גם לשלוף חלקים מאמצע או מסוף המסמך?
לא בקובץ טקסט.
לכן צריך לשמור מלא קבצים קטנים או להשתמש במסד נתונים.אני בטוח שיש file.seek כלשהו גם בC#..
בכל מקרה אלא אם מדובר בדיסק איטי במיוחד, קריאה של כמה קבצי טקסט זה לא מה שיאט אותך משמעותית מספיק, לא חושב ששם הצוואר בקבוק שלך. -
@aaron כתב במהו האחסון המהיר ביותר האפשרי של נתוני טקסט ב-C# ?:
אני בטוח שיש file.seek כלשהו גם בC#..
זה בדיוק מה שמסד נתונים עושה, אבל קובץ טקסט לא מתאים לגישה אקראית.
לא שייך לעשות seek בלי לדעת איפה (בינארית, מממ... למעט אם אתה כותב בUTF-16), זה מחייב אותך להחזיק קבצי אינדקס.