⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tpcbexample.java

📁 介绍:MySQL是比较出名的数据库软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1997, 1998, 1999, 2000 *	Sleepycat Software.  All rights reserved. * * $Id: TpcbExample.java,v 11.9 2000/04/01 15:52:15 dda Exp $ */package com.sleepycat.examples;import com.sleepycat.db.*;import java.io.FileNotFoundException;import java.util.Calendar;import java.util.Date;import java.util.Random;import java.util.GregorianCalendar;import java.math.BigDecimal;//// This program implements a basic TPC/B driver program.  To create the// TPC/B database, run with the -i (init) flag.  The number of records// with which to populate the account, history, branch, and teller tables// is specified by the a, s, b, and t flags respectively.  To run a TPC/B// test, use the n flag to indicate a number of transactions to run (note// that you can run many of these processes in parallel to simulate a// multiuser test run).//class TpcbExample extends DbEnv{    public static final int TELLERS_PER_BRANCH = 10;    public static final int ACCOUNTS_PER_TELLER = 10000;    public static final int HISTORY_PER_BRANCH = 2592000;    //    // The default configuration that adheres to TPCB scaling rules requires    // nearly 3 GB of space.  To avoid requiring that much space for testing,    // we set the parameters much lower.  If you want to run a valid 10 TPS    // configuration, uncomment the VALID_SCALING configuration    //    // VALID_SCALING configuration    /*    public static final int ACCOUNTS = 1000000;    public static final int BRANCHES = 10;    public static final int TELLERS = 100;    public static final int HISTORY = 25920000;    */    // TINY configuration    /*    public static final int ACCOUNTS = 1000;    public static final int BRANCHES = 10;    public static final int TELLERS = 100;    public static final int HISTORY = 10000;    */    // Default configuration    public static final int ACCOUNTS = 100000;    public static final int BRANCHES = 10;    public static final int TELLERS = 100;    public static final int HISTORY = 259200;    public static final int HISTORY_LEN = 100;    public static final int RECLEN = 100;    public static final int BEGID = 1000000;    // used by random_id()    public static final int ACCOUNT = 0;    public static final int BRANCH = 1;    public static final int TELLER = 2;    private static boolean verbose = false;    private static final String progname = "TpcbExample";    // Program name.    public TpcbExample(String home, int cachesize,                       boolean initializing, int flags)        throws DbException, FileNotFoundException    {        super(0);        set_error_stream(System.err);        set_errpfx(progname);        set_cachesize(0, cachesize == 0 ? 4 * 1024 * 1024 : cachesize, 0);	int local_flags = flags | Db.DB_CREATE;        if (initializing)            local_flags |= Db.DB_INIT_MPOOL;        else            local_flags |= Db.DB_INIT_TXN | Db.DB_INIT_LOCK |                           Db.DB_INIT_LOG | Db.DB_INIT_MPOOL;        open(home, local_flags, 0);        // may throw DbException    }    //    // Initialize the database to the specified number of accounts, branches,    // history records, and tellers.    //    // Note: num_h was unused in the original ex_tpcb.c example.    //    public void    populate(int num_a, int num_b, int num_h, int num_t)    {        Db dbp = null;        int err;        int balance, idnum;        int end_anum, end_bnum, end_tnum;        int start_anum, start_bnum, start_tnum;        int h_nelem;        idnum = BEGID;        balance = 500000;        h_nelem = num_a;        try {            dbp = new Db(this, 0);            dbp.set_h_nelem(h_nelem);            dbp.open("account", null,                     Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);        }        // can be DbException or FileNotFoundException        catch (Exception e1) {            errExit(e1, "Open of account file failed");        }        start_anum = idnum;        populateTable(dbp, idnum, balance, h_nelem, "account");        idnum += h_nelem;        end_anum = idnum - 1;        try {            dbp.close(0);        }        catch (DbException e2) {            errExit(e2, "Account file close failed");        }        if (verbose)            System.out.println("Populated accounts: "                 + String.valueOf(start_anum) + " - " + String.valueOf(end_anum));        //        // Since the number of branches is very small, we want to use very        // small pages and only 1 key per page.  This is the poor-man's way        // of getting key locking instead of page locking.        //        h_nelem = (int)num_b;        try {            dbp = new Db(this, 0);            dbp.set_h_nelem(h_nelem);            dbp.set_h_ffactor(1);            dbp.set_pagesize(512);            dbp.open("branch", null,                     Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);        }        // can be DbException or FileNotFoundException        catch (Exception e3) {            errExit(e3, "Branch file create failed");        }        start_bnum = idnum;        populateTable(dbp, idnum, balance, h_nelem, "branch");        idnum += h_nelem;        end_bnum = idnum - 1;        try {            dbp.close(0);        }        catch (DbException dbe4) {            errExit(dbe4, "Close of branch file failed");        }        if (verbose)            System.out.println("Populated branches: "                 + String.valueOf(start_bnum) + " - " + String.valueOf(end_bnum));        //        // In the case of tellers, we also want small pages, but we'll let        // the fill factor dynamically adjust itself.        //        h_nelem = (int)num_t;        try {            dbp = new Db(this, 0);            dbp.set_h_nelem(h_nelem);            dbp.set_h_ffactor(0);            dbp.set_pagesize(512);            dbp.open("teller", null,                     Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);        }        // can be DbException or FileNotFoundException        catch (Exception e5) {            errExit(e5, "Teller file create failed");        }        start_tnum = idnum;        populateTable(dbp, idnum, balance, h_nelem, "teller");        idnum += h_nelem;        end_tnum = idnum - 1;        try {            dbp.close(0);        }        catch (DbException e6) {            errExit(e6, "Close of teller file failed");        }        if (verbose)            System.out.println("Populated tellers: "                 + String.valueOf(start_tnum) + " - " + String.valueOf(end_tnum));        try {            dbp = new Db(this, 0);            dbp.set_re_len(HISTORY_LEN);            dbp.open("history", null,                     Db.DB_RECNO, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);        }        // can be DbException or FileNotFoundException        catch (Exception e7) {            errExit(e7, "Create of history file failed");        }        populateHistory(dbp, num_h, num_a, num_b, num_t);        try {            dbp.close(0);        }        catch (DbException e8) {            errExit(e8, "Close of history file failed");        }    }    public void    populateTable(Db dbp,                  int start_id, int balance,                  int nrecs, String msg)    {        Defrec drec = new Defrec();        Dbt kdbt = new Dbt(drec.data);        kdbt.set_size(4);                  // sizeof(int)        Dbt ddbt = new Dbt(drec.data);        ddbt.set_size(drec.data.length);   // uses whole array        try {            for (int i = 0; i < nrecs; i++) {                kdbt.set_recno_key_data(start_id + (int)i);                drec.set_balance(balance);                dbp.put(null, kdbt, ddbt, Db.DB_NOOVERWRITE);            }        }        catch (DbException dbe) {            System.err.println("Failure initializing " + msg + " file: " +                               dbe.toString());            System.exit(1);        }    }    public void    populateHistory(Db dbp, int nrecs,                                 int anum, int bnum, int tnum)    {        Histrec hrec = new Histrec();        hrec.set_amount(10);        byte arr[] = new byte[4];                  // sizeof(int)        int i;        Dbt kdbt = new Dbt(arr);        kdbt.set_size(arr.length);        Dbt ddbt = new Dbt(hrec.data);        ddbt.set_size(hrec.data.length);        try {            for (i = 1; i <= nrecs; i++) {                kdbt.set_recno_key_data(i);                hrec.set_aid(random_id(ACCOUNT, anum, bnum, tnum));                hrec.set_bid(random_id(BRANCH, anum, bnum, tnum));                hrec.set_tid(random_id(TELLER, anum, bnum, tnum));                dbp.put(null, kdbt, ddbt, Db.DB_APPEND);            }        }        catch (DbException dbe) {            errExit(dbe, "Failure initializing history file");        }    }    static Random rand = new Random();    public static int    random_int(int lo, int hi)    {        int ret;        int t;        t = rand.nextInt();        if (t < 0)            t = -t;        ret = (int)(((double)t / ((double)(Integer.MAX_VALUE) + 1)) *                          (hi - lo + 1));        ret += lo;        return (ret);    }    public static int    random_id(int type, int accounts, int branches, int tellers)    {        int min, max, num;        max = min = BEGID;        num = accounts;        switch(type) {        case TELLER:            min += branches;            num = tellers;            // Fallthrough        case BRANCH:            if (type == BRANCH)                num = branches;            min += accounts;            // Fallthrough        case ACCOUNT:            max = min + num - 1;        }        return (random_int(min, max));    }    public void    run(int n, int accounts, int branches, int tellers)    {        Db adb = null;        Db bdb = null;        Db hdb = null;        Db tdb = null;        double gtps, itps;        int failed, ifailed, ret, txns;        long starttime, curtime, lasttime;        //        // Open the database files.        //        int err;        try {            adb = new Db(this, 0);            adb.open("account", null, Db.DB_UNKNOWN, 0, 0);            bdb = new Db(this, 0);            bdb.open("branch", null, Db.DB_UNKNOWN, 0, 0);            tdb = new Db(this, 0);            tdb.open("teller", null, Db.DB_UNKNOWN, 0, 0);            hdb = new Db(this, 0);            hdb.open("history", null, Db.DB_UNKNOWN, 0, 0);        }        catch (DbException dbe) {            errExit(dbe, "Open of db files failed");        }        catch (FileNotFoundException fnfe) {            errExit(fnfe, "Open of db files failed, missing file");        }        txns = failed = ifailed = 0;        starttime = (new Date()).getTime();        lasttime = starttime;        while (n-- > 0) {            txns++;            ret = txn(adb, bdb, tdb, hdb, accounts, branches, tellers);            if (ret != 0) {                failed++;                ifailed++;            }            if (n % 5000 == 0) {                curtime = (new Date()).getTime();                gtps = (double)(txns - failed) /		    ((curtime - starttime) / 1000.0);                itps = (double)(5000 - ifailed) /		    ((curtime - lasttime) / 1000.0);                System.out.print(String.valueOf(txns) + " txns " +                                 String.valueOf(failed) + " failed ");                System.out.println(showRounded(gtps, 2) + " TPS (gross) " +                                   showRounded(itps, 2) + " TPS (interval)");                lasttime = curtime;                ifailed = 0;            }        }        try {            adb.close(0);            bdb.close(0);            tdb.close(0);            hdb.close(0);        }        catch (DbException dbe2) {            errExit(dbe2, "Close of db files failed");        }        System.out.println((long)txns + " transactions begun "             + String.valueOf(failed) + " failed");    }    //    // XXX Figure out the appropriate way to pick out IDs.    //    public int    txn(Db adb, Db bdb, Db tdb, Db hdb,        int anum, int bnum, int tnum)    {        Dbc acurs = null;        Dbc bcurs = null;        Dbc hcurs = null;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -