论坛首页 Java企业应用论坛

关于性能优化

浏览 39925 次
精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-11-19  
ironsabre 写道
qdexception 写道
ouchxp 写道
新手避免性能问题,就让他按规范操作就可以.(不许循环里调用数据库....XXXX)


俺是新手,想问一下,如果不在循环里调用数据库,一般都是用什么解决方案?

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。

像这样的需求应该怎么实现?

先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

俺做逻辑判断所需要的数据挺多的,例如要先查A表,再查B表,再查C表,再查D表,而A,B,C,D表都超过百万甚至上千万数据。

像这种情况一般都怎么解决呢?望指教!


密集表查询比较适合用pl/sql来解决。


数据库性能高就直接存储过程处理
0 请登录后投票
   发表时间:2010-11-19   最后修改:2010-11-19
qdexception 写道

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。
先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

大批量复杂数据处理就写PL/SQL,不想放在PL/SQL里就用缓存.上内存数据库.
如果程序要求实时性不高,直接用select update语句可以做到批量的处理.
好好考虑下是否是数据库或程序逻辑设计不合理.
0 请登录后投票
   发表时间:2010-12-04  
喜欢javaeye
0 请登录后投票
   发表时间:2010-12-07  
ouchxp 写道
qdexception 写道

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。
先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

大批量复杂数据处理就写PL/SQL,不想放在PL/SQL里就用缓存.上内存数据库.
如果程序要求实时性不高,直接用select update语句可以做到批量的处理.
好好考虑下是否是数据库或程序逻辑设计不合理.


前几天又有需求优化那个功能(其实就是一个比较复杂的业务算法)

那个功能的大概需求是:加载一个拓扑结构,根据N条规则进行分析后,将分析后的数据插入数据库。

用了2种方法实现:
1,一次性关联了3,4张千万数据量的表查出所有能用到的数据,之后进行相关操作后插入。
2,不论是拓扑还是关联的其他表,都是需要数据的时候现去查,之后进行相关操作后插入。

第一种方法中,那一条sql要运行接近2秒才能出结果,最后经测试,性能跟第二种差不多,对数据库压力稍微小点。

但是现在的需求是,要求在15分钟以内完成3000多次流程:运行我写的这个算法前要现进行文件的写入操作(约1千行的xml文件),之后还要读取这个文件。

后来开了20个线程同时跑,貌似还满足不了这个需求,搞的现在也头晕脑胀的。

你有碰到过类似的情况么? 这种情况一般都是怎么解决的? 有什么好的方案没?
0 请登录后投票
   发表时间:2010-12-07  
qdexception 写道
ouchxp 写道
qdexception 写道

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。
先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

大批量复杂数据处理就写PL/SQL,不想放在PL/SQL里就用缓存.上内存数据库.
如果程序要求实时性不高,直接用select update语句可以做到批量的处理.
好好考虑下是否是数据库或程序逻辑设计不合理.


前几天又有需求优化那个功能(其实就是一个比较复杂的业务算法)

那个功能的大概需求是:加载一个拓扑结构,根据N条规则进行分析后,将分析后的数据插入数据库。

用了2种方法实现:
1,一次性关联了3,4张千万数据量的表查出所有能用到的数据,之后进行相关操作后插入。
2,不论是拓扑还是关联的其他表,都是需要数据的时候现去查,之后进行相关操作后插入。

第一种方法中,那一条sql要运行接近2秒才能出结果,最后经测试,性能跟第二种差不多,对数据库压力稍微小点。

但是现在的需求是,要求在15分钟以内完成3000多次流程:运行我写的这个算法前要现进行文件的写入操作(约1千行的xml文件),之后还要读取这个文件。

后来开了20个线程同时跑,貌似还满足不了这个需求,搞的现在也头晕脑胀的。

你有碰到过类似的情况么? 这种情况一般都是怎么解决的? 有什么好的方案没?

1.流程中还有没有可以合并的余地.?
比如查寻一条sql 提出更多的数据
把巨量的数据变成内存中的数据.
整理变更后
批量更新.
2.不能合并的流程的话可以尝试使用更好的sql 很多人喜欢写200行带逻辑的sql
提高硬件也是一种办法.
0 请登录后投票
   发表时间:2010-12-07  
抛出异常的爱 写道
qdexception 写道
ouchxp 写道
qdexception 写道

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。
先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

大批量复杂数据处理就写PL/SQL,不想放在PL/SQL里就用缓存.上内存数据库.
如果程序要求实时性不高,直接用select update语句可以做到批量的处理.
好好考虑下是否是数据库或程序逻辑设计不合理.


前几天又有需求优化那个功能(其实就是一个比较复杂的业务算法)

那个功能的大概需求是:加载一个拓扑结构,根据N条规则进行分析后,将分析后的数据插入数据库。

用了2种方法实现:
1,一次性关联了3,4张千万数据量的表查出所有能用到的数据,之后进行相关操作后插入。
2,不论是拓扑还是关联的其他表,都是需要数据的时候现去查,之后进行相关操作后插入。

第一种方法中,那一条sql要运行接近2秒才能出结果,最后经测试,性能跟第二种差不多,对数据库压力稍微小点。

但是现在的需求是,要求在15分钟以内完成3000多次流程:运行我写的这个算法前要现进行文件的写入操作(约1千行的xml文件),之后还要读取这个文件。

后来开了20个线程同时跑,貌似还满足不了这个需求,搞的现在也头晕脑胀的。

你有碰到过类似的情况么? 这种情况一般都是怎么解决的? 有什么好的方案没?

1.流程中还有没有可以合并的余地.?
比如查寻一条sql 提出更多的数据
把巨量的数据变成内存中的数据.
整理变更后
批量更新.
2.不能合并的流程的话可以尝试使用更好的sql 很多人喜欢写200行带逻辑的sql
提高硬件也是一种办法.


1,现在可以用一条sql查出一次用的数据,但问题是3000多次要15分钟内执行完的话,只运行这条sql时间都跟不上。

2,现在只能想办法优化sql了,不知道千万级数据量的3表左连效果一般怎么实现比较快?
0 请登录后投票
   发表时间:2010-12-07  
qdexception 写道
抛出异常的爱 写道
qdexception 写道
ouchxp 写道
qdexception 写道

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。
先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

大批量复杂数据处理就写PL/SQL,不想放在PL/SQL里就用缓存.上内存数据库.
如果程序要求实时性不高,直接用select update语句可以做到批量的处理.
好好考虑下是否是数据库或程序逻辑设计不合理.


前几天又有需求优化那个功能(其实就是一个比较复杂的业务算法)

那个功能的大概需求是:加载一个拓扑结构,根据N条规则进行分析后,将分析后的数据插入数据库。

用了2种方法实现:
1,一次性关联了3,4张千万数据量的表查出所有能用到的数据,之后进行相关操作后插入。
2,不论是拓扑还是关联的其他表,都是需要数据的时候现去查,之后进行相关操作后插入。

第一种方法中,那一条sql要运行接近2秒才能出结果,最后经测试,性能跟第二种差不多,对数据库压力稍微小点。

但是现在的需求是,要求在15分钟以内完成3000多次流程:运行我写的这个算法前要现进行文件的写入操作(约1千行的xml文件),之后还要读取这个文件。

后来开了20个线程同时跑,貌似还满足不了这个需求,搞的现在也头晕脑胀的。

你有碰到过类似的情况么? 这种情况一般都是怎么解决的? 有什么好的方案没?

1.流程中还有没有可以合并的余地.?
比如查寻一条sql 提出更多的数据
把巨量的数据变成内存中的数据.
整理变更后
批量更新.
2.不能合并的流程的话可以尝试使用更好的sql 很多人喜欢写200行带逻辑的sql
提高硬件也是一种办法.


1,现在可以用一条sql查出一次用的数据,但问题是3000多次要15分钟内执行完的话,只运行这条sql时间都跟不上。

2,现在只能想办法优化sql了,不知道千万级数据量的3表左连效果一般怎么实现比较快?

预分析
将你需要的数据
预分析成少量的数量.
之后在少量数据中查找
0 请登录后投票
   发表时间:2010-12-07  
预分析是用sql过滤某些结果么?

现在需要的数据量也并不大   一次运行也就一千条左右

但问题是要运行3000多遍   而且时间只给15分钟
0 请登录后投票
   发表时间:2010-12-07  
qdexception 写道
预分析是用sql过滤某些结果么?

现在需要的数据量也并不大   一次运行也就一千条左右

但问题是要运行3000多遍   而且时间只给15分钟

为什么不能只运行一次把1K多条放到cache中去呢?
0 请登录后投票
   发表时间:2010-12-30  
ironsabre 写道
qianhd 写道
对于新手 写的时候动动脑子 别写出内存泄漏的代码 就谢天谢地了

有些人习惯性的爱写内存泄漏的代码
真不知道怎么想的


我觉得新手想要写出内存泄漏的代码是很难的,或者说你让他写一段内存泄漏的代码他都写不出来。要不你写一个试试?

int [] i =new int[1000000000];
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics