Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在mysql中使用多线程获取数据_Java_Mysql_Multithreading - Fatal编程技术网

Java 如何在mysql中使用多线程获取数据

Java 如何在mysql中使用多线程获取数据,java,mysql,multithreading,Java,Mysql,Multithreading,嗨,我正在尝试从MYSQL数据库中的一个表中获取50K+行。检索所有数据并将其写入文本文件需要20多分钟。我是否可以使用多线程来减少此获取时间并提高代码的效率。任何帮助都将不胜感激 我使用了普通的JDBC连接和ResultSetMetaData从表中获取行 String row = ""; stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from employee_details"

嗨,我正在尝试从MYSQL数据库中的一个表中获取50K+行。检索所有数据并将其写入文本文件需要20多分钟。我是否可以使用多线程来减少此获取时间并提高代码的效率。任何帮助都将不胜感激

我使用了普通的JDBC连接和ResultSetMetaData从表中获取行

String row = "";
    stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from employee_details");
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
while (rs.next()) {
        for (int i = 1; i < columnCount; i++) {
            row = row + rs.getObject(i) + "|";// check
        }
        row = row + "\r\n";
    }

请记住,rs.next将以n个批次从数据库中获取结果。其中n是由JDBC实现定义的数字。我想现在是10点。因此,对于每10个批次,它将再次查询数据库,因此将有一个网络开销-即使它在同一台机器上

仅仅增加这个数字就会导致更快的加载时间

编辑: 加上这个
stmt.setFetchSize(50000);
可能是吧


请注意,这会导致大量内存消耗。

首先,您需要确定瓶颈在哪里。是SQL查询吗?还是通过ResultSet获取行?还是那根巨大的绳子?或者写文件


您需要测量上述算法各个部分的持续时间,并告诉我们结果。如果没有这些知识,就不可能知道如何加快算法的速度

我认为多线程处理根本不会加快速度。想想瓶颈在哪里,是什么——线程会影响到这一点吗?但是尝试一下,看看会发生什么是没有坏处的——你在实验中发现了什么?我尝试过使用简单的JDBC连接和resultmetadata来获取值。需要20分钟。我不确定多线程是否会在这里工作,我不这么认为,因为我认为从磁盘获取数据是一个瓶颈,我不知道线程将如何加快速度,但让我们看看专家们有什么要说的;但获取数据仍然需要19分钟。@BasheerAhmed:但这比20多分钟要好。@HovercraftFullOfEels很抱歉弄糊涂了。20多分钟大约是21分45秒。你可能还需要打一段时间。您也可以将其设置为另一个数字。开始时请尝试1000。使用一个查询获取更多行肯定会加快速度。使用ResultSet获取数据比将数据写入文件要花很多时间。我正在考虑在SQL中使用批处理(使用偏移量)来减少提取时间。您是否尝试在不生成大字符串的情况下进行提取?问题在于生成大字符串。我已经使用了StringBuilder,数据在2秒内被取出。然后我建议你接受我的答案——我认为我的答案在给定的上下文中是标准的,从某种意义上说,它必须先测量,然后才能优化。当然,测量需要确保它只是被测量的一个方面。
BufferedWriter writer = new BufferedWriter(new FileWriter(
    "C:/Users/430398/Desktop/file/abcd.txt"));
    writer.write(row);
    writer.close();