1. Create Table as shown below
drop diskstore store1; CREATE DISKSTORE STORE1; drop table person; create table person (id int primary key, name varchar(40)) PARTITION BY COLUMN (id) REDUNDANCY 1 PERSISTENT 'STORE1' SYNCHRONOUS;2. Multi Threaded Insert client Code.
package com.pivotal.fe.test;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
public class MultiThreadInsert
{
private String url;
private String driverClassName;
private int RECORDS;
private int COMMIT_POINT;
private int nThreads;
public MultiThreadInsert() throws IOException
{
loadProperties();
}
public void loadProperties() throws IOException
{
Properties props = new Properties();
URL propertiesUrl = ClassLoader.getSystemResource("sqlfiretest.properties");
props.load(propertiesUrl.openStream());
url = (String) props.getProperty("url");
driverClassName = (String) props.getProperty("driverclassname");
RECORDS = Integer.parseInt((String) props.getProperty("records"));
COMMIT_POINT = Integer.parseInt((String) props.getProperty("commit_point"));
nThreads = Integer.parseInt((String) props.getProperty("nThreads"));
}
@SuppressWarnings("unchecked")
public void start() throws InterruptedException, SQLException
{
System.out.printf("Starting %d threads for %d records connecting to %s\n", nThreads, RECORDS, url);
final ExecutorService executorService = Executors.newFixedThreadPool(nThreads);
ArrayList list = new ArrayList();
for (int i = 0; i < nThreads; i++) {
list.add(new RunData(url, driverClassName, i+1));
}
long start = System.currentTimeMillis();
List<Future<?>> tasks = executorService.invokeAll(list, 5, TimeUnit.MINUTES);
for(Future<?> f : tasks){
try {
f.get();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
long end = System.currentTimeMillis() - start;
float elapsedTimeSec = end/1000F;
System.out.println(String.format("Elapsed time in seconds %f", elapsedTimeSec));
executorService.shutdown();
System.exit(0);
}
private class RunData implements Callable
{
int counter = 0;
int increment;
Connection conn;
String url;
String driverClassName;
private RunData(String url, String driverClassName, int increment)
{
this.increment = increment;
this.url = url;
this.driverClassName = driverClassName;
}
public Connection getConnection() throws SQLException, ClassNotFoundException
{
Class.forName(driverClassName);
Connection conn = null;
conn = DriverManager.getConnection(url);
//System.out.println("auto commit = " + conn.getAutoCommit());
return conn;
}
public void run()
{
PreparedStatement stmt = null;
String sql = "insert into person values (?, ?)";
int counter = 0, size = 0;
long startTime, endTime;
int dataSize = RECORDS / nThreads;
try
{
conn = getConnection();
}
catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.printf("Start: %d End: %d \n",(dataSize * (increment - 1)), (dataSize * increment));
try
{
stmt = conn.prepareStatement(sql);
startTime = System.currentTimeMillis();
for (int i = (dataSize * (increment - 1)); i < (dataSize * increment); i++)
{
counter = counter + 1;
size = size + 1;
stmt.setInt(1, i);
stmt.setString(2, "Person" + i);
stmt.addBatch();
if (counter % COMMIT_POINT == 0)
{
stmt.executeBatch();
endTime = System.currentTimeMillis();
System.out.printf("Insert batch of %d records took | %d | milliseconds\n", size, (endTime - startTime));
startTime = System.currentTimeMillis();
size = 0;
}
}
/* there might be more records so call stmt.executeBatch() prior to commit here */
stmt.executeBatch();
//System.out.printf("Number of records submitted %d.\n", counter);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if (stmt != null)
{
try
{
stmt.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public Object call() throws Exception
{
run();
return counter;
}
}
/**
* @param args
* @throws InterruptedException
* @throws SQLException
* @throws IOException
*/
public static void main(String[] args) throws InterruptedException, SQLException, IOException
{
// TODO Auto-generated method stub
MultiThreadInsert test = new MultiThreadInsert();
test.start();
}
}
3. Output when run as follows.Note: This was run on my MAC laptop which had 5 cache servers running on it. This would perform much better if I had 5 physical machines for each of the SQLFire cache server members.
[Fri Jul 05 22:33:47 papicella@:~/vmware/ant-demos/sqlfire/performance-test ] $ ant
Buildfile: /Users/papicella/vmware/ant-demos/sqlfire/performance-test/build.xml
init:
compile:
package:
run-insert-client:
[echo] Starting insert client with jvm args : -server -showversion -Xms512m -Xmx512m
[java] java version "1.6.0_37"
[java] Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
[java] Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
[java]
[java] Starting 8 threads for 1000000 records connecting to jdbc:sqlfire://127.0.0.1:1527/;single-hop-enabled=true
[java] Start: 875000 End: 1000000
[java] Start: 125000 End: 250000
[java] Start: 625000 End: 750000
[java] Start: 500000 End: 625000
[java] Start: 750000 End: 875000
[java] Start: 375000 End: 500000
[java] Start: 250000 End: 375000
[java] Start: 0 End: 125000
[java] Insert batch of 10000 records took | 1541 | milliseconds
[java] Insert batch of 10000 records took | 1544 | milliseconds
[java] Insert batch of 10000 records took | 1548 | milliseconds
[java] Insert batch of 10000 records took | 1551 | milliseconds
[java] Insert batch of 10000 records took | 1552 | milliseconds
[java] Insert batch of 10000 records took | 1554 | milliseconds
[java] Insert batch of 10000 records took | 1560 | milliseconds
[java] Insert batch of 10000 records took | 1568 | milliseconds
[java] Insert batch of 10000 records took | 552 | milliseconds
[java] Insert batch of 10000 records took | 559 | milliseconds
[java] Insert batch of 10000 records took | 563 | milliseconds
[java] Insert batch of 10000 records took | 576 | milliseconds
[java] Insert batch of 10000 records took | 581 | milliseconds
[java] Insert batch of 10000 records took | 618 | milliseconds
[java] Insert batch of 10000 records took | 600 | milliseconds
[java] Insert batch of 10000 records took | 600 | milliseconds
[java] Insert batch of 10000 records took | 630 | milliseconds
[java] Insert batch of 10000 records took | 649 | milliseconds
[java] Insert batch of 10000 records took | 643 | milliseconds
[java] Insert batch of 10000 records took | 656 | milliseconds
[java] Insert batch of 10000 records took | 687 | milliseconds
[java] Insert batch of 10000 records took | 705 | milliseconds
[java] Insert batch of 10000 records took | 705 | milliseconds
[java] Insert batch of 10000 records took | 665 | milliseconds
[java] Insert batch of 10000 records took | 682 | milliseconds
[java] Insert batch of 10000 records took | 612 | milliseconds
[java] Insert batch of 10000 records took | 712 | milliseconds
[java] Insert batch of 10000 records took | 630 | milliseconds
[java] Insert batch of 10000 records took | 646 | milliseconds
[java] Insert batch of 10000 records took | 656 | milliseconds
[java] Insert batch of 10000 records took | 661 | milliseconds
[java] Insert batch of 10000 records took | 686 | milliseconds
[java] Insert batch of 10000 records took | 475 | milliseconds
[java] Insert batch of 10000 records took | 497 | milliseconds
[java] Insert batch of 10000 records took | 499 | milliseconds
[java] Insert batch of 10000 records took | 501 | milliseconds
[java] Insert batch of 10000 records took | 534 | milliseconds
[java] Insert batch of 10000 records took | 530 | milliseconds
[java] Insert batch of 10000 records took | 534 | milliseconds
[java] Insert batch of 10000 records took | 505 | milliseconds
[java] Insert batch of 10000 records took | 534 | milliseconds
[java] Insert batch of 10000 records took | 513 | milliseconds
[java] Insert batch of 10000 records took | 535 | milliseconds
[java] Insert batch of 10000 records took | 550 | milliseconds
[java] Insert batch of 10000 records took | 504 | milliseconds
[java] Insert batch of 10000 records took | 517 | milliseconds
[java] Insert batch of 10000 records took | 528 | milliseconds
[java] Insert batch of 10000 records took | 534 | milliseconds
[java] Insert batch of 10000 records took | 523 | milliseconds
[java] Insert batch of 10000 records took | 531 | milliseconds
[java] Insert batch of 10000 records took | 517 | milliseconds
[java] Insert batch of 10000 records took | 571 | milliseconds
[java] Insert batch of 10000 records took | 598 | milliseconds
[java] Insert batch of 10000 records took | 641 | milliseconds
[java] Insert batch of 10000 records took | 652 | milliseconds
[java] Insert batch of 10000 records took | 650 | milliseconds
[java] Insert batch of 10000 records took | 498 | milliseconds
[java] Insert batch of 10000 records took | 518 | milliseconds
[java] Insert batch of 10000 records took | 542 | milliseconds
[java] Insert batch of 10000 records took | 577 | milliseconds
[java] Insert batch of 10000 records took | 557 | milliseconds
[java] Insert batch of 10000 records took | 529 | milliseconds
[java] Insert batch of 10000 records took | 550 | milliseconds
[java] Insert batch of 10000 records took | 552 | milliseconds
[java] Insert batch of 10000 records took | 525 | milliseconds
[java] Insert batch of 10000 records took | 541 | milliseconds
[java] Insert batch of 10000 records took | 544 | milliseconds
[java] Insert batch of 10000 records took | 522 | milliseconds
[java] Insert batch of 10000 records took | 537 | milliseconds
[java] Insert batch of 10000 records took | 511 | milliseconds
[java] Insert batch of 10000 records took | 554 | milliseconds
[java] Insert batch of 10000 records took | 556 | milliseconds
[java] Insert batch of 10000 records took | 513 | milliseconds
[java] Insert batch of 10000 records took | 503 | milliseconds
[java] Insert batch of 10000 records took | 468 | milliseconds
[java] Insert batch of 10000 records took | 539 | milliseconds
[java] Insert batch of 10000 records took | 581 | milliseconds
[java] Insert batch of 10000 records took | 569 | milliseconds
[java] Insert batch of 10000 records took | 541 | milliseconds
[java] Insert batch of 10000 records took | 544 | milliseconds
[java] Insert batch of 10000 records took | 626 | milliseconds
[java] Insert batch of 10000 records took | 613 | milliseconds
[java] Insert batch of 10000 records took | 662 | milliseconds
[java] Insert batch of 10000 records took | 594 | milliseconds
[java] Insert batch of 10000 records took | 644 | milliseconds
[java] Insert batch of 10000 records took | 637 | milliseconds
[java] Insert batch of 10000 records took | 675 | milliseconds
[java] Insert batch of 10000 records took | 658 | milliseconds
[java] Insert batch of 10000 records took | 608 | milliseconds
[java] Insert batch of 10000 records took | 624 | milliseconds
[java] Insert batch of 10000 records took | 538 | milliseconds
[java] Insert batch of 10000 records took | 511 | milliseconds
[java] Insert batch of 10000 records took | 484 | milliseconds
[java] Insert batch of 10000 records took | 440 | milliseconds
[java] Insert batch of 10000 records took | 462 | milliseconds
[java] Insert batch of 10000 records took | 476 | milliseconds
[java] Elapsed time in seconds 8.502000
BUILD SUCCESSFUL
Total time: 9 seconds
No comments:
Post a Comment