java十万数据秒级入库_关于百万级大批量数据入库的选择

本文探讨了在处理大批量数据写入时,如何优化效率。Dapper对于小量数据操作效率较高,但面对大量数据时性能下降。多线程操作需谨慎,避免锁表导致的性能损耗。SqlBulkCopy是最佳选择,尤其在无约束的表中,能实现快速写入。在实际应用中,应根据业务需求和数据完整性来选择合适的批量写入策略。
摘要由CSDN通过智能技术生成

日常中某些需求,经常会遇到一些大批量数据写入的问题,从原始那种 foreach 循环单笔写入数据早已过时,不能满足入库的实效性,直接忽视,.一般情况下的 orm映射是支持批量写入数据的,效率也是忽高忽低,受各种因素影响

1. Dapper 中的 批量导入

众所周知,Dapper 是一个构造简单的orm 映射,支持批量增删改,对于千以内的数据量,用这个没什么问题,基本都能直接应付掉,不怎么耗时,数据量一旦多起来,万以上的就不怎么管用,很耗时

2. 多线程操作

多线程操作,一定要理清业务,不然操作不当,也会很耗时,大批量写入数据时,要不要考虑数据完整性,还有锁表时其他线程的写入操作是无法进行下去的,不然多线程也会白搭,调度好线程,存在耗时锁表时需要 continuewith 顺序操作线程

3. SqlBulkCopy批量操作

这个最快,适合大批量数据写入的操作,表约束越少(主键也算),写入速度越快,无主键无外键的情况下,一百万数据只要8s,操作如下

//设置表名

SqlBulkCopy bulkCopy_Sch = newSqlBulkCopy(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); //写入

当然,如果时间过长,原因就是表约束太多,包括索引,外键,主键,这些根据当前业务,能不要就不要,如果非要不可,只能考虑异步操作,不然真的太耗时间,而且操作的等待时间,是存在锁表行为的,这个时间越短越好,如果避免不了,建议闲时操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值