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());
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/92440.html
標籤:MySQL
上一篇:關于代碼庫的問題
