BULK INSERT

tenen

New member
BULK INSERT

בוקר טוב,

עובד מול מסד נתונים SQL SERVER 2005

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

האם בהתחשב בכך שהטבלה מקושרת לטבלאות אחרות ובהתחשב בטריגר ניתן יהיה להחליף שורות הINSERT הרבות ב BULK INSERT או שמע הטריגר / היחסים עם טבלאות אחרות יפריעו לי לעשות שימוש ב BULK INSERT

מדובר ב700-900 אלף רשומות לכל הזנה, כל אחת בעלת 20-30 שדות בערך.

כרגע הORM שאני עובד איתו (EF) עושה את העבודה ע"י הכנסת 700-900 אלף שורות INSERT נפרדות, ואני רוצה לדעת האם בכלל ניתן להשתמש בBULK ואם כן אני מניח שאפסיק להשתמש בORM ואכתוב השאילתא ידנית.

בברכה ותודה
טל.
 

pitoach

New member
תיאורטית לא צריכה להיות בעיה אבל מעשית

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

הערה: אני לא ממליץ לך לעבוד עם ORM בעבודה עם כמויות נתונים גדולים. EF הוא אולי ה ORM הטוב ביותר שאני אוהב אועדיין הוא ORM ואינו מביא את התוצאות המיטביות ש DBA מקצועי יוכל להוביל אותך אליהם. ORM נועד בעקרון למהירות פיתוח ולא למיטוב הפיתוח!

* הערה: ב EF יש אופציה לעבוד עם שאילתות נקיות אבל אז למעשה אתה לא מנצל את ה ORM אלא עוקף אותו. זה נוח לאפליקציות dot.net למשל בהם מפתחים בעזרת ORM את הבסיס ובנקודות מסויימות בהם צריך מיטוב עוברים לעבודה ישירה.
 

pitoach

New member


 

tenen

New member
האמת שהטריגר הזה הוא בלית ברירה

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

זה יכול לקחת לא מעט זמן...

המון תודה, חושבים על עוד אפשרויות :)
 

pitoach

New member
תמיד אפשר לכבות את הטריגר בפעולות גורפות

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