关于大批量数据入库的选择
日常中某些需求,经常会遇到一些大批量数据写入的问题,从原始那种 foreach 循环单笔写入数据早已过时,不能满足入库的实效性,直接忽视,.一般情况下的 orm映射是支持批量写入数据的,效率也是忽高忽低,受各种因素影响
1. Dapper 中的 批量导入
众所周知,Dapper 是一个构造简单的orm 映射,支持批量增删改,对于千以内的数据量,用这个没什么问题,基本都能直接应付掉,不怎么耗时,数据量一旦多起来,万以上的就不怎么管用,很耗时
2. 多线程操作
多线程操作,一定要理清业务,不然操作不当,也会很耗时,大批量写入数据时,要不要考虑数据完整性,还有锁表时其他线程的写入操作是无法进行下去的,不然多线程也会白搭,调度好线程,存在耗时锁表时需要 continuewith 顺序操作线程
3. SqlBulkCopy批量操作
这个最快,适合大批量数据写入的操作,表约束越少(主键也算),写入速度越快,无主键无外键的情况下,一百万数据只要8s,操作如下
//设置表名
SqlBulkCopy bulkCopy_Sch = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.CheckConstraints, tran) { DestinationTableName = "TableName", //设置表名 BulkCopyTimeout = 60 //单笔超时时间
BatchSize = 1000 //设置单笔操作数量 };
//映射列 foreach (DataColumn dc in DtScheduleDetail.Columns) //传入上述table { bulkCopy_Sch.ColumnMappings.Add(dc.ColumnName, dc.ColumnName); } bulkCopy_Sch.WriteToServer(DtScheduleDetail); //写入
当然,如果时间过长,原因就是表约束太多,包括索引,外键,主键,这些根据当前业务,能不要就不要,如果非要不可,只能考虑异步操作,不然真的太耗时间,而且操作的等待时间,是存在锁表行为的,这个时间越短越好,如果避免不了,建议闲时操作
大家好,我是新来的小白,文未佳,却已创。转载请声明(博客园-郎中令)出处,谢谢
---市人皆大笑,举手揶揄之(手动链接博客园)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构