大量数据情况下单线程插入和多线程(高并发)insert数据库的性能测试
2017-07-14 10:36
671 查看
public class ThreadImport {
static Connection conn;
public void multiThreadImport( final int ThreadNum){
final CountDownLatch cdl= new CountDownLatch(ThreadNum);
long starttime=System.currentTimeMillis();
for(int k=1;k<=ThreadNum;k++){
new Thread(new Runnable() {
@Override
public void run() {
// 获得连接
try {
conn = (new DatabaseUtils.Builder().setHost("localhost").setDbName("study").setUser("study")
.setPassword("123").builder()).getConection();
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//插入500/线程数条数据
for(int i=1;i<=500/ThreadNum;i++){
String uuid=UUID.randomUUID().toString();
try {
PreparedStatement
ps = conn.prepareStatement("INSERT into demo(name,adress) values (?, ?)");
// ps.addBatch("insert into demo(name,adress) values('"+uuid+"','"+uuid+"')");
ps.setString(1, uuid);
ps.setString(2, uuid);
ps.executeUpdate();
if(i%500==0){
ps.executeBatch(); //500条执行一次
System.out.println("INSERT into demo(name,adress) values " + uuid + uuid);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
cdl.countDown();
}
}).start();
}
try {
cdl.await();
long spendtime=System.currentTimeMillis()-starttime;
System.out.println( ThreadNum+"个线程花费时间:"+spendtime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
ThreadImport ti=new ThreadImport();
ti.multiThreadImport(1);
System.out.println("+++1个线程结束+++");
ti.multiThreadImport(5);
System.out.println("+++5个线程结束+++");
ti.multiThreadImport(8);
System.out.println("+++8个线程结束+++");
ti.multiThreadImport(10);
System.out.println("+++10个线程结束+++");
ti.multiThreadImport(20);
System.out.println("+++20个线程结束+++");
ti.multiThreadImport(40);
System.out.println("+++40个线程结束+++");
System.out.println("笔记本CPU数:"+Runtime.getRuntime().availableProcessors());
}
}
static Connection conn;
public void multiThreadImport( final int ThreadNum){
final CountDownLatch cdl= new CountDownLatch(ThreadNum);
long starttime=System.currentTimeMillis();
for(int k=1;k<=ThreadNum;k++){
new Thread(new Runnable() {
@Override
public void run() {
// 获得连接
try {
conn = (new DatabaseUtils.Builder().setHost("localhost").setDbName("study").setUser("study")
.setPassword("123").builder()).getConection();
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//插入500/线程数条数据
for(int i=1;i<=500/ThreadNum;i++){
String uuid=UUID.randomUUID().toString();
try {
PreparedStatement
ps = conn.prepareStatement("INSERT into demo(name,adress) values (?, ?)");
// ps.addBatch("insert into demo(name,adress) values('"+uuid+"','"+uuid+"')");
ps.setString(1, uuid);
ps.setString(2, uuid);
ps.executeUpdate();
if(i%500==0){
ps.executeBatch(); //500条执行一次
System.out.println("INSERT into demo(name,adress) values " + uuid + uuid);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
cdl.countDown();
}
}).start();
}
try {
cdl.await();
long spendtime=System.currentTimeMillis()-starttime;
System.out.println( ThreadNum+"个线程花费时间:"+spendtime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
ThreadImport ti=new ThreadImport();
ti.multiThreadImport(1);
System.out.println("+++1个线程结束+++");
ti.multiThreadImport(5);
System.out.println("+++5个线程结束+++");
ti.multiThreadImport(8);
System.out.println("+++8个线程结束+++");
ti.multiThreadImport(10);
System.out.println("+++10个线程结束+++");
ti.multiThreadImport(20);
System.out.println("+++20个线程结束+++");
ti.multiThreadImport(40);
System.out.println("+++40个线程结束+++");
System.out.println("笔记本CPU数:"+Runtime.getRuntime().availableProcessors());
}
}
相关文章推荐
- 大量数据情况下单线程插入和多线程insert数据库的性能测试
- 数据库插入大量数据性能测试——批处理+事务VS普通插入
- 使用JDBC插入大量数据的性能测试
- 使用JDBC插入大量数据的性能测试
- C# 多线程并发处理数据库数据,发送信号等待处理完统一插入
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- 使用JDBC插入大量数据的性能测试
- 数据库压力测试--MySQL数据库快速插入大量数据
- C# 多线程并发处理数据库数据,发送信号等待处理完统一插入.
- 并发insert情况下会发生重复的数据插入问题
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- 使用JDBC插入大量数据的性能测试
- 并发下,使用redis防止数据重复插入(数据库未对表字段设置唯一情况下)
- C# 多线程并发处理数据库数据,发送信号等待处理完统一插入.(转)
- PG数据库单表插入大量数据引发性能故障
- 并发insert情况下会发生重复的数据插入问题
- 并发insert情况下会发生重复的数据插入问题
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- 并发insert情况下会发生重复的数据插入问题
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例