Chinaunix

标题: [求助]JavaWeb项目 两个大表 互导 [打印本页]

作者: 709900560    时间: 2012-07-25 15:34
标题: [求助]JavaWeb项目 两个大表 互导
有一张大表,数据量很多。另有一张新表,需要从那个大表把数据导入新表,新表中的个别字段要进行算术运算后再导入。由于特殊原因,要用spring做定时任务,每半小时更新少许数据,以保证服务器的正常运行,求指导,谢谢~
作者: yifangyou    时间: 2012-07-25 16:50
建议用存储过程,类似于mysql和oracle都有定时器,可以执行存储过程。
使用存储过程的好处是
数据库是集合运算,你用java从数据库查出数据,再一条条计算,再插入回去太慢了。
像你这种情况可以这样
例如
A,B表是id int,name varchar(20),age int
我要从A里提取新增的记录到B中,并且age要加1
  1. mysql> create table a (id int,name varchar(20),age int);
  2. Query OK, 0 rows affected (0.01 sec)

  3. mysql> create table b (id int,name varchar(20),age int);
  4. Query OK, 0 rows affected (0.02 sec)

  5. mysql> insert into a (1,'a',20);
复制代码



作者: dyllove98    时间: 2012-07-25 17:25
是一个数据库吗?如果是一个数据库的话直接使用存储过程设置时间调度就行

如果不是同一个数据库,就写一个同步程序,使用SPring调度一下就行(分批处理)
作者: 709900560    时间: 2012-07-26 10:26
yifangyou 发表于 2012-07-25 16:50
建议用存储过程,类似于mysql和oracle都有定时器,可以执行存储过程。
使用存储过程的好处是
数据库是集合 ...


谢谢啊!

领导要求不用存储过程,后台分批insert ,但数据太多,慢了急人,快了我担心服务器挂掉。有没有什么优化的办法,struts+ibatis+string架构的项目
作者: yifangyou    时间: 2012-07-26 12:50
回复 4# 709900560

不用存储过程也可以啊,就是用java执行sql时,尽量使用集合操作(可以使用临时表),减少一条条操作,也不要把数据取出来,这样会快很多,担心快而把数据库弄挂完全没有必要
   
作者: robinjim    时间: 2012-08-07 14:43
用etl工具,kettle,无需编程。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2