社区
C#
帖子详情
怎么高效率批量插入1000条数据到数据库
LL891230
2011-04-01 08:57:44
每隔5毫秒就有30多条数据发送过来,然后需要及时插入到数据库,怎样才能更高效插入到数据库?要求:插入到数据库所耗的时间必须要比发送的时间快。目前我的做法是把批量数据先放在DataTable 中,1s后一次性提交DataTable中的数据,用的方法是adapter.Update(DataTable),这种方法效率上还是比较慢,内部实现应该还是一条一条插入的,只不过少连了几次数据库。求各位大虾帮帮忙。
...全文
941
16
打赏
收藏
怎么高效率批量插入1000条数据到数据库
每隔5毫秒就有30多条数据发送过来,然后需要及时插入到数据库,怎样才能更高效插入到数据库?要求:插入到数据库所耗的时间必须要比发送的时间快。目前我的做法是把批量数据先放在DataTable 中,1s后一次性提交DataTable中的数据,用的方法是adapter.Update(DataTable),这种方法效率上还是比较慢,内部实现应该还是一条一条插入的,只不过少连了几次数据库。求各位大虾帮帮忙。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xsi640
2011-04-01
打赏
举报
回复
http://www.dotnetdev.cn/2011/04/%e4%bd%bf%e7%94%a8sqlbulkcopy%e6%8f%90%e9%ab%98%e6%89%b9%e9%87%8f%e6%8f%92%e5%85%a5%e6%95%b0%e6%8d%ae%e5%ba%93%e6%80%a7%e8%83%bd/
sqlbulkcopy加多数据库服务器处理
JimsdogV1
2011-04-01
打赏
举报
回复
[Quote=引用 13 楼 ll891230 的回复:]
引用 12 楼 ll891230 的回复:
引用 10 楼 qqiuzaihui 的回复:
提供一个思路供参考:
使用数据缓冲区+多线程完成这个功能, 先用队列作为数据缓冲区, 一个线程专门负责读取数据, 将读取到的数据保存到队列; 另一个线程专门负责保存数据, DbConnection不能用sqlbulkcopy, 在Insert语句中使用 Union 拼接总是可以的吧, 一次性地拼接30……
[/Quote]
缓冲只是为了解决偶然的密集数据,要是数据一直都很密集,加不加缓冲又有什么区别呢。
JimsdogV1
2011-04-01
打赏
举报
回复
5毫秒??还多线程?。。。
线程多效率就更低了。
还是考虑内存数据库吧 fastdb之类的
LL891230
2011-04-01
打赏
举报
回复
[Quote=引用 12 楼 ll891230 的回复:]
引用 10 楼 qqiuzaihui 的回复:
提供一个思路供参考:
使用数据缓冲区+多线程完成这个功能, 先用队列作为数据缓冲区, 一个线程专门负责读取数据, 将读取到的数据保存到队列; 另一个线程专门负责保存数据, DbConnection不能用sqlbulkcopy, 在Insert语句中使用 Union 拼接总是可以的吧, 一次性地拼接30条数据保存到数据库中. 我有试过用此种方法接收……
[/Quote]目前我的做法也是用一个列队存储数据,一个线程存,一个线程取,取的过程中需要分析+发送+插入,所耗时间远远不能达到那边传数据速度,所以就会产生数据堆积,然后越堆越多...
LL891230
2011-04-01
打赏
举报
回复
[Quote=引用 10 楼 qqiuzaihui 的回复:]
提供一个思路供参考:
使用数据缓冲区+多线程完成这个功能, 先用队列作为数据缓冲区, 一个线程专门负责读取数据, 将读取到的数据保存到队列; 另一个线程专门负责保存数据, DbConnection不能用sqlbulkcopy, 在Insert语句中使用 Union 拼接总是可以的吧, 一次性地拼接30条数据保存到数据库中. 我有试过用此种方法接收处理1万条记录, 基本上可以确保即时地将数据保存到……
[/Quote]我试试,谢谢!
wqzone
2011-04-01
打赏
举报
回复
不要忘记了约束“插入到数据库所耗的时间必须要比发送的时间快”。
qqiuzaihui
2011-04-01
打赏
举报
回复
提供一个思路供参考:
使用数据缓冲区+多线程完成这个功能, 先用队列作为数据缓冲区, 一个线程专门负责读取数据, 将读取到的数据保存到队列; 另一个线程专门负责保存数据, DbConnection不能用sqlbulkcopy, 在Insert语句中使用 Union 拼接总是可以的吧, 一次性地拼接30条数据保存到数据库中. 我有试过用此种方法接收处理1万条记录, 基本上可以确保即时地将数据保存到数据库中.
当然, 如果接收到的数据量足够大足够快, 那可能还得考虑一下 sp1234 提到的 内存数据库 的问题。
wqzone
2011-04-01
打赏
举报
回复
我看还是换思路吧,
神仙也不敢保证“插入到数据库所耗的时间必须要比发送的时间快”。只要是与系统边界联系的总有意外发生。
所以建议另开途径
zhuoyue9935
2011-04-01
打赏
举报
回复
数据量太大。多几个数据库。每隔几秒插入到不同的数据里。空余的时间汇总。
trilcc
2011-04-01
打赏
举报
回复
或者写个存储过程
以专业开发人员为伍
2011-04-01
打赏
举报
回复
先不用担心你使用什么方式来保存数据,先担心程序的质量吧。你能否保证准确性?如果不能,最好请别人来完成这个任务。
以专业开发人员为伍
2011-04-01
打赏
举报
回复
[Quote=引用楼主 ll891230 的回复:]
每隔5毫秒就有30多条数据发送过来,然后需要及时插入到数据库,怎样才能更高效插入到数据库?
[/Quote]
这不太可能。
如果一定要使用数据库,那么应该花十几万去买一个世界上最好的
内存数据库
(并且可以确保自动保存到磁盘的)。
要想用技术方式解决,首先应该忘掉常见的关系数据库。商用关系数据库花上百倍的代价去做其它工作,而你的任务则没有时间做通常的数据库系统所必须做的事情(比如ACID的事务处理),所以你的任务根本不应该从现在常见的商用关系数据库角度来考虑。
ccsldya
2011-04-01
打赏
举报
回复
其实这样就好了啊 ,你可以把1s延迟到5秒?
语句一条条执行的时间很少,浪费时间的地方在不断的链接和断开数据库
想提高效率就像这样放在一起就行了啊。。
坐等高手
天罡gg
2011-04-01
打赏
举报
回复
楼上正确
使用sqlbulkcopy
LL891230
2011-04-01
打赏
举报
回复
[Quote=引用 1 楼 shiyuyao1987 的回复:]
使用sqlbulkcopy
[/Quote]我现在使用的是DbConnection,不是用的SqlConnection,我该怎么做?
shiyuyao1987
2011-04-01
打赏
举报
回复
使用sqlbulkcopy
PHP通过数组插入
数据
表
本文介绍了一种使用PHP实现的
批量插入
数据
到
数据
库
的方法。通过循环遍历
数据
数组并构造SQL语句,该方法能够有效地将大量
数据
插入到指定表中,并通过每
1000
条
记录执行一次插入操作来提
高效率
。
preparement
批量插入
该博客探讨了如何使用Java的PreparedStatement进行批量
数据
插入,并通过设置批处理大小来提
高效率
。内容涉及循环处理参数列表,每处理
1000
条
数据
就执行一次批处理,以优化
数据
库
操作性能。
Oracle 批量处理
数据
本文介绍了两种在Oracle
数据
库
中进行批量
数据
处理的方法:1) 使用PL/SQL循环更新
数据
,通过COMMIT每处理
1000
条
记录来提
高效率
;2)
批量插入
数据
,包括使用APPEND Hint减少日志写入以及通过EXPDP/IMPDP工具快速迁移
数据
。
mysql如何一秒插入10万
条
数据
本文介绍了Java中使用PreparedStatement进行批量SQL操作以提升
数据
库
性能的方法。通过设置不自动提交,分批添加、执行和清除批处理,可以显著减少磁盘IO,提
高效率
。示例代码展示了如何插入100万
条
数据
,每
1000
条
提交一次。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章