2012-10-04 35 views
0

使用以下方案時,會考慮哪些最佳實踐?在C#中創建數據子集時的最佳實踐

我有〜的數據集600萬條共,分解成30+表與具有幾十萬條記錄一些表。我需要使用一次只允許插入200條記錄的api。

我打破了表插入。現在,我正在考慮前兩個選項。我可以獲取該表的完整數據集,然後在C#循環中通過數據集,一次只插入200個數據集。或者我可以一次抓取200條記錄的多個數據庫調用。創建我的對象並調用API來插入我的記錄。我想我可以在插入其他記錄時進行下一次數據庫調用。

+0

如果這些表是完全獨立的,可以分而治之的這一點,並在不同的線程不同的表做多個插入一次。但是如果沒有看到所有的模式,真的很難說。如果您需要插入600萬行並一次執行200次並分別調用數據庫,那將會有30,000個不同的調用,這對我來說似乎過分了。 – Michael

+0

您可以將DataAdapter的['UpdateBatchSize'](http://msdn.microsoft.com/zh-cn/library/system.data.common.dbdataadapter.updatebatchsize(v = vs.110).aspx)設置爲200。 –

+1

你爲什麼從C#調用數據庫,然後將很多行插回到數據庫中?這可以完成所有從SQL內或可能使用SSIS,或有一個用戶界面組件? – d89761

回答

1

使用多個線程,每次讀取並一次插入200個線程。這不僅會更快,而且由於無法在片段化內存上分配連續塊,因此您不會遇到潛在的數據集OutOfMemoryExceptions

+0

謝謝你!我傾向於這樣的事情,但正如邁克爾在評論中所說的那樣,導致了很多數據通話。 – dj22

+0

由於這是我下去的路線,我認爲我會提供這些鏈接給任何將要做同樣的事情的人。 有很多很好的信息[這裏](http://stackoverflow.com/questions/177488/c-sharp-threading) 我去[這裏](http://www.yoda.arachsys。 com/csharp/threads /)首先 – dj22

+0

任務並行庫:http://msdn.microsoft.com/en-us/library/dd460717.aspx – hyru