إستخدام الـ SqlBulkCopy لإدراج بيانات هائله في الـ SQL Server بكفاءة عاليه

04 يوليو 2017     974 مشاهدة    4 تعليق
تم النشر في #SQL Server  #Bulk Data  #Performance 

سنتحدت اليوم عن الفئة SqlBulkCopy وهي فئة نادرة الإستخدام بالرغم أنها تمتلك العديد من المزايا المفيدة خصوصاً عند التعامل مع كميات هائلة من البيانات.

قد يتعرض الكثير منا لبعض السيناريوهات خلال مسيرته المهنية ويتطلب منه نقل بيانات ضخمة من قاعدة بيانات إلى أخرى, بالتأكيد هنالك أكثر من حل لإتمام عملية النقل, ولكن قد يزداد الموضوع صعوبة إذا كانت البيانات المراد نقلها من ملف إكسل أو XML أو غيرهما.

وقد يصل البعض منا إلى حل ولكن قد يأخذ الموضوع ساعات كثيرة لإتمام عملية نقل هذه البيانات بصوره سليمه. فللذين يهمهم موضوع الأداء Performance في نقل البيانات دعوني أقدم لكم اليوم الفئة SqlBulkCopy والتي تسمح لنا بتحميل أو إدراج بيانات هائلة وبكفاءة عاليه من مصدر بيانات آخر إلى جدول في خادم البيانات SQL Server.

فقد قمت اليوم بمحاولة قراءة جدول المنتجات من قاعدة البيانات الشهيرة Northwind وتحويل الناتج إلى ملف XML, وذلك لعدم إمتلاكي لبيانات من مصدر آخر, وكان الملف الناتج بالصورة التالية:

<Products>
  <Product>
    <ProductID>17</ProductID>
    <ProductName>Alice Mutton</ProductName>
  </Product>
  <Product>
    <ProductID>3</ProductID>
    <ProductName>Aniseed Syrup</ProductName>
  </Product>
  <Product>
    <ProductID>40</ProductID>
    <ProductName>Boston Crab Meat</ProductName>
  </Product>
  <Product>
    <ProductID>60</ProductID>
    <ProductName>Camembert Pierrot</ProductName>
  </Product>
  ...
<Products>

طبعا لم أقم بنسخ جميع الأعمدة في الجدول ولكن يمكنك المحاولة وستلاحظ فرق الأداء. وبعدها قمت بإستخدام الفئة SqlBulkCopy لنقل بيانات ملف الـ XML إلى الـ SQL Server على النحو التالي:

Dim conn As New SqlConnection("Server=.;Database=MyDb;Integrated Security=True")
Dim bulkCopy As New SqlBulkCopy(conn)
Dim ds As New DataSet()

ds.ReadXml("Products.xml")
conn.Open()
bulkCopy.DestinationTableName = "Products"
bulkCopy.WriteToServer(ds.Tables(0))
conn.Close()

في الشيفرة المصدرية أعلاه قمت بإستخدام الفئة DataSet لتحميل البيانات من ملف الـ XML وبعدها تم تحديد الجدول المراد إدراج البيانات فيه وذلك عبر ضبط الخاصية DestinationTableName وأخيراً تم كتابة البيانات في الخادم وذلك بإستخدام الإجراء WriterToServer().

للمعلوميه السيناريو الذي تم تطبيقة لم تتجاوز عدد صفوف البيانات فيه 100 صف, لكن للتأكد من فعالية الأداء جرب أن تكون بياناتك ضخمه بالفعل مثل 10000 أو 100000 صف, وستلاحظ الفرق الواضح في الأداء بين الطريقة أعلاه و طريقة إدارج البيانات صفاً بصف بإستخدام جملة الإدراج Insert.

تويتر فيسبوك قوقل + لينكد إن


4 تعليق

ATizliaibrador (13/08/2018 04:22:13 م)

Torsion bras de quelqu'un est comment dur votre sang pousse contre les parois de vos arteres lorsque votre coeur essence pompe le sang. Arteres sont les tubes qui transportent prendre offre sang loin de votre coeur. Chaque set votre determination bat, il pompe le sang par de vos arteres a la reste de votre corps.
https://www.cialispascherfr24.com/cialis-prix-bas/

https://www.cialispascherfr24.com/commander-cialis-sans-ordonnance/ (23/08/2018 12:15:39 ص)

Just as you will need to scratch when someone
feels itching; it is usually vital that you have sexual intercourse when one feels the need to perform it.

Second, as soon as your child misbehaves even during spite of there being clear consequences,
how should a dad or mom react. Self-Distraction If your provocation levels
increasingly becoming too high and you are about to climax, have a
long breath and take into consideration something more important to distract your head to the time being.

AbiseeleSuix (21/09/2018 02:29:33 ص)

Pression arterielle est comment robuste votre sang pousse contre les parois de vos arteres lorsque votre coeur determination pompe le sang. Arteres sont les tubes qui transportent perseverent b gerer offre sang loin de votre coeur. Chaque age votre manque de sensibilite bat, il pompe le sang par vos arteres a la vacances de votre corps.
https://www.cialispascherfr24.com/tadalafil-e20/

AbiseeleSuix (01/10/2018 04:39:05 م)

Pression arterielle est comment calleux votre sang pousse contre les parois de vos arteres lorsque votre coeur determination pompe le sang. Arteres sont les tubes qui transportent prendre offre sang loin de votre coeur. Chaque age votre manque de sensibilite bat, il pompe le sang a tous egards vos arteres a la vacances de votre corps.
https://www.cialispascherfr24.com/cialis-generique-biogaran/


اكتب تعليقك