1
什麼是最好的方法導入多個xml文件是非常大的數字(例如:30000)與Sql Server 2008不同的架構?導入大量的xml文件
我目前正在循環瀏覽每個文件,將數據加載到datatable
並使用SqlBulkCopy
來插入數據,但它花費了大量的時間(大約1.5小時)。
什麼是最好的方法導入多個xml文件是非常大的數字(例如:30000)與Sql Server 2008不同的架構?導入大量的xml文件
我目前正在循環瀏覽每個文件,將數據加載到datatable
並使用SqlBulkCopy
來插入數據,但它花費了大量的時間(大約1.5小時)。
這應該不會這麼長。據我估計,你有大約600MB的數據;您應該可以毫無困難地接近10MB/s或至少至少 1MB/s - 這意味着1-10分鐘應該很容易實現。
怎麼辦:
如果沒有更多的細節,這是很難做到準確,但我可以推測:
SqlBulkCopy
通常快,所以你插入的可能不是瓶頸。你可以做得比數據錶快一點,但這可能不是問題。DataTable
s可以有「索引」;即主鍵和約束。這些實施效率非常低下 - 這肯定會造成問題。SqlBulkCopy
很快,但最好用很多行。如果您只複製SqlBulkCopy
的1個文件,那意味着30000個調用,並且數據庫端可能至少有30000個fsyncs。您應該只使用一個SqlBulkCopy
。XmlDocument
並查詢大量低效循環和/或XPath),則可能會遇到CPU負載問題。考慮到這一點,我想看看這樣的順序以下客戶
DataTable
S)SqlBulkCopy
實例 - 使用一個(每線程)僅順序由是多麼困難,檢查這個問題啓發。磁盤負載不太可能有問題,但檢查起來並不重要,所以你最好先消除這種可能性。數據庫模式的問題都不是不可能的,但他們更多的工作,以確定(該指數是吧,我是通過去除它影響到另一個工作流?)所以我會檢查這些最後。
'Parallel.ForEach'那隻小狗。只需將MaxDegreeOfParallelism設置爲8即可。 – 2013-02-22 09:38:10
這是30,000個XML文件嗎?你在寫幾行? – 2013-02-22 09:38:37
看[此](http://msdn.microsoft.com/en-us/library/ms171993(V = SQL.100)的.aspx)。 – 2013-02-22 09:39:52