接收UDP数据,每秒钟1200条,写的存储过程,表里一共四个字段,1分钟2000条很轻松的就插入数据库了可是1秒钟1200条,测试的时候会少将近1万条,有什么办法能实现快速的插入,插入数据用的是线程池。应该怎么解决呢

解决方案 »

  1.   

    这与数据库无关,1秒钟1200条,可能是丢包了,而不是数据库的问题
    udp发送的过快有时就会丢包,只要数据包不完整就丢掉,不接收。
      

  2.   

    我是本机对本机发的。。也存在丢包的情况吗,我测试的结果是一分钟72000条,能存入65000条左右。。数据库是SQL SERVER2008
      

  3.   


    本机对本机也有可能丢包的,你要完整性的,就用TCP不容易丢包。
    特别在单次发送包较大的情况下,udp比效容易丢包。TCP接收的完整性比效好。
      

  4.   


    本机测试,丢掉一般数据也是“正常”的。udp丝毫也并不保证接收端能够接收到,本机和别的机器并没有什么区别。难道你不知道?
      

  5.   

    如果你想测试,那么就把数据保存在内存中,不要写入数据库。这样在一台极高性能的pc服务器上,也许能够提高“成功率”。udp就好比说是快递公司只管把邮件扔到私人的汽车上,就算是“投递成功”了,根本不确认是否送了、是否签收了。能够送达,纯粹看人家udp的“心情”。
      

  6.   

    用TCP协议才能确保发送端与接对端是一一对称的。
      

  7.   

    如果是插入速度问题,试试SqlBulkCopy
      

  8.   

    这个应该根本不是数据库插入速度问题
    UDP是面向无连接的协议,意思就是,哪怕你要连接的对象根本不在网络上,你的数据也能发送出去,而且每条数据的路径不同,会导致你收到的数据和发送数据的顺序不一致,也就是说,使用UDP传输,你不能简单的看你发了多少条,然后存了多少条来评价你的系统性能。
    我觉得这个实验可以这么做,用3个数据来进行分析:发送数据的条数,实际接收数据的条数,插入到数据库中的条数
    如果你觉得SQL一分钟插入70000条数据有问题,那你就单纯的开多线程尽量往数据库里插数据,看它一分钟能插入多少条