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要加1mysql> create table a (id int,name varchar(20),age int);
Query OK, 0 rows affected (0.01 sec)

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

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 static/image/common/back.gif
建议用存储过程,类似于mysql和oracle都有定时器,可以执行存储过程。
使用存储过程的好处是
数据库是集合 ...

谢谢啊!

领导要求不用存储过程,后台分批insert ,但数据太多,慢了急人,快了我担心服务器挂掉。有没有什么优化的办法,struts+ibatis+string架构的项目

yifangyou 发表于 2012-07-26 12:50

回复 4# 709900560

不用存储过程也可以啊,就是用java执行sql时,尽量使用集合操作(可以使用临时表),减少一条条操作,也不要把数据取出来,这样会快很多,担心快而把数据库弄挂完全没有必要
   

robinjim 发表于 2012-08-07 14:43

用etl工具,kettle,无需编程。
页: [1]
查看完整版本: [求助]JavaWeb项目 两个大表 互导