【发布时间】:2017-01-28 22:12:14
【问题描述】:
我正在使用 java 中的多个线程从 vertica 数据库中读取数据。 我有大约 2000 万条记录,并且正在打开 5 个不同的线程,这些线程具有这样的选择查询......
start = threadnum;
while (start*20000<=totalRecords){
select * from tableName order by colname limit 20000 offset start*20000.
start +=5;
}
上面的查询分配了 20K 个不同的记录来从 db 读取到每个线程。 例如,第一个线程将读取前 20k 条记录,然后从 100 000 个位置开始读取 20K 条记录,等等
但我没有得到性能提升。事实上,如果使用单线程读取 2000 万条记录需要 x 秒,那么每个线程从数据库读取几乎需要 x 秒。 不应该比 x 秒(预期 x/5 秒)有一些改进吗?
谁能指出问题出在哪里?
【问题讨论】:
-
按照这个逻辑,您只需将线程数增加
n,即可将总处理时间减少1/n。 -
网络不是多线程的。您可以使用任意数量的线程,但是一旦网络饱和,就是这样,不可能有进一步的改进。
标签: java multithreading