jdbc使用pipe访问mysql问题

lxch257 2018-04-17 05:15:01
1、jdbc是否支持在linux下使用pipe访问mysql
2、在win10下用相同的java代码不同的url测试读取500万行记录,命名管道(named pipe)要比tcp慢30-50%,文档中说和系统配置相关,我想了解是哪些配置影响的,是如何影响的
3、jdbc url中socketFactory的取值com.mysql.jdbc.NamedPipeSocketFactory和com.mysql.jdbc.StandardSocketFactory工作机制分别是什么样的,如何影响读取效率

测试代码:
CREATE TABLE `tt` (
`pid` int(11) DEFAULT NULL,
`val` varchar(255) DEFAULT NULL,
`pdate` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

import java.sql.*;
import java.util.Date;

public class JavaMysqlSelectExample {
public static void main(String[] args) {
try {
// create our mysql database connection
String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = null;
String query;
if (1 == 2) {
myUrl = "jdbc:mysql://localhost/mydb?useCursorFetch=true";
query = "SELECT * FROM test";
}else if (1==1){
myUrl = "jdbc:mysql://127.0.0.1:3306/mydb?socketFactory=com.mysql.jdbc.StandardSocketFactory&useCursorFetch=true";
//myUrl = "jdbc:mysql://127.0.0.1:3306/mydb?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&useCursorFetch=true";
//myUrl = "jdbc:mysql://address=(protocol=pipe)/mydb?useCursorFetch=true";
//myUrl = "jdbc:mysql://address=(protocol=tcp)(host=localhost)(port=3306)/mydb?useCursorFetch=true";
query = "SELECT * FROM tt";
}
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "root", "root");

export(conn, query);
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
}

public static void export(Connection conn, String query) {
try {
Date dStart = new Date();
// com.mysql.jdbc.Statement st =(com.mysql.jdbc.Statement)conn.createStatement();
// ResultSet rs = st.executeQuery(query);
//st.enableStreamingResults();
Statement st = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.setFetchSize(Integer.MIN_VALUE);
st.setFetchDirection(ResultSet.FETCH_REVERSE);
ResultSet rs = st.executeQuery(query);

int nCount = 0;
while (rs.next()) {
int id = rs.getInt("pid");
String sVal = rs.getString("val");
//Date dateCreated = rs.getDate("pdate");

if (nCount % 2000 == 0) {
//System.out.println(" nCount="+nCount);
}
nCount++;
}
st.close();
Date dEnd = new Date();
long diff = dEnd.getTime() - dStart.getTime();
System.out.println("duration = " + diff+ " nCount="+nCount);
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
}
}
...全文
812 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧