هل يجب أن أستخدم SSIS أو تطبيق C# متعدد الخيوط لتحميل الملفات الثابتة إلى قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

سؤال

توجد ضمن SQL Server Integration Services (SSIS) القدرة على إعداد اتصال بملف ثابت يمكنه الاحتفاظ بملايين السجلات ودفع تلك البيانات إلى قاعدة بيانات SQL.علاوة على ذلك، يمكن استدعاء هذه العملية من تطبيق C# من خلال الرجوع إلى مساحة الاسم Microsoft.SqlServer.Dts.Runtime واستخدامها.

هل من الأفضل تشغيل ملف ثابت يحتوي على ملايين السجلات باستخدام SSIS، أم أن "أنت" الجماعية تفضل تطبيق c# مع مؤشرات ترابط عاملة متعددة (أحدها لقراءة الصف وإضافته إلى المتغير، والآخر للكتابة من هذا المتغير إلى قاعدة البيانات) وفئة "الأم" التي تدير تلك المواضيع؟(يحتوي صندوق التطوير على وحدتي معالجة مركزية)

لقد رأيت هذه البيانات (مدونة فريق SQL) تفيد أنه بالنسبة للملف الثابت الذي يحتوي على مليون سطر، فإن SSIS هو الأسرع:

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

ما رأيك؟

هل كانت مفيدة؟

المحلول

لا أستطيع إلا أن أتحدث عن نفسي وعن تجربتي.سأختار مباحث أمن الدولة، لأن هذه إحدى الحالات التي قد تعيد فيها اختراع العجلة دون داع.هذه مهمة متكررة تم حلها بالفعل بواسطة SSIS.

لدي حوالي 57 وظيفة (مزيج من DTS وSSIS) أديرها يوميًا.يتعامل أربعة من هؤلاء بشكل روتيني مع تصدير ما بين 5 إلى 100 مليون سجل.تحتوي قاعدة البيانات التي أديرها على حوالي 2 مليار صف.لقد استفدت من مهمة البرنامج النصي لإلحاق التاريخ، وصولاً إلى المللي ثانية، حتى أتمكن من تشغيل المهام عدة مرات في اليوم.تم القيام بذلك لمدة 22 شهرًا تقريبًا.كانت رائعة!

يمكن أيضًا جدولة وظائف SSIS.لذلك يمكنك ضبطه ونسيانه.أنا أراقب كل شيء كل يوم، لكن الجزء الخاص بمعالجة الملفات لم يتعطل أبدًا.

المرة الوحيدة التي اضطررت فيها إلى اللجوء إلى برنامج C# مخصص، كانت عندما كنت بحاجة إلى تقسيم الملفات الكبيرة جدًا إلى أجزاء أصغر.مباحث أمن الدولة بطيئة جدًا في هذا النوع من الأشياء.استغرق الملف النصي الذي يبلغ حجمه حوالي ساعة واحدة لتقسيمه، باستخدام مهمة البرنامج النصي.تعامل برنامج C# المخصص مع ذلك خلال 12 دقيقة.

في النهاية، استخدم فقط ما تشعر بالراحة في استخدامه.

نصائح أخرى

SSIS سريع بشكل لا يصدق.بالإضافة إلى ذلك، إذا كان هناك شيء يجب أن يحدث بشكل متكرر، فيمكنك إعداد وكيل لإيقافه في الموعد المحدد.كتابتها بنفسك شيء واحد، ومحاولة جعلها متعددة الخيوط تصبح أكثر تعقيدًا مما تبدو في البداية.

أوصي بمباحث أمن الدولة 9 مرات من أصل عشرة.

لا أستطيع أن أرى كيف أن استخدام سلاسل رسائل متعددة سيساعد في الأداء في هذه الحالة.عند نقل كميات كبيرة من البيانات، يكون عنق الزجاجة الرئيسي عادةً هو الإدخال/الإخراج للقرص.إن إنتاج سلاسل رسائل متعددة لن يحل هذه المشكلة، وأعتقد أن ذلك سيجعل الأمور أسوأ لأنه سيقدم تنافسًا مقفلاً بين العمليات المتعددة التي تصل إلى قاعدة البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top