怎么做windows service 高并发插入数据

如何做windows service 高并发插入数据
本帖最后由 fisea 于 2014-11-07 14:57:35 编辑
场景描述:一个计划产生一批任务(insert 一些数据到指定的表)
场景如下:假设我有2000个3个月的计划,一个计划每天至少产生10000条数据,有些计划更多了。我现在写了一个后台服务,没5分钟跑一次,没跑一次就根据计划生成3天的任务。这样子5分钟内无法至少生成3*2000*10000条数据。五分钟后,服务又开始运行了,n个5分钟后发现计划都跑完了,但是生成的任务却漏掉了大部分。

我的解决方法:用线程来并发插入数据,code类似如下:

首先做一方法来生成任务
 
static void Test2_DoWork(object sender, DoWorkEventArgs e)  //生成任务
        {
            try
            {
              //写入数据库代码,完成任务生成
            }
            catch (Exception ex)
            {
                //RestartService();
            }
        }

BackgroundWorker[] bgws = new BackgroundWorker[设备总数];
for(int i=0;i<设备总数,i++){
  //实例化线程和线程操作类
  bgws[i] = new BackgroundWorker();
  //设置线程工作的方法
  bgws[i].DoWork += new DoWorkEventHandler(Test2_DoWork);
  //启用线程
ParameterClass p=new ParameterClass()
  bgws[i].RunWorkerAsync(p)
}

没5分钟就跑一次上面的code
问题1:我发现任务没有同时生成。
问题2:我发现5分钟无法把任务生成完。好多日期的任务都漏掉了。
问题3:运行一段时间服务器cpu达到了100%导致服务器崩溃。

请高手指教,万分感谢。

------解决思路----------------------
首先,第一批数据插入完成再开始下一批的任务是可以做到的,其次就算你多线程操作数据库,也不应该会有数据丢失,除非你代码逻辑存在问题
------解决思路----------------------
catch (Exception ex)
里的内容输出到文件,看到底发生了什么事情
不要瞎猜
------解决思路----------------------
做个历史记录表记录情况就行了,我公司也是这样做的,每天晚上定时执行更新或者下载大量订单,有问题就查看历史记录,不断完善;