A 系统要将 一些数据传给 B系统 
2个系统 数据库 是隔离的现在的方法 是 A 系统 在一定的状态下 调用  系统B 的webservice,传给 B系统插入 B数据库中,但是 每次传输的数据有点多,速度 很慢,需要10多分钟才能传完一个批次的数据,你可能 想到 能不能一次 少传输点 数据 ,这个办法 先不考虑,因为必须一次 传1个批次,1个批次的数据不能减少了因为必须 一次 传输很多数据 请各位有什么好的想法能告诉我,交流交流!!!

解决方案 »

  1.   

    可以  用ETL工具  ,写个定时执行的脚本   
      

  2.   

    用socket传?webservice走的http,慢吧?
      

  3.   

    是的 http的 webservice慢 因为2个系统都是bs的,如果用socket 又要开发新的系统吧
      

  4.   

    你这种 相当于 定时调 webservice 比如15分钟一次
      

  5.   

    不需要 什么http 和  webservice,可以用 ETL工具  你需要 配置好 传输规则 定时触发执行就OK  这与BS 没有关系的 不经过 你的web 服务器
      

  6.   

    ETL,是英文Extract-Transform-Load的缩写,即填充、更新数据仓库的数据抽取、转换、装载的过程。这是实现商业智能之前的数据采集步骤。这一步骤完成之后,对库中数据的数据挖掘、分析处理才可以进行。
      

  7.   

    不,你只需要开发一个socket服务端一个客户端就好了。操作数据库,数据格式定义都采用原来webservice的么好了。
    只是传输用另一个协议而已了。
      

  8.   

    开发量不小啊,以后还要维护  我觉得方法不是最好啊
    况且socket这东西  有 经验的 还没有 
      

  9.   

    使用object流可以实现的,这个东西我做过
      

  10.   

    B 给 A 开放一个 FTP,A 把数据写入文件,通过 FTP 上传至 B 的 FTP 目录中。A 上传完之后,调用 B 的 Web 服务告诉之 B 文件已经传完,你可以去读取这个文件了。
      

  11.   

    你的解决方案涉及到 几个地方:
    1. 数据写文件,
    2。你还需要ftp上传
    3 b去读取还需要解析文件
    实现起来都不困难,但是总感觉 不是 最好的方案,不过还是谢谢 火龙果啊 
      

  12.   

    问题是数据是一个很大的数据,还是很多很小的数据。如果是一个很大的数据的话,说实话,http那点开销忽略不计。而且如果不是复杂的对象或者二进制数据结构的话,webservice的那点marshal的开销也忽略不计。
    所以你最好说清楚你的数据的情况
      

  13.   

    对于webservice,大的数据最好采用MTOM附件传输好,否则将数据都转化为BASE64编码,
    开销太大,LZ最好把你webservice的具体实现告诉大家。
      

  14.   

    ETL感觉王道。
    我up一下这位仁兄。
      

  15.   


    用FTP修改不会很大吧!
    数据放在excle中!
      

  16.   

    B 给 A 开放一个 FTP,A 把数据写入文件,通过 FTP 上传至 B 的 FTP 目录中。A 上传完之后,调用 B 的 Web 服务告诉之 B 文件已经传完,你可以去读取这个文件了。
      

  17.   

    1. 如果你的系统必须采用webservice(比如Java平台去调用.Net平台的服务), 我建议是先压缩再用webservice发布出去,我最近做了这样的事情,效果很明显:50M的东西压缩后为1M,也就是说压缩率为50, 压缩格式很简单,就用JavaAPI中的zip
      

  18.   

    帖一个我用的,希望对你有帮助
    public final class ZipUtils {
    private static final int BUFFER = 2048; private ZipUtils() {
    }; public static InputStream compress(InputStream inputStream, String name) throws IOException {
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(result));
    byte data[] = new byte[BUFFER]; BufferedInputStream origin = new BufferedInputStream(inputStream, BUFFER);
    ZipEntry entry = new ZipEntry(name);
    out.putNextEntry(entry);
    int count = 0;
    while ((count = origin.read(data, 0, BUFFER)) != -1) {
    out.write(data, 0, count);
    }
    origin.close();
    out.close();
    result.close(); return new ByteArrayInputStream(result.toByteArray());
    } public static InputStream inflate(InputStream orginal) throws IOException {
    ByteArrayOutputStream fos = new ByteArrayOutputStream();
    ZipInputStream zis = new ZipInputStream(new BufferedInputStream(orginal));
    ZipEntry entry = null;
    while ((entry = zis.getNextEntry()) != null) {
    int count;
    byte data[] = new byte[BUFFER];
    BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
    while ((count = zis.read(data, 0, BUFFER)) != -1) {
    dest.write(data, 0, count);
    }
    dest.flush();
    dest.close();
    }
    zis.close();
    return new ByteArrayInputStream(fos.toByteArray());
    } public static DataHandler getHandlerFromBytes(byte[] content, String zipName) throws IOException {
    ByteArrayInputStream prepared = new ByteArrayInputStream(content);
    InputStream compressed = ZipUtils.compress(prepared, zipName); return MtomUtils.newDataHandler(compressed);
    }
    }
      

  19.   

    46的思路貌似不错,把减小数据体积。来的直接快捷。不过有一个问题,A,B双方都需要压缩/解压,则:
    1)如果压缩/解压对A,B双方都对等,数据格式、实现难度不大;
    2)如果压缩/解压缩操作耗时不大(至少相比传输时间少得多),压缩体积客观那么可以考虑46楼的方案
      

  20.   

    46的思路貌似不错,把减小数据体积。来的直接快捷。不过有一个问题,A,B双方都需要压缩/解压,则:
    1)如果压缩/解压对A,B双方都对等,数据格式、实现难度不大;
    2)如果压缩/解压缩操作耗时不大(至少相比传输时间少得多),压缩体积客观那么可以考虑46楼的方案
      

  21.   

    46的思路貌似不错,把减小数据体积。来的直接快捷。不过有一个问题,A,B双方都需要压缩/解压,则:
    1)如果压缩/解压对A,B双方都对等,数据格式、实现难度不大;
    2)如果压缩/解压缩操作耗时不大(至少相比传输时间少得多),压缩体积客观那么可以考虑46楼的方案
      

  22.   

    压缩后传输,接收端做解压,然后处理
    或者用json,听说效率上是否会高些,这个楼主可以自己测试下
      

  23.   

    为什么一定要在web应用层面做这种, 直接在数据库层面操作也可以啊。
      

  24.   

    专门写个程序做数据迁移的,我们公司有个产品,转门事负责内网数据和外网数据同步的,很快的。
    公司是trs  北京拓尔思信息技术股份科技有限公司
      

  25.   

    借助成熟的服务(FTP)或中间件(ACE)等来实现,风险相对小。
      

  26.   

    大数据量的操作,直接JDBC,webservice,只是相对来讲,慢,其实也还行的
      

  27.   

    请问楼主数据库是同样的吗? 比如说两个系统的数据库都是oracle 干嘛不做数据库之间的数据同步那,建一个数据库链,用触发器进行数据同步,
      

  28.   

    我以前做过一个两系统数据传递的,通过Servlet方式,B系统有个的监听,A给B传一个XML格式的文件流,B得到文件流后转换为Java对象再保存。
    由于每次传输的数据比较多,把文件流压缩下,比如zip或者gzip格式。当时我们也试过WebServices方式,结果数据大了就不行,没搞定,可能有对WebServices不熟悉有关。
    其实楼上说的ETL不错,这个看你们项目上有没有时间和风险让你们新研究这个了。
      

  29.   

    楼主的提问其实说的不是很清楚。
    你的意思是在保证事物的基础上加快传输速度吗?火龙果的方法其实就不错了,只需再做个压缩而已。
    不想放弃webservice方法可以,但必须改写webservice(其实和放弃也差不多了,因为webservice的本意就是想以面向对象的方式处理数据)
    那就是在A端将要传的数据以某种字符串格式表现,然后通过某个算法压缩之(如果觉得难可先将这个字符串写入文件将文件用某个压缩命令压缩后再将压缩文件读取成字节流数组),再传递就会快了。
    当然接受方的webservice得到这个字符串后要解压并解析出数据,再通过业务方法实现事物。提高速度和webservice没有任何关系,它只负责业务逻辑。想快只能压缩传输的数据,这个和业务无关!
      

  30.   

    為啥不用MQ,傳輸100M都沒有問題。