קוד אסינכרוני בייצוא אקסל - C#
-
יש לי טבלה שמכילה כיום כמליון רשומות (בכל יום נוספות לה יותר מכמה אלפים)
כשאני רוצה לעשות עליה ייצוא לאקסל, אפילו אם אני מקצץ את התשובה ל100K או 200K, אני מקבל דיליי על שאר הבקשות - ז"א, לכל שאר הבקשות לדף שמכיל את הנתונים - אבל בעיקר בסשן הנוכחיאני משתמש בTask ובawait
הזיכרון בשרת רואים שהוא עובד קצת קשה ונחנק
סביבה:
asp net mvc
c#
ef
sql serverלמי שיש רעיונות אשמח לשמוע
תודה -
אולי לא הבנתי טוב את הכותרת, אבללפי איך שאני מנסה להבין, למה שלא תוכל לעשות לולאה שמורידה כל פעם נניח 10K ע"י לימיט ואופסט, ע"י משאב זרימה שכותב לקובץ בכל ריצה של הלולאה את החלק הזה בלבד, ואתה עושה בדיקה שאם הכמות של השורות שהתקבל בריצה == 10K אתה ממשיך להריץ פעם נוספת (וכן בדיקה שלא חזר 0 שורות, באם ביום מן הימים יהיה סכום עגול של 10K), אחרת זה מסיים את הלולאה.
-
@dovid אמר בקוד אסינכרוני בייצוא אקסל - C#:
@חוקר גם כשעושים 1000K ביחד, בטכנולוגיות האמורות, זה אמור להיות בזרימה לאורך כל התהליך.
אני לא מכיר את הסביבה והשפה, אבל אולי כדאי שינסה משהו מתוצרת עצמית של לולאה עם הגבלת limit ו offset, והזרמה פשוטה לקובץ csv.
ייתכן שהספריה עובדת בצורה של הורדת הכל יחד או עיבוד נתונים מיותר שמבזבז משאבים. -
@חוקר דבר ראשון, לא צריך בשום מקום limit+offset. כי קריאה מהמסד נתונים מתבצעת גם כזרם, כך שאם עושים תוצרת עצמית זה צריך להתחיל מאופן הקריאה מהמסד ואופן הכתיבה לקובץ.
דבר שני אכן CSV זה ממש קל הרבה הרבה יותר. ראשית כי בשביל CSV לא חייבים ספריה - זה קובץ טקסט פשוט, שנית, בגלל המבנה ה"שטוח" שלו והפשטות שלו שכל שלב בכתיבה לא צריך למה שעבר ולמה שעתיד.
בקובץ אקסל למשל, יש מבנה היררכי מסובך ובנוסף לזה אחרי שגורמים לכתוב הכל חייבים לדחוס את זה בזיפ, ורק אז להתחיל לשלוח ללקוח. כל זה עושה שאין בעצם "זרימה". -
@clickone אמר בקוד אסינכרוני בייצוא אקסל - C#:
@dovid
העברתי לCSV ואכן מגיב הרבה יותר מהר. (תודה על החבילה של CsvHelper )
אבל הלקוח עדיין דורש אקסל וכמובן הדרישה שחצי מליון מליון רשומות חייבות לרדת לכולם בו זמנית ומיד
@dovid זה אני משאיר לך לשכנע את הלקוח...תודה רבה
אני משתמש בYII2 בייצוא לאקסל עם ספריה, וטבלאות מעל 10K זה נתקע, שם אני משתמש בCSV פשוט
-
@upsilon01 אמר בקוד אסינכרוני בייצוא אקסל - C#:
אפשר לפתוח CSV באקסל
אני יודע
הלקוח רוצה עיצובים ספציפיים, וכידוע קובץ CSV הוא קובץ נקי ללא שליטה על העיצובים כדוגמת צבעים, רוחב עמודה ועוד.@dovid מי כמוך יודע שהלקוח תמיד צודק ....
רק צריך לשכנע אותו שהצדק עם מה שאני חושב ולא עם מה שהוא חושב -
@clickone אמר בקוד אסינכרוני בייצוא אקסל - C#:
@upsilon01 אמר בקוד אסינכרוני בייצוא אקסל - C#:
אפשר לפתוח CSV באקסל
אני יודע
הלקוח רוצה עיצובים ספציפיים, וכידוע קובץ CSV הוא קובץ נקי ללא שליטה על העיצובים כדוגמת צבעים, רוחב עמודה ועוד.@dovid מי כמוך יודע שהלקוח תמיד צודק ....
רק צריך לשכנע אותו שהצדק עם מה שאני חושב ולא עם מה שהוא חושבמזל שהלקוח שלי הבין שמעל 10K עליו להתפשר, אכן באקסל זה בהחלט הרבה יותר נוח מבחינת העיצוב ובפרט בשמירה על מספרי טלפון ללא מחיקת האפס..
אני מעלה רעיון, אולי יש חברות שנותנות המרה מפורמט אחר לאקסל או אפילו ספריות אחרות להתקנה בשרת שלך, ויהיה לך פחות משאבים לבצע שמירה בפורמט אחר מאשר באקסל, ולעשות שלאחר סיום הייצוא זה יבצע המרה.
מSCV לאקסל לא יעזור הרבה כי אתה שוב מפסיד את עיצוב אבל אולי מXML וכדומה זה כן יצליח -
@dovid אמר בקוד אסינכרוני בייצוא אקסל - C#:
@חוקר חשבת שלשמור בפורמט X ולהמיר לY יהיה מהיר מאשר לשמור ישירות לY?
אני התכוונתי יותר לשירות חיצוני, אבל אולי בכל זאת יש ייצוא לפורמט שלא דורש כ"כ כמו אקסל, ובכל זאת יאפר שמירת העיצוב וכו'.
ס"ה העליתי כיון שניתן לחשוב עליו..