大家好,最近客户方要对csv文件大约10MB左右的文件数据一次行追加,删除 
和多次查询。 我这边没环境。 能不能帮帮忙。 用啥技术方案最好,可以的话把执行时间也给写出来,在此谢谢了。 db服务器是unix 我这边是window vb 网速1.5 平时也热忠于帮助其他朋友解决问题,希望大家帮帮忙,谢谢

解决方案 »

  1.   

    由于没用过DB2,只能根据ORACLE大体说一下思路,可以先用VB将数据写成DUMP文件,然后上传到服务器,再用SHELL写一个数据导入脚本,在服务器端执行一下数据导入,速度比逐条提交快许多。
      

  2.   

    lyserver  你好谢谢你的回信这种办法我这边写考虑过,但是这样的话他不能及时处理或者数据一致也可能产生问题
    正向你所说的DB2 他用 *.sqc + shell + *.csv + ftp这种方案被客户否定了。不过还是谢谢你的帮助。刚才我也许没把我的需求说明白,在此追加说明:在客户端直接对数据处理,也就是及时把数据反映到db 中。这样的话用户查询时数据就是最新的了。
    谢谢。希望的各方面的朋友帮帮忙
    还有要是有的朋友知道10万条数据做
    INSERT,DEL,SELECT 各方面的花多少时间
    我这边暂时没环境,一时自己也不能作出测试结果。
    谢谢了
      

  3.   

    lyserver  你好谢谢你的回信这种办法我这边写考虑过,但是这样的话他不能及时处理或者数据一致也可能产生问题
    正向你所说的DB2 他用 *.sqc + shell + *.csv + ftp这种方案被客户否定了。不过还是谢谢你的帮助。刚才我也许没把我的需求说明白,在此追加说明:在客户端直接对数据处理,也就是及时把数据反映到db 中。这样的话用户查询时数据就是最新的了。
    谢谢。希望的各方面的朋友帮帮忙
    还有要是有的朋友知道10万条数据做
    INSERT,DEL,SELECT 各方面的花多少时间
    我这边暂时没环境,一时自己也不能作出测试结果。
    谢谢了
      

  4.   

    在你的DB服务器架个WEB服务,支持PHP或CGI都可以,
    然后写几个脚本方上去(读写数据用),本地数据就不说了,
    远程数据可以通过XMLHTTP提交每条数据内容到指定的脚本来处理,
    虽然通讯时会增加一些带宽,但是作进度条的话会更加人性化。
    这只是个方法,你可以考虑一下。
      

  5.   

    我记得以前我开发过一个 DirectX 3D 的游戏,加载整个模型场景时用了12秒,
    因为加载时没有什么界面,就卡在那一个空白的窗口,真的感觉很久很久。
    其实,我玩 魔兽争霸3 的时候,有些地图进去时要上分钟,我都能接受,因为它
    多了个进度条、还有地图的说明、还有相关的图片。所以界面的一点变化,可以让
    人选择接受或不接受。
      

  6.   

     SupermanKing 谢谢你的回信,你的意见和不错,在这里表示感谢。我现阶段是提案和设计阶段。客户想听听我这边对性能方面的解决方案。这样吧,我现在先把我暂时的想法和大家沟通一下:1 : db连接想用odbc 但是不知道他对10 万条数据的处理是间到底是多少(我这边暂时没环境,还不能自己测试可行性) select,insert,delete 2:select 时分段处理(一次取10件)可能内存不够用其他方面暂时还没想好希望热心的朋友帮帮忙。谢谢静候
      

  7.   

    性能要看具体的东西的,其实关键是时间。
    你的程序和DB服务器通讯需要时间,这个时间可以用压缩技术来节约,
    但同时也会增加压缩和解压的时间,相对网络来说,如果是Internet,
    压缩解压的时间是值得的,对于局域网来说,10M的数据压缩解压还麻烦。
    对于读写数据库来说,服务器的的程序很关键,效率高低虽然和架构以及
    客户端有关,但服务器端的效率才是最关键的。
    还有,在处理海量的数据时,尽量少的统计数据的数量,尽量单条单条的
    去操作数据,这样就是提高速度最好的方法。
      

  8.   

    就ADO来说,这样的程序
    rs.Open "Select * From 表1",conn,3,3
    rsR=rs.RecordCount
    for X=1 to rsR
       ...
       if X<rsR Then rs.MoveNext
    next X
    rs.Close
    会比
    rs.Open "Select count(*)c From 表1",conn,3,3
    rsR=rs!c
    rs.close
    rs.Open "Select * From 表1",conn,3,3
    for X=1 to rsR
       ...
       if X<rsR Then rs.MoveNext
    next X
    rs.Close效率低很多,就数据而言,几千条就会感觉得出
    所以能用语句就用语句,用SQL语句操作也会提高效率
      

  9.   

    SupermanKing 谢谢你的回信,你的见解我也赞同。因为担心一次取出所有数据可能内存不够用
    所以select 时分段处理
    param1 = 0
    param2 = 0
    int i=1
    wihie (true)
     
    param1 = (param1 - 1) * 5000
    param2 = 5000 * i
    rs.Open "Select * From 表1 where row() > " + param1 + " and row() < " + param2,conn,3,3
    rsR=rs.RecordCount 
     if (rsR = 0) break
    for X=1 to rsR 
      ... 
      if X <rsR Then rs.MoveNext 
    next X i  = i+ 1
    loop
    rs.Close 因为现在暂时还没环境,不知这样的话性能会咋样。想请教一下同仁。谢谢在线等
      

  10.   

    建议客户端采用分页处理,就像WEB方式一样
    百度的数据量那么多,也是一页一页处理的
      

  11.   

    对于海量数据,最好用虚表(Virtual List)。Ms Dynamics Ax的ERP就是这样做的。
      

  12.   

    其实通常导入外部数据时进行的 INSERT、DELETE 之类都是很直接的条件判断,如果反复执行10万的数量级的 SQL 语句,这个耗时是非常大的。
    还是建议直接用导入的方案,只不过先导入到一个临时表中,然后根据临时表对目标表进行 INSERT、DELETE,由于规则统一,通常只要 2~3 个 SQL 就能完成。
    最慢的文件传输也只不过 10 秒左右,完全可以做到半分钟~一分钟内查询最新数据。