/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.bench;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Random;
/**
* This is a very simple benchmark application. One table is created
* where rows are inserted, updated, selected (in sequential and random order),
* and then deleted.
*/
public class BenchSimple implements Bench {
Database database;
int records;
public void init(Database db, int size) throws SQLException {
this.database = db;
this.records = size * 60;
db.start(this, "Init");
db.openConnection();
db.dropTable("TEST");
db.setAutoCommit(false);
int commitEvery = 1000;
db.update("CREATE TABLE TEST(ID INT NOT NULL PRIMARY KEY, NAME VARCHAR(255))");
db.commit();
PreparedStatement prep = db.prepare("INSERT INTO TEST VALUES(?, ?)");
for (int i = 0; i < records; i++) {
prep.setInt(1, i);
prep.setString(2, "Hello World " + i);
db.update(prep, "insertTest");
if (i % commitEvery == 0) {
db.commit();
}
}
db.commit();
db.closeConnection();
db.end();
// db.start(this, "Open/Close");
// db.openConnection();
// db.closeConnection();
// db.end();
}
public void runTest() throws SQLException {
PreparedStatement prep;
Database db = database;
Random random = db.getRandom();
db.openConnection();
db.start(this, "Query (random)");
prep = db.prepare("SELECT * FROM TEST WHERE ID=?");
for (int i = 0; i < records; i++) {
prep.setInt(1, random.nextInt(records));
db.queryReadResult(prep);
}
db.end();
db.start(this, "Query (sequential)");
prep = db.prepare("SELECT * FROM TEST WHERE ID=?");
for (int i = 0; i < records; i++) {
prep.setInt(1, i);
db.queryReadResult(prep);
}
db.end();
db.start(this, "Update (random)");
prep = db.prepare("UPDATE TEST SET NAME=? WHERE ID=?");
for (int i = 0; i < records; i++) {
prep.setString(1, "Hallo Welt");
prep.setInt(2, i);
db.update(prep, "updateTest");
}
db.end();
db.start(this, "Delete (sequential)");
prep = db.prepare("DELETE FROM TEST WHERE ID=?");
// delete only 50%
for (int i = 0; i < records; i += 2) {
prep.setInt(1, i);
db.update(prep, "deleteTest");
}
db.end();
db.closeConnection();
db.openConnection();
prep = db.prepare("SELECT * FROM TEST WHERE ID=?");
for (int i = 0; i < records; i++) {
prep.setInt(1, random.nextInt(records));
db.queryReadResult(prep);
}
db.logMemory(this, "Memory Usage");
db.closeConnection();
}
public String getName() {
return "Simple";
}
}