【发布时间】:2016-05-28 10:43:27
【问题描述】:
我必须将.csv 文件中的 4000 万条记录插入数据库,下面是我遵循的过程。
-
Windows 服务 1:
- 读取 CSV
- 验证记录
- 使用
SqlBulkCopy将有效记录插入成功表(中间表)。
-
Windows 服务 2。
- 一次从成功表中获取 10 000 条记录
- 为这 10 000 人运行一个 foreach
- 将每条记录发送到数据库以插入到主表中。
Windows 服务 1 大约需要 30-40 分钟,但 Windows 服务 2 大约需要 5 小时才能完成任务(最短时间)。我有 2 种方法可以做到这一点,但无法决定哪种方法更好并欢迎提出建议。
- 创建 4 个独立的 windows 服务并同时处理 40000 条记录
- 使用工作表,我们可以使用 while 循环
- 从 Windows 服务异步调用过程
我最大的疑问是我们在过程中使用事务并且将使用它异步工作,因为根据我的假设使用事务锁定表并且其他进程需要对其进行处理。
【问题讨论】:
-
百万? SqlBulkCopy 是唯一的一个。
running a foreach可能是薄弱环节。如果您使用游标,请考虑重写查询,使其基于设置。 -
我们在 Windows 服务 1 中使用 sqlbulkcopy,但我们在第二个 Windows 服务程序中执行某些验证,因此不能使用批量复制。她的另一件事是,当我们使用批量复制时,我们假设一组 10 万要使用 sql 批量复制一次插入记录,那么即使一条记录失败,我也需要记录此错误,或者至少需要知道哪条记录有此错误,因此使用批量复制是不可能的
-
Bit 如果采用不同的方法,但这对 SSIS 来说没什么可做的吗?集成服务有一个批量插入,您可以在其中进行转换。我非常怀疑在 SSIS 中需要一个多小时
-
为什么服务2做单独的插入语句,为什么不只是
insert into ... select?
标签: c# sql-server database csv sqlbulkcopy