ما هي مخاطر إدراج ملايين السجلات في SQL Server من ملف ثابت؟

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

سؤال

أنا على وشك البدء في رحلة كتابة تطبيق نماذج Windows الذي سيفتح ملف txt محددًا بالأنابيب ويبلغ حجمه حوالي 230 ميغابايت.سيقوم هذا التطبيق بعد ذلك بإدراج هذه البيانات في قاعدة بيانات SQL Server 2005 (من الواضح أن هذا يجب أن يحدث بسرعة).أنا أستخدم c# 3.0 و.net 3.5 لهذا المشروع.

أنا لا أطلب التطبيق، فقط بعض النصائح المجتمعية هنا ونصائح حول المخاطر المحتملة.لقد تعلمت من الموقع أن نسخة SQL المجمعة هي شرط أساسي، هل هناك أي شيء يجب أن أفكر فيه (أعتقد أن مجرد فتح ملف txt باستخدام تطبيق النماذج سيكون مسعى كبيرًا؛ربما تقسيمها إلى بيانات كبيرة الحجم؟).

شكرًا لك، وسأقوم بتحرير السؤال من أجل الوضوح إذا احتاجه أي شخص.

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

المحلول

هل يجب عليك كتابة تطبيق winforms؟قد يكون استخدام SSIS أسهل وأسرع بكثير.هناك بعض المهام المضمنة المتاحة بشكل خاص مهمة إدراج مجمعة.

أيضا، يستحق التدقيق مقارنة سرعة طرق الاستيراد المجمع للملفات المسطحة في SQL Server 2005.

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

وهذه طريقة أخرى:على استيراد ملف Excel إلى SQL 2005.

نصائح أخرى

سيكون هذا مسعى متدفقًا.

إذا كنت تستطيع، لا تستخدم المعاملات هنا.ستكون تكلفة المعاملات ببساطة كبيرة جدًا.

إذن ما ستفعله هو قراءة الملف سطرًا تلو الآخر وإدراجه في سطر تلو الآخر.يجب عليك تفريغ الإدخالات الفاشلة في ملف آخر يمكنك تشخيصه لاحقًا ومعرفة مكان فشلها.

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

يمكنك محاولة استخدام نسخة سكلبولك.يتيح لك السحب من "أي مصدر بيانات".

كملاحظة جانبية، يكون من الأسرع في بعض الأحيان إسقاط فهارس الجدول الخاص بك وإعادة إنشائها بعد عملية الإدراج المجمعة.

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

أوصي تمامًا بـ SSIS، حيث يمكنك قراءة ملايين السجلات وتنظيفها على طول الطريق في وقت قصير نسبيًا.

سوف تحتاج إلى تخصيص بعض الوقت للتعامل مع مباحث أمن الدولة، ولكن ينبغي أن تؤتي ثمارها.هناك بعض المواضيع الأخرى هنا على SO والتي من المحتمل أن تكون مفيدة:

ما هي أسرع طريقة لإدراج الكثير من البيانات بشكل مجمّع في SQL Server (عميل C#)

ما هي المواد التعليمية الموصى بها لمباحث أمن الدولة؟

يمكنك أيضًا إنشاء حزمة من C#.لدي برنامج C# يقرأ "ملف رئيسي" 3GL من نظام قديم (يتم توزيعه إلى نموذج كائن باستخدام واجهة برمجة التطبيقات الخاصة بي لمشروع ذي صلة)، ويأخذ قالب حزمة ويعدله لإنشاء حزمة لـ ETL.

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

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

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

كيف: http://msdn.microsoft.com/en-us/library/aa337077.aspx

يمكنك إعداد التحويلات ومعالجة الأخطاء داخل SSIS وحتى إنشاء تفرع منطقي بناءً على معلمات الإدخال.

إذا كان تنسيق عمود الملف يتطابق مع الجدول الهدف حيث يجب أن تنتهي البيانات، فإنني أفضل استخدام الأداة المساعدة لسطر الأوامر bcp لتحميل ملف البيانات.إنه سريع للغاية ويمكنك تحديد ملف خطأ لأي سجلات "فردية" يفشل إدراجها.

يمكن أن يبدأ تطبيقك الأمر إذا كنت بحاجة إلى تخزين معلمات سطر الأوامر الخاصة به (الخادم أو قاعدة البيانات أو اسم المستخدم/كلمة المرور أو الاتصال الموثوق به أو الجدول أو ملف الخطأ وما إلى ذلك).

تعجبني هذه الطريقة أفضل من تشغيل أمر BULK INSERT SQL لأنه ليس من الضروري أن يكون ملف البيانات موجودًا على نظام يمكن الوصول إليه بواسطة خادم قاعدة البيانات.لاستخدام الإدراج المجمع، يجب عليك تحديد المسار إلى ملف البيانات المراد تحميله، لذلك يجب أن يكون مسارًا مرئيًا وقابلاً للقراءة بواسطة مستخدم النظام على خادم قاعدة البيانات الذي يقوم بتشغيل التحميل.الكثير من المتاعب بالنسبة لي عادة.:-)

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