这样一个需求:
有一个队列,通过消息机制不断往其中添加数据。队列中的数据需要实时存储到数据库中。
存储到数据库耗时较长。
有什么样的方案可以解决这样的问题。
不想通过定时器之类去扫描这个队列。
如果你这个队列是 MSMQ 的话,就比较好办,这样 MSMQ 不需要你通过定时器去扫描。
如果是你自己实现的队列的话,就比较困难,如果不想通过定时器去扫描,那么你就需要自己实现回调机制,即插入队列的时候,检查回调是否已经触发,如果是则追加到队尾,然后返回,如果不是,则追加到队尾后还要触发一次回调。回调函数在执行时要不停的检查队列是否有消息,有则处理,没有则退出当前执行线程。
再来说从队列取到消息后,如果快速更新的问题,记住一定要用异步I/O方式,如果你使用的是 ADO.NET 的话,那么请使用 SqlCommand.BeginExecute 方式执行插入。如果不是的话,你应该尽量找到你的数据库客户端组件的异步I/O方法来执行插入,如果实在没有,则可以通过线程来模拟异步操作,但是要注意控制插入线程的数量。
谢谢!
最担心的问题是这个队列中的数据会不会得到及时的处理,要不然这个队列越来越大
怎么能做到实时同步?