l*******n 发帖数: 35 | 1 请益:
有个稀疏表,11万行,100列。每行大概1~10个数据,位置不定其余都是null
要数据处理,把数据都读一遍,需要读出value 和相应 column name
用jdbc分批读,发现读入resultset之后遍历要花40分钟。
纯用stored procedure读会不会效率高点? |
g*****g 发帖数: 34805 | 2 You should read in batch, say, 10K row at a time, that's all.
You should be able to finish in seconds.
【在 l*******n 的大作中提到】 : 请益: : 有个稀疏表,11万行,100列。每行大概1~10个数据,位置不定其余都是null : 要数据处理,把数据都读一遍,需要读出value 和相应 column name : 用jdbc分批读,发现读入resultset之后遍历要花40分钟。 : 纯用stored procedure读会不会效率高点?
|
l*******n 发帖数: 35 | 3 已经batch读了 现在每次1k row,处理完再JDBC prepared statement读
遍历这1k row x 100 columns,结果放一个> map里 要22秒
不过是在本机跑的还没放server上测试
【在 g*****g 的大作中提到】 : You should read in batch, say, 10K row at a time, that's all. : You should be able to finish in seconds.
|
g*****g 发帖数: 34805 | 4 你这有几个问题,第一可以试试一次10K记录。第二处理应该异步,应该并行。你说单
个操作要22秒是不合理的。你把记录包进一个task,扔进一个threadpool处理,立马就
能快很多倍。接下来要再优化可能要看你的数据结构了。
【在 l*******n 的大作中提到】 : 已经batch读了 现在每次1k row,处理完再JDBC prepared statement读 : 遍历这1k row x 100 columns,结果放一个> map里 要22秒 : 不过是在本机跑的还没放server上测试
|
T*********g 发帖数: 496 | 5 你可以把GC LOG打出来观察一下,看看GC是不是越来越频繁,在看看时间是不是都都花
在了GC上。如果必要的话,可以在调整一下VM的大小。
【在 l*******n 的大作中提到】 : 已经batch读了 现在每次1k row,处理完再JDBC prepared statement读 : 遍历这1k row x 100 columns,结果放一个> map里 要22秒 : 不过是在本机跑的还没放server上测试
|