插入有间隔如果用事务

程序心声 2019-07-12 06:54:08
大家好,我对数据库不太熟练,现在想请教大家一个问题。有一个项目,在持续不停的接收数据,但是接收的数据是有间隙的,比如500毫秒、50毫秒或者更短。总之有间隔,但是一直在接收,而且每一条的数据量还比较大(可能是几M),我需要把接收的数据存入数据库。为了能达到比较高的性能,应该用事务的方式,多条数据一次性的插入,而不是一条一条的插入。但是我有个疑问,每条数据之间有间隔,能用事务吗,要怎么用呢?等多久来一次统一的插入呢。并且,如果有错的话,那我前面收的数据,还没来得及插入的,也报销了,怎么能减小损失呢。我不想因为一条数据的失败让前面已收到的数据都没保存。这个要如何解决呢。我对数据库经验挺少,还希望大家多多发言,多多帮忙,谢谢了!还希望有经验的朋友能用代码示例一下,我是用VC2015开发的。
...全文
95 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序心声 2019-07-16
  • 打赏
  • 举报
回复
引用 7 楼 砸死牛顿的苹果 的回复:
每次插入的量也要控制


插入的量要控制在多少,控制在多少比较好,或者你说的是针对哪种数据库,你能具体说说吗,谢谢。
程序心声 2019-07-16
  • 打赏
  • 举报
回复
引用 6 楼 吉普赛的歌 的回复:
1. 如果与钱无关,数据库的恢复模式设置为简单;


2. 数据表尽量去掉多余的索引;

3. 使用 sqlbulkcopy, 写法可以参考 :https://blog.csdn.net/yenange/article/details/78550982

4. #3版主的做法是有效的, 建议1分钟插入一次数据, 这样数据库压力不至于太大, 而且效率很高。


你好,这位朋友。非常感谢你的回答,首先我想表示谢谢。我做的是数据仿真,有大量测试数据,比如波形什么的,不是金钱方面的,但是数据量比较大。

1. 你说的把数据库的恢复模式设置为“简单”,设置为“简单”是有什么作用呢,能解释一下吗。另外,你的这个设置是对哪一种数据库的呢,还是说所有的数据库都有这一项?数据库千差万别,可能也不是所有的都有这个设置的吧。

2. 你说的“sqlbulkcopy”方法,是一个库还是什么。它可以解决我的需要是吗。

你说的方法和3#说的方法一样吗,还是说另一种方式。你能把你的方法再说得详细点吗,具体怎么做啊,我对数据库经验较少,还请你多指点,谢谢。
吉普赛的歌 2019-07-16
  • 打赏
  • 举报
回复
引用 8 楼 程序心声 的回复:
[quote=引用 6 楼 吉普赛的歌 的回复:] 1. 如果与钱无关,数据库的恢复模式设置为简单; 2. 数据表尽量去掉多余的索引; 3. 使用 sqlbulkcopy, 写法可以参考 :https://blog.csdn.net/yenange/article/details/78550982 4. #3版主的做法是有效的, 建议1分钟插入一次数据, 这样数据库压力不至于太大, 而且效率很高。
你好,这位朋友。非常感谢你的回答,首先我想表示谢谢。我做的是数据仿真,有大量测试数据,比如波形什么的,不是金钱方面的,但是数据量比较大。 1. 你说的把数据库的恢复模式设置为“简单”,设置为“简单”是有什么作用呢,能解释一下吗。另外,你的这个设置是对哪一种数据库的呢,还是说所有的数据库都有这一项?数据库千差万别,可能也不是所有的都有这个设置的吧。 2. 你说的“sqlbulkcopy”方法,是一个库还是什么。它可以解决我的需要是吗。 你说的方法和3#说的方法一样吗,还是说另一种方式。你能把你的方法再说得详细点吗,具体怎么做啊,我对数据库经验较少,还请你多指点,谢谢。[/quote] 你想太复杂了。 你进的是 sqlserver 版块, 当然是sqlserver. 设置为简单, 在大数据量批量插入的情况下会很快。 sqlbulkcopy 是 .net 插入到 sqlserver 的一种方法, 非常快速。 1分钟之内只收集数据, 到时集中插入到数据库, 我说的和 #3 版主是一样的。
  • 打赏
  • 举报
回复
每次插入的量也要控制
吉普赛的歌 2019-07-13
  • 打赏
  • 举报
回复
1. 如果与钱无关,数据库的恢复模式设置为简单; 2. 数据表尽量去掉多余的索引; 3. 使用 sqlbulkcopy, 写法可以参考 :https://blog.csdn.net/yenange/article/details/78550982 4. #3版主的做法是有效的, 建议1分钟插入一次数据, 这样数据库压力不至于太大, 而且效率很高。
吉普赛的歌 2019-07-13
  • 打赏
  • 举报
回复
你弄的是啥数据这么大?一条数据都几MB的……
程序心声 2019-07-13
  • 打赏
  • 举报
回复
引用 3 楼 卖水果的net 的回复:
楼主研究一下消息队列。

数据来了,先存到消息队列,每隔几分钟,统一写一次。


只有这一种办法吗,还有别的办法吗,有没有其它能提高效率的办法啊,谢谢。
卖水果的net 2019-07-12
  • 打赏
  • 举报
回复
楼主研究一下消息队列。 数据来了,先存到消息队列,每隔几分钟,统一写一次。
程序心声 2019-07-12
  • 打赏
  • 举报
回复
那我如何能提高插入的效率呢,难道就一条一条插?那是不是太慢了

引用 1 楼 卖水果的net 的回复:
有间隙的两个语句,不能使用事务
卖水果的net 2019-07-12
  • 打赏
  • 举报
回复
有间隙的两个语句,不能使用事务

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧