mmi*_*mix -1 c# sql-server entity-framework task-parallel-library .net-core
我有很多行(300k+)要在尽可能短的时间内更新插入到 SQL Server 数据库中,所以想法是使用并行化和分区数据,并使用异步将数据泵入 SQL,当时的 X 线程,每个上下文 100 行,上下文被回收以最大限度地减少跟踪开销。然而,这意味着要并行使用多个连接,因此CommittableTransaction将TransactionScope使用分布式事务,这将导致并行事务征用操作返回臭名昭著的"This platform does not support distributed transactions."异常。
我确实需要能够提交/回滚整组更新插入。它是批量上传过程的一部分,任何错误都应将更改回滚到以前的工作/稳定条件(应用程序方面)。
我有什么选择?缺少使用一个连接且没有并行化?
注意:问题并不像一批插入命令那么简单,如果是这样的话,我只会生成插入并在服务器上作为查询运行它们,或者确实使用SqlBulkCopy. 其中大约一半是更新,一半是插入,其中 SQL Server 生成新键,需要获取这些键并在接下来要插入的子对象上重新设置键,行分布在 3 级层次结构中的大约 12 个表中。
小智 5
没有。完全错误的做法。不要为此使用 EF - 批量插入 ETL 不是对象关系映射器的用途,并且许多设计决策对此没有成效。你也不会用小汽车代替卡车来运输20吨的货物。
如果您以某种方式使用 SqlBulkCopy API,300k 行是微不足道的。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |