2012-10-04 22 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