我做了个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
    }
}