+ -
当前位置:首页 → 问答吧 → 怎么做到延迟存储信息到数据库

怎么做到延迟存储信息到数据库

时间:2011-12-17

来源:互联网

当一种操作对数据库操作时间可能过长,例如要用事务写数十个表的数据,让用户长时间等待不好,先验证后给用户一个操作成功的消息,然后把插入操作存入一个执行队列中,延迟存储。
.net是否有这样的解决方案?msmq可否?

作者: popo0027   发布时间: 2011-12-17

可以放到一个后台线程,线程定时将数据存入到数据库中,例如timer,该线程对应用程序提供接口,应用程序只负责往线程里写东西,剩余的时候由线程来操作。

作者: fwyong   发布时间: 2011-12-17

消息队列是需要排队等待的,这种情况下用消息队列,性能上不太好。同上,后台开线程是可以的。可以考虑使用Backgroundworker

作者: ZeroKiseki   发布时间: 2011-12-17

Backgroundworker worker =new Backgroundworker();
worker.DoWork+=new DoWorkEventHandler((sender,e)=>
{
//ToDo
//比如说提示前台用户:当前数据正在加载中....
//事务插入数据
});

worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
{
//ToDo
});

worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
{
//数据已加载完毕
});

实际上Backgroundworker完全可以解决你得问题。

作者: ZeroKiseki   发布时间: 2011-12-17

用个定时器过一阵子再执行存储?

作者: pitsou7   发布时间: 2011-12-17

引用 2 楼 zerokiseki 的回复:
消息队列是需要排队等待的,这种情况下用消息队列,性能上不太好。同上,后台开线程是可以的。可以考虑使用Backgroundworker

非常感谢,BackgroundWorker还没用过,去学习看看。
有一点,当开始对数据库开始操作的时候,提示给用户的是:您操作已成功,其实可能还得1分钟(可能数据被其他线程上锁,也可能正在插入数据,量很大)才能完全把数据插入完毕,如果这时候正好宕机,msmq在server重启后还能继续执行插入。这个优势不好取代。

但是ms队列方式执行sql,是不是必须等到队列中上一个sql执行完毕才能执行下一个sql,而不管是否表是否上锁,从而降低了数据库并发执行的效率?

作者: popo0027   发布时间: 2011-12-17