我做了个timesten与oracle的性能测试,分10次,每次insert20万条记录,但是发现timesten的速度竟然鳗鱼oracle。测试结果如下:
timesten:29s
oracle:13s不是说timesten会比传统的关系型数据库快10倍吗?那为什么会出现这种情况?或者是timesten配置的问题?
测试timesten的代码:
import java.sql.Connection;
import java.util.Date;
import java.util.Random;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TT_Test
{
public static long connTime = 0;
public void insertData()
{
try
{
long begin,end;
begin=new Date().getTime();
//远程连接需要的url,程序和TT不在一台服务器。需要提前定义好DSN
String url = "jdbc:timesten:client:dsn=client_ttdb";
try
{
//加载TT的驱动程序
Class.forName("com.timesten.jdbc.TimesTenDriver");
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}
//获得连接
Connection ttcon = DriverManager.getConnection(url);
end = new Date().getTime();
connTime += end - begin; final int MAX_VALUE = 1000;
final int MAX_ID = 200000; ttcon.setAutoCommit(false);
String sqlstr = "insert into realdata values (?)";
PreparedStatement pstmt = ttcon.prepareStatement(sqlstr);
Random random = new Random();//创建random对象
double value = random.nextDouble() * MAX_VALUE;
for (int i = 1; i <= MAX_ID; i++)
{
pstmt.setDouble(1, value);
pstmt.addBatch();
pstmt.clearParameters();
}
pstmt.executeBatch();
ttcon.commit();
System.out.println("insert done");
//关闭操作 数据集 会话 连接
try
{
pstmt.close();
ttcon.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
catch(SQLException e)
{
e.printStackTrace();
}
} public static void main(String[] args)
{
long begin,end,time;
begin=new Date().getTime();
for (int i = 0; i < 10; i++)
{
new TT_Test().insertData();
}
end = new Date().getTime();
time = end - begin;
System.out.println("运行时间为:" + time + "ms");
System.out.println("连接时间为:" + TT_Test.connTime + "ms");
//29s,2822ms
}
}
测试oracle的代码:import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.Random;public class Oracle_Test
{
public static long connTime = 0;
public void test()
{
// 创建数据库连接
try
{
long begin,end;
begin=new Date().getTime();
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@218.193.126.43:1521:orcl", "system", "password");
end = new Date().getTime();
connTime += end - begin; final int MAX_VALUE = 1000;
final int MAX_ID = 200000; conn.setAutoCommit(false);
String sqlstr = "insert into realdata values (?)";
PreparedStatement pstmt = conn.prepareStatement(sqlstr);
Random random = new Random();//创建random对象
double value = random.nextDouble() * MAX_VALUE;
for (int i = 1; i <= MAX_ID; i++)
{
pstmt.setDouble(1, value);
pstmt.addBatch();
pstmt.clearParameters();
}
pstmt.executeBatch();
conn.commit();
System.out.println("insert done");
//关闭操作 数据集 会话 连接
try
{
pstmt.close();
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
long begin,end,time;
begin=new Date().getTime();
for (int i = 0; i < 10; i++)
{
new Oracle_Test().test();
}
end = new Date().getTime();
time = end - begin;
System.out.println("运行时间为:" + time + "ms");
System.out.println("连接时间为:" + Oracle_Test.connTime + "ms");
//13s,804ms
}
}
timesten:29s
oracle:13s不是说timesten会比传统的关系型数据库快10倍吗?那为什么会出现这种情况?或者是timesten配置的问题?
测试timesten的代码:
import java.sql.Connection;
import java.util.Date;
import java.util.Random;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TT_Test
{
public static long connTime = 0;
public void insertData()
{
try
{
long begin,end;
begin=new Date().getTime();
//远程连接需要的url,程序和TT不在一台服务器。需要提前定义好DSN
String url = "jdbc:timesten:client:dsn=client_ttdb";
try
{
//加载TT的驱动程序
Class.forName("com.timesten.jdbc.TimesTenDriver");
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}
//获得连接
Connection ttcon = DriverManager.getConnection(url);
end = new Date().getTime();
connTime += end - begin; final int MAX_VALUE = 1000;
final int MAX_ID = 200000; ttcon.setAutoCommit(false);
String sqlstr = "insert into realdata values (?)";
PreparedStatement pstmt = ttcon.prepareStatement(sqlstr);
Random random = new Random();//创建random对象
double value = random.nextDouble() * MAX_VALUE;
for (int i = 1; i <= MAX_ID; i++)
{
pstmt.setDouble(1, value);
pstmt.addBatch();
pstmt.clearParameters();
}
pstmt.executeBatch();
ttcon.commit();
System.out.println("insert done");
//关闭操作 数据集 会话 连接
try
{
pstmt.close();
ttcon.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
catch(SQLException e)
{
e.printStackTrace();
}
} public static void main(String[] args)
{
long begin,end,time;
begin=new Date().getTime();
for (int i = 0; i < 10; i++)
{
new TT_Test().insertData();
}
end = new Date().getTime();
time = end - begin;
System.out.println("运行时间为:" + time + "ms");
System.out.println("连接时间为:" + TT_Test.connTime + "ms");
//29s,2822ms
}
}
测试oracle的代码:import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.Random;public class Oracle_Test
{
public static long connTime = 0;
public void test()
{
// 创建数据库连接
try
{
long begin,end;
begin=new Date().getTime();
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@218.193.126.43:1521:orcl", "system", "password");
end = new Date().getTime();
connTime += end - begin; final int MAX_VALUE = 1000;
final int MAX_ID = 200000; conn.setAutoCommit(false);
String sqlstr = "insert into realdata values (?)";
PreparedStatement pstmt = conn.prepareStatement(sqlstr);
Random random = new Random();//创建random对象
double value = random.nextDouble() * MAX_VALUE;
for (int i = 1; i <= MAX_ID; i++)
{
pstmt.setDouble(1, value);
pstmt.addBatch();
pstmt.clearParameters();
}
pstmt.executeBatch();
conn.commit();
System.out.println("insert done");
//关闭操作 数据集 会话 连接
try
{
pstmt.close();
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
long begin,end,time;
begin=new Date().getTime();
for (int i = 0; i < 10; i++)
{
new Oracle_Test().test();
}
end = new Date().getTime();
time = end - begin;
System.out.println("运行时间为:" + time + "ms");
System.out.println("连接时间为:" + Oracle_Test.connTime + "ms");
//13s,804ms
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货