View Full Version : ذخیره تعداد زیادی داده در SQL
navidiran
پنج شنبه 19 اردیبهشت 1392, 09:02 صبح
با سلام.
دوستان من برنامه ای دارم که اطلاعات اکسل رو به یک دیتاگرید وارد می کند.
تعداد سطرها تقریبا 143،000 سطر و 20 ستون هستند که همه خانه ها حاوی اطلاعات هستند.
یعنی من باید 143000*20 = 2،860،000 خانه را در SQL Server ذخیره کنم.
1- با استفاده از متدهای معمولی لینکو و ADO کلا برنامه هنگام ثبت زمین گیر میشه و خیلی ساعت برای ثبت همه خانه ها زمان میبره.
2- یک کوئری نوشتم توی دیتاست
INSERT INTO tbl_ExcelInsert
(FileNameId, Row, Columns, ColumnHeader, CellContent)
VALUES (@filenameId,@row,@column,@colHeader,@cell)
بازهم زمان زیادی برای ثبت اطلاعات لازم داره.
الان چیکار کنم دیتاگرید رو در زمان کوتاهی ثبت کنم؟
دوستان کمک کنید.
یوسف زالی
پنج شنبه 19 اردیبهشت 1392, 19:34 عصر
سلام.
می تونید از خود اس کیو ال اطلاعات رو import کنید.
می تونید از خود SQL به یک فایل اکسل کانکشن بزنید و ازش مستقیم بخونید.
می تونید اطلاعات رو در قالب یک فایل XML به دیتابیس بفرستید و در اونجا همگی رو با هم اینسرت کنید یا حتی دسته هایی با ابعاد خودتون بسازید.
in_chand_nafar
پنج شنبه 19 اردیبهشت 1392, 21:11 عصر
دوست عزيز در اين گونه شرايط مي توانيد از Bulk Insertاستفاده كنيد
1- استفاده از SSIS براي انجام اينكار
2-يا در دات نت با استفاده از SQL Bulk Copy (كلاس است)
http://stackoverflow.com/questions/5052958/libraries-for-ado-net-to-rapidly-bulk-insert-data-into-a-database-from-a-csv-fi
http://www.c-sharpcorner.com/UploadFile/mahesh/BulckCopyAdoNet2008192005135138PM/BulckCopyAdoNet20.aspx
اين مقاله جالبي است
http://www.codedigest.com/Articles/ASPNET/400_ImportUpload_Excel_Sheet_data_to_Sql_Server_in _C__and_AspNet.aspx
(http://www.codedigest.com/Articles/ASPNET/400_ImportUpload_Excel_Sheet_data_to_Sql_Server_in _C__and_AspNet.aspx)
3- دستور Bulk Insert (اين دستور دردسرهاي براي خود دارد مثال دسترسي سرويس SQLبه فايل اكسل و...)
http://stackoverflow.com/questions/1530884/how-to-bulk-insert-into-existing-database-table-using-ado-net-3-5
اين دستور فرمت اكسل رو هم مي گيرد
http://stackoverflow.com/questions/13124680/how-to-bulk-insert-from-xlsx-file-extension
نكته در كليه حالت هاي مربوط به Bulk Insertحتما Non Clustered Indexهاي جدولتان را Disableو بعد از اتمام كار Rebuildكنيد (اين موضوع باعث افزايش سرعت درج و جلوگيري از Fragmentation خواهد شد )
navidiran
جمعه 20 اردیبهشت 1392, 00:27 صبح
]
نكته در كليه حالت هاي مربوط به Bulk Insertحتما Non Clustered Indexهاي جدولتان را Disableو بعد از اتمام كار Rebuildكنيد (اين موضوع باعث افزايش سرعت درج و جلوگيري از Fragmentation خواهد شد )
واقعا عالی و جالب بود. فقط خیلی کلی هست. اگر مقدور هست کمی هم بیشتر توضیح بدید و اینکه آیا راههای دیگری هم جهت افزایش سرعت در ثبت و بازیابی اطلاعات حجیم وجود داره ؟
ممنون از راهنمایی دوستان
in_chand_nafar
شنبه 21 اردیبهشت 1392, 16:39 عصر
در هنگام انجام اينكار بايد Recovery Model ديتايس هم در Bulk_Logged قرار دهيد
كليه Relationهاي مربوط به جدول را غير فعال و يا حذف كنيد
و عمليات درج به شكل Bulk را انجام دهيد
با SSIS اينكار به راحتي انجام پذير است
هم اين الان كه دارم اين تكست رو مي نويسم حدود 260 ميليون ركورد را از يك بانك اطلاعاتي به يك بانك اطلاعاتي ديگر داريم منقل مي كنمي با استفاده از SSIS
بانك مبدا اواركل
بانك مقصد SQL
كل مراحل كار به شكل Bulk انجام مي شود
موفق باشيد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.