001: /*
002: * $Id: DatabaseStartup.java,v 1.4 2005/05/02 22:32:03 ahimanikya Exp $
003: * =======================================================================
004: * Copyright (c) 2005 Axion Development Team. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above
011: * copyright notice, this list of conditions and the following
012: * disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The names "Tigris", "Axion", nor the names of its contributors may
020: * not be used to endorse or promote products derived from this
021: * software without specific prior written permission.
022: *
023: * 4. Products derived from this software may not be called "Axion", nor
024: * may "Tigris" or "Axion" appear in their names without specific prior
025: * written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
028: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
029: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
030: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
031: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
032: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
033: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
034: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
035: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
036: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
037: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
038: * =======================================================================
039: */
040: package org.axiondb.profile;
041:
042: import java.sql.Connection;
043: import java.sql.DriverManager;
044: import java.sql.PreparedStatement;
045: import java.sql.ResultSet;
046: import java.sql.SQLException;
047: import java.sql.Statement;
048: import java.util.Random;
049:
050: /**
051: * @author Rodney Waldhoff
052: */
053: public class DatabaseStartup {
054: static {
055: try {
056: Class.forName("org.axiondb.jdbc.AxionDriver");
057: } catch (Exception e) {
058: e.printStackTrace();
059: }
060: }
061:
062: public static void main(String[] args) throws Exception {
063: String connectString = "jdbc:axiondb:test:testdb";
064: int numLoops = 10;
065: boolean insert = false;
066:
067: switch (args.length) {
068: case 3:
069: insert = Boolean.valueOf(args[2]).booleanValue();
070: case 2:
071: connectString = args[1];
072: case 1:
073: numLoops = Integer.parseInt(args[0]);
074: break;
075: }
076:
077: System.out.println("Connect String: " + connectString);
078: System.out.println("Loops: " + numLoops);
079:
080: System.out.println("Running...");
081: System.out.println("");
082:
083: if (insert) {
084: insertRows(numLoops, connectString);
085: } else {
086: loadDatabase(numLoops, connectString);
087: }
088:
089: }
090:
091: private static void loadDatabase(int numLoops, String connectString)
092: throws SQLException {
093: long start = System.currentTimeMillis();
094: for (int i = 0; i < numLoops; i++) {
095: long loopstart = System.currentTimeMillis();
096: Connection conn = DriverManager
097: .getConnection(connectString);
098: Statement stmt = conn.createStatement();
099: ResultSet rset = stmt.executeQuery("select 1");
100: rset.next();
101: rset.close();
102: stmt.execute("shutdown");
103: conn.close();
104: long loopstop = System.currentTimeMillis();
105: System.out.println("Elapsed Time: "
106: + (loopstop - loopstart) + " ms");
107: }
108: long stop = System.currentTimeMillis();
109: System.out.println("Total Time: " + (stop - start) + " ms");
110: System.out.println("Average: " + ((stop - start) / numLoops)
111: + " ms");
112: }
113:
114: private static final Random _random = new Random();
115:
116: private static void insertRows(int numRows, String connectString)
117: throws SQLException {
118: long start = System.currentTimeMillis();
119: Connection conn = DriverManager.getConnection(connectString);
120: {
121: Statement stmt = conn.createStatement();
122: stmt
123: .execute("create table foo ( id int primary key, other int, name varchar(1000) )");
124: stmt.close();
125: }
126: conn.setAutoCommit(false);
127: PreparedStatement pstmt = conn
128: .prepareStatement("insert into foo values ( ?, ?, ? )");
129: for (int i = 0; i < numRows; i++) {
130: pstmt.setInt(1, i);
131: pstmt.setInt(2, _random.nextInt());
132: pstmt.setString(3, randomString());
133: pstmt.execute();
134: if (i % 1000 == 0) {
135: conn.commit();
136: }
137: }
138: pstmt.close();
139: conn.commit();
140: conn.close();
141: long stop = System.currentTimeMillis();
142: System.out.println("Total Time: " + (stop - start) + " ms");
143: }
144:
145: private static final String randomString() {
146: switch (_random.nextInt(10)) {
147: case 0:
148: return "Mauris auctor. Etiam dignissim. Aliquam ipsum quam, varius quis, vestibulum at, elementum nec, arcu. Fusce ipsum dui, dictum vehicula, iaculis non, tempor at, tortor. Nam dignissim. Sed placerat justo vitae ligula. Morbi ac libero. Nam varius pede ac sapien. Ut scelerisque, mi.";
149: case 1:
150: return "X";
151: case 2:
152: return "Nam varius pede ac sapien. Ut scelerisque, mi.";
153: case 3:
154: return "Fusce ipsum dui, dictum vehicula, iaculis non, tempor at, tortor.";
155: case 4:
156: return "Dignissim, Etiam ";
157: case 5:
158: return "Morbi ac libero.";
159: case 6:
160: return "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin dictum ultricies mauris. Curabitur nec lorem. Duis ultrices semper lacus. Quisque.";
161: case 7:
162: return "012-345-678-901-234-567-890-123-456-789-012-345-678-90";
163: case 8:
164: return LONG;
165: case 9:
166: return VERY_LONG;
167: default:
168: return "elephant";
169:
170: }
171: }
172:
173: private static String LONG;
174: private static String VERY_LONG;
175: static {
176: StringBuffer bufLong = new StringBuffer();
177: StringBuffer bufVery = new StringBuffer();
178: for (int i = 0; i < 255; i++) {
179: bufLong.append("x");
180: bufVery.append(i);
181: }
182: LONG = bufLong.toString();
183: VERY_LONG = bufVery.toString();
184: }
185: }
|