Skip to content
Browse files

Initial commit of YCSB.

Creation of git repository and inital commit of YCSB.
  • Loading branch information...
0 parents commit 24efaff35cb20b4ae730b3f23716ed73fea783d9 @brianfrankcooper committed Apr 19, 2010
Showing with 9,912 additions and 0 deletions.
  1. +163 −0 LICENSE.txt
  2. +9 −0 NOTICE.txt
  3. +38 −0 README
  4. +51 −0 build.xml
  5. +30 −0 doc/coreproperties.html
  6. +59 −0 doc/coreworkloads.html
  7. +98 −0 doc/dblayer.html
  8. BIN doc/images/ycsblogo-small.png
  9. +348 −0 doc/index.html
  10. +86 −0 doc/javadoc/allclasses-frame.html
  11. +86 −0 doc/javadoc/allclasses-noframe.html
  12. +508 −0 doc/javadoc/com/yahoo/ycsb/BasicDB.html
  13. +379 −0 doc/javadoc/com/yahoo/ycsb/Client.html
  14. +270 −0 doc/javadoc/com/yahoo/ycsb/CounterGenerator.html
  15. +467 −0 doc/javadoc/com/yahoo/ycsb/DB.html
  16. +279 −0 doc/javadoc/com/yahoo/ycsb/DBException.html
  17. +252 −0 doc/javadoc/com/yahoo/ycsb/DBFactory.html
  18. +488 −0 doc/javadoc/com/yahoo/ycsb/DBWrapper.html
  19. +325 −0 doc/javadoc/com/yahoo/ycsb/DiscreteGenerator.html
  20. +360 −0 doc/javadoc/com/yahoo/ycsb/FindGoodAB.html
  21. +306 −0 doc/javadoc/com/yahoo/ycsb/FindGoodScrambleVector.html
  22. +279 −0 doc/javadoc/com/yahoo/ycsb/Generator.html
  23. +355 −0 doc/javadoc/com/yahoo/ycsb/IntegerGenerator.html
  24. +354 −0 doc/javadoc/com/yahoo/ycsb/Measurements.html
  25. +328 −0 doc/javadoc/com/yahoo/ycsb/OneMeasurement.html
  26. +390 −0 doc/javadoc/com/yahoo/ycsb/OneMeasurementHistogram.html
  27. +384 −0 doc/javadoc/com/yahoo/ycsb/OneMeasurementTimeSeries.html
  28. +391 −0 doc/javadoc/com/yahoo/ycsb/ScrambledZipfianGenerator.html
  29. +282 −0 doc/javadoc/com/yahoo/ycsb/SkewedLatestGenerator.html
  30. +360 −0 doc/javadoc/com/yahoo/ycsb/TestCollisions.html
  31. +247 −0 doc/javadoc/com/yahoo/ycsb/TestExpandedZipfian.html
  32. +247 −0 doc/javadoc/com/yahoo/ycsb/TestZipfian.html
  33. +285 −0 doc/javadoc/com/yahoo/ycsb/UniformGenerator.html
  34. +270 −0 doc/javadoc/com/yahoo/ycsb/UniformIntegerGenerator.html
  35. +279 −0 doc/javadoc/com/yahoo/ycsb/UnknownDBException.html
  36. +419 −0 doc/javadoc/com/yahoo/ycsb/Utils.html
  37. +440 −0 doc/javadoc/com/yahoo/ycsb/Workload.html
Sorry, we could not display the entire diff because it was too big.
163 LICENSE.txt
@@ -0,0 +1,163 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control
+with that entity. For the purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or (ii)
+ownership of fifty percent (50%) or more of the outstanding shares, or
+(iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but not
+limited to compiled object code, generated documentation, and
+conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object
+form, made available under the License, as indicated by a copyright
+notice that is included in or attached to the work (an example is
+provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the
+purposes of this License, Derivative Works shall not include works
+that remain separable from, or merely link (or bind by name) to the
+interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the
+original version of the Work and any modifications or additions to
+that Work or Derivative Works thereof, that is intentionally submitted
+to Licensor for inclusion in the Work by the copyright owner or by an
+individual or Legal Entity authorized to submit on behalf of the
+copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent to
+the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control
+systems, and issue tracking systems that are managed by, or on behalf
+of, the Licensor for the purpose of discussing and improving the Work,
+but excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have
+ made, use, offer to sell, sell, import, and otherwise transfer the
+ Work, where such license applies only to those patent claims
+ licensable by such Contributor that are necessarily infringed by
+ their Contribution(s) alone or by combination of their
+ Contribution(s) with the Work to which such Contribution(s) was
+ submitted. If You institute patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging
+ that the Work or a Contribution incorporated within the Work
+ constitutes direct or contributory patent infringement, then any
+ patent licenses granted to You under this License for that Work
+ shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work
+ or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You meet
+ the following conditions:
+
+(a) You must give any other recipients of the Work or Derivative Works
+a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works that
+You distribute, all copyright, patent, trademark, and attribution
+notices from the Source form of the Work, excluding those notices that
+do not pertain to any part of the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained within
+such NOTICE file, excluding those notices that do not pertain to any
+part of the Derivative Works, in at least one of the following places:
+within a NOTICE text file distributed as part of the Derivative Works;
+within the Source form or documentation, if provided along with the
+Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The
+contents of the NOTICE file are for informational purposes only and do
+not modify the License. You may add Your own attribution notices
+within Derivative Works that You distribute, alongside or as an
+addendum to the NOTICE text from the Work, provided that such
+additional attribution notices cannot be construed as modifying the
+License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated
+in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or
+ conditions. Notwithstanding the above, nothing herein shall
+ supersede or modify the terms of any separate license agreement you
+ may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does nr work.
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]" replaced
+with your own identifying information. (Don't include the brackets!)
+The text should be enclosed in the appropriate comment syntax for the
+file format. We also recommend that a file or class name and
+description of purpose be included on the same "printed page" as the
+copyright notice for easier identification within third-party
+archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied.
+
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
9 NOTICE.txt
@@ -0,0 +1,9 @@
+=========================================================================
+NOTICE file for use with, and corresponding to Section 4 of,
+the Apache License, Version 2.0,
+in this case for the YCSB project.
+=========================================================================
+
+ This product includes software developed by
+ Yahoo! Inc. (www.yahoo.com)
+ Copyright (c) 2010 Yahoo! Inc. All rights reserved.
38 README
@@ -0,0 +1,38 @@
+Yahoo! Cloud System Benchmark (YCSB)
+
+Overview
+========
+
+It is difficult to decide which system is right for your application,
+partially because the features differ between systems, and partially
+because there is not an easy way to compare the performance of one
+system versus another.
+
+The goal of the YCSB project is to develop a framework and common set
+of workloads for evaluating the performance of different "key-value"
+and "cloud" serving stores. The project comprises two things:
+
+* The YCSB Client, an extensible workload generator
+
+* The Core workloads, a set of workload scenarios to be executed by
+ the generator
+
+Although the core workloads provide a well rounded picture of a
+system's performance, the Client is extensible so that you can define
+new and different workloads to examine system aspects, or application
+scenarios, not adequately covered by the core workload. Similarly, the
+Client is extensible to support benchmarking different
+databases. Although we include sample code for benchmarking HBase and
+Cassandra, it is straightforward to write a new interface layer to
+benchmark your favorite database.
+
+A common use of the tool is to benchmark multiple systems and compare
+them. For example, you can install multiple systems on the same
+hardward configuration, and run the same workloads against each
+system. Then you can plot the performance of each system (for example,
+as latency versus throughput curves) to see when one system does
+better than another.
+
+Detailed information about using the benchmark is available in the
+doc/index.html file.
+
51 build.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <project name="ycsb" default="compile" basedir=".">
+
+ <property name="src.dir" value="src"/>
+ <property name="doc.dir" value="doc"/>
+ <property name="dbsrc.dir" value="${src.dir}/com/yahoo/ycsb/db"/>
+ <property name="dblib.dir" value="${dbsrc.dir}/lib"/>
+
+ <property name="build.dir" value="build"/>
+ <property name="classes.dir" value="${build.dir}/classes"/>
+ <property name="jar.dir" value="${build.dir}/jar"/>
+
+
+ <path id="classpath">
+ <fileset dir="${dblib.dir}" includes="**/*.jar"/>
+ </path>
+
+
+ <target name="compile">
+ <mkdir dir="${classes.dir}"/>
+ <javac srcdir="${src.dir}" destdir="${classes.dir}" excludes="com/yahoo/ycsb/db/**" deprecation="on">
+ <compilerarg value="-Xlint:unchecked"/>
+ </javac>
+ <antcall target="makejar"/>
+ </target>
+
+ <target name="dbcompile">
+ <mkdir dir="${classes.dir}"/>
+ <javac srcdir="${dbsrc.dir}" destdir="${classes.dir}" classpathref="classpath" deprecation="on">
+ <compilerarg value="-Xlint:unchecked"/>
+ </javac>
+ <antcall target="makejar"/>
+ </target>
+
+ <target name ="makejar" description="Create a jar for the YCSB project">
+
+ <jar jarfile="build/ycsb.jar" includes="**/*.class" basedir="${classes.dir}"/>
+
+ </target>
+ <target name="clean">
+ <delete includeemptydirs="true">
+ <fileset dir="build" includes="**/*"/>
+ </delete>
+ </target>
+
+ <target name="doc">
+ <javadoc sourcepath="${src.dir}" destdir="${doc.dir}/javadoc" packagenames="com.yahoo.ycsb,com.yahoo.ycsb.workloads"/>
+ </target>
+
+</project>
+
30 doc/coreproperties.html
@@ -0,0 +1,30 @@
+<HTML>
+<HEAD>
+<TITLE>YCSB - Core workload package properties</TITLE>
+</HEAD>
+<BODY>
+<H1><img src="images/ycsblogo-small.png"> Yahoo! Cloud Serving Benchmark</H1>
+<H3>Version 0.1</H3>
+<HR>
+<A HREF="index.html">Home</A> - <A href="coreworkloads.html">Core workloads</A> - <a href="tipsfaq.html">Tips and FAQ</A>
+<HR>
+<H2>Core workload package properties</h2>
+The property files used with the core workload generator can specify values for the following properties:<p>
+<UL>
+<LI><b>fieldcount</b>: the number of fields in a record (default: 10)
+<LI><b>fieldlength</b>: the size of each field (default: 100)
+<LI><b>readallfields</b>: should reads read all fields (true) or just one (false) (default: true)
+<LI><b>readproportion</b>: what proportion of operations should be reads (default: 0.95)
+<LI><b>updateproportion</b>: what proportion of operations should be updates (default: 0.05)
+<LI><b>insertproportion</b>: what proportion of operations should be inserts (default: 0)
+<LI><b>scanproportion</b>: what proportion of operations should be scans (default: 0)
+<LI><b>readmodifywriteproportion</b>: what proportion of operations should be read a record, modify it, write it back (default: 0)
+<LI><b>requestdistribution</b>: what distribution should be used to select the records to operate on - uniform, zipfian or latest (default: uniform)
+<LI><b>maxscanlength</b>: for scans, what is the maximum number of records to scan (default: 1000)
+<LI><b>scanlengthdistribution</b>: for scans, what distribution should be used to choose the number of records to scan, for each scan, between 1 and maxscanlength (default: uniform)
+<LI><b>insertorder</b>: should records be inserted in order by key ("ordered"), or in hashed order ("hashed") (default: hashed)
+</UL>
+<HR>
+YCSB - Yahoo! Research - Contact cooperb@yahoo-inc.com.
+</BODY>
+</HTML>
59 doc/coreworkloads.html
@@ -0,0 +1,59 @@
+<HTML>
+<HEAD>
+<TITLE>YCSB - Core workloads</TITLE>
+</HEAD>
+<BODY>
+<H1><img src="images/ycsblogo-small.png"> Yahoo! Cloud Serving Benchmark</H1>
+<H3>Version 0.1</H3>
+<HR>
+<A HREF="index.html">Home</A> - <A href="coreworkloads.html">Core workloads</A> - <a href="tipsfaq.html">Tips and FAQ</A>
+<HR>
+<H2>Core workloads</h2>
+YCSB includes a set of core workloads that define a basic benchmark for cloud systems. Of course, you can define your own workloads, as described <a href="workload.html">here</A>. However,
+the core workloads are a useful first step, and obtaining these benchmark numbers for a variety of different systems would allow you to understand the performance
+tradeoffs of different systems.
+<P>
+The core workloads consist of six different workloads:
+<P>
+<B>Workload A: Update heavy workload</B>
+<P>
+This workload has a mix of 50/50 reads and writes. An application example is a session store recording recent actions.
+<P>
+<B>Workload B: Read mostly workload</B>
+<P>
+This workload has a 95/5 reads/write mix. Application example: photo tagging; add a tag is an update, but most operations are to read tags.
+<P>
+<B>Workload C: Read only</B>
+<P>
+This workload is 100% read. Application example: user profile cache, where profiles are constructed elsewhere (e.g., Hadoop).
+<P>
+<B>Workload D: Read latest workload</B>
+<P>
+In this workload, new records are inserted, and the most recently inserted records are the most popular. Application example: user status updates; people want to read the latest.
+<P>
+<B>Workload E: Short ranges</B>
+<P>
+In this workload, short ranges of records are queried, instead of individual records. Application example: threaded conversations, where each scan is for the posts in a given thread (assumed to be clustered by thread id).
+<P>
+<B>Workload F: Read-modify-write</B>
+<P>
+In this workload, the client will read a record, modify it, and write back the changes. Application example: user database, where user records are read and modified by the user or to record user activity.
+
+<HR>
+<H2>Running the workloads</H2>
+All six workloads have a data set which is similar. Workloads D and E insert records during the test run. Thus, to keep the database size consistent, we recommend the following sequence:
+<OL>
+<LI>Load the database, using workload A's parameter file (workloads/workloada) and the "-load" switch to the client.
+<LI>Run workload A (using workloads/workloada and "-t") for a variety of throughputs.
+<LI>Run workload B (using workloads/workloadb and "-t") for a variety of throughputs.
+<LI>Run workload C (using workloads/workloadc and "-t") for a variety of throughputs.
+<LI>Run workload F (using workloads/workloadf and "-t") for a variety of throughputs.
+<LI>Run workload D (using workloads/workloadd and "-t") for a variety of throughputs. This workload inserts records, increasing the size of the database.
+<LI>Delete the data in the database.
+<LI>Reload the database, using workload E's parameter file (workloads/workloade) and the "-load switch to the client.
+<LI>Run workload E (using workloads/workloadd and "-t") for a variety of throughputs. This workload inserts records, increasing the size of the database.
+</OL>
+<HR>
+YCSB - Yahoo! Research - Contact cooperb@yahoo-inc.com.
+</BODY>
+</HTML>
98 doc/dblayer.html
@@ -0,0 +1,98 @@
+<HTML>
+<HEAD>
+<TITLE>YCSB - DB Interface Layer</TITLE>
+</HEAD>
+<BODY>
+<H1><img src="images/ycsblogo-small.png"> Yahoo! Cloud Serving Benchmark</H1>
+<H3>Version 0.1</H3>
+<HR>
+<A HREF="index.html">Home</A> - <A href="coreworkloads.html">Core workloads</A> - <a href="tipsfaq.html">Tips and FAQ</A>
+<HR>
+<H2>Implementing a database interface layer - overview</H2>
+The database interface layer hides the details of the specific database you are benchmarking from the YCSB Client. This
+allows the client to generate operations like "read record" or "update record" without having to understand
+the specific API of your database. Thus, it is very easy to benchmark new database systems; once you have
+created the database interface layer, the rest of the benchmark framework runs without having to change.
+<P>
+The database interface layer is a simple abstract class that provides read, insert, update, delete and scan operations for your
+database. Implementing a database interface layer for your database means filling out the body of each of those methods. Once you
+have compiled your layer, you can specify the name of your implemented class on the command line (or as a property) to the YCSB Client.
+The YCSB Client will load your implementation dynamically when it starts. Thus, you do not need to recompile the YCSB Client itself
+to add or change a database interface layer.
+<HR>
+<H2>Creating a new layer step-by-step</H2>
+<h3>Step 1 - Extend com.yahoo.ycsb.DB</h3>
+The base class of all database interface layer implementations is com.yahoo.ycsb.DB. This is an abstract class, so you need to create a new
+class which extends the DB class. Your class must have a public no-argument constructor, because the instances will be constructed inside a factory
+which will use the no-argument constructor.
+<P>
+The YCSB Client framework will create one instance of your DB class per worker thread, but there might be multiple worker threads generating the workload,
+so there might be multiple instances of your DB class created.
+
+<H3>Step 2 - Implement init() if necessary</h3>
+You can perform any initialization of your DB object by implementing the following method
+<pre>
+public void init() throws DBException
+</pre>
+to perform any initialization actions. The init() method will be called once per DB instance; so if there are multiple threads, each DB instance will have init()
+called separately.
+<P>
+The init() method should be used to set up the connection to the database and do any other initialization. In particular, you can configure your database layer
+using properties passed to the YCSB Client at runtime. In fact, the YCSB Client will pass to the DB interface layer
+all of the
+properties specified in all parameter files specified when the Client starts up. Thus, you can create new properties for configuring your DB interface layer,
+set them in your parameter files (or on the command line), and
+then retrieve them inside your implementation of the DB interface layer.
+<P>
+These properties will be passed to the DB instance <i>after</i> the constructor, so it is important to retrieve them only in the init() method and not the
+constructor. You can get the set of properties using the
+<pre>
+public Properties getProperties()
+</pre>
+method which is already implemented and inherited from the DB base class.
+
+<h3>Step 3 - Implement the database query and update methods</h3>
+
+The methods that you need to implement are:
+
+<pre>
+ //Read a single record
+ public int read(String table, String key, Set<String> fields, HashMap<String,String> result);
+
+ //Perform a range scan
+ public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,String>> result);
+
+ //Update a single record
+ public int update(String table, String key, HashMap<String,String> values);
+
+ //Insert a single record
+ public int insert(String table, String key, HashMap<String,String> values);
+
+ //Delete a single record
+ public int delete(String table, String key);
+</pre>
+In each case, the method takes a table name and record key. (In the case of scan, the record key is the first key in the range to scan.) For the
+read methods (read() and scan()) the methods additionally take a set of fields to be read, and provide a structure (HashMap or Vector of HashMaps) to store
+the returned data. For the write methods (insert() and update()) the methods take HashMap which maps field names to values.
+<P>
+The database should have the appropriate tables created before you run the benchmark. So you can assume in your implementation of the above methods
+that the appropriate tables already exist, and just write code to read or write from the tables named in the "table" parameter.
+<h3>Step 4 - Compile your database interface layer</h3>
+Your code can be compiled separately from the compilation of the YCSB Client and framework. In particular, you can make changes to your DB class and
+recompile without having to recompile the YCSB Client.
+<h3>Step 5 - Use it with the YCSB Client</h3>
+Make sure that the classes for your implementation (or a jar containing those classes) are available on your CLASSPATH, as well as any libraries/jar files used
+by your implementation. Now, when you run the YCSB Client, specify the "-db" argument on the command line and provide the fully qualified classname of your
+DB class. For example, to run workloada with your DB class:
+<pre>
+% java -cp build/ycsb.jar:yourjarpath com.yahoo.ycsb.Client -t -db com.foo.YourDBClass -P workloads/workloada -P large.dat -s > transactions.dat
+</pre>
+
+You can also specify the DB interface layer using the DB property in your parameter file:
+<pre>
+db=com.foo.YourDBClass
+</pre>
+<HR>
+YCSB - Yahoo! Research - Contact cooperb@yahoo-inc.com.
+</BODY>
+</HTML>
BIN doc/images/ycsblogo-small.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
348 doc/index.html
@@ -0,0 +1,348 @@
+<html>
+<head>
+<title>YCSB - Yahoo! Cloud Serving Benchmark</title>
+</head>
+<body>
+<H1><img src="images/ycsblogo-small.png"> Yahoo! Cloud Serving Benchmark</H1>
+<H3>Version 0.1</H3>
+<hr>
+<A HREF="index.html">Home</A> - <A href="coreworkloads.html">Core workloads</A> - <a href="tipsfaq.html">Tips and FAQ</A>
+<HR>
+<UL>
+<LI><A href="#overview">Overview</A>
+<LI><A href="#download">Download YCSB</A>
+<LI><A href="#building">Building YCSB</A>
+<LI><A href="#running">Running a workload</A>
+<LI><A href="#extending">Extending YCSB</A>
+</UL>
+<HR>
+<A name="overview">
+<H2>Overview</H2>
+There are many new serving databases available, including:
+<ul>
+<LI>BigTable
+<ul>
+<LI><A HREF="http://hadoop.apache.org/hbase/">HBase</A>, <A HREF="http://hypertable.org/">Hypertable
+</ul>
+<LI><A HREF="http://www.microsoft.com/windowsazure/">Azure</A>
+<LI><A HREF="http://incubator.apache.org/cassandra/">Cassandra</A>
+<LI><A HREF="http://couchdb.apache.org/">CouchDB</A>
+<LI><A HREF="http://project-voldemort.com/">Voldemort</A>
+<LI><A HREF=http://wiki.github.com/cliffmoon/dynomite/dynomite-framework">Dynomite</A>
+<li>...and many others
+</ul>
+It is difficult to decide which system is right for your application, partially because the features differ between
+systems, and partially because there is not an easy way to compare the performance of one system versus another.
+<P>
+The goal of the YCSB project is to develop a framework and common set of workloads for evaluating the performance of
+different "key-value" and "cloud" serving stores. The project comprises two things:
+<ul>
+<LI>The YCSB Client, an extensible workload generator
+<LI>The Core workloads, a set of workload scenarios to be executed by the generator
+</UL>
+Although the core workloads provide a well rounded picture of a system's performance, the Client is extensible so that
+you can define new and different workloads to examine system aspects, or application scenarios, not adequately covered by
+the core workload. Similarly, the Client is extensible to support benchmarking different databases. Although we include
+sample code for benchmarking HBase and Cassandra, it is straightforward to write a new interface layer to benchmark
+your favorite database.
+<P>
+A common use of the tool is to benchmark multiple systems and compare them. For example, you can install multiple systems
+on the same hardward configuration, and run the same workloads against each system. Then you can plot the performance
+of each system (for example, as latency versus throughput curves) to see when one system does better than another.
+<HR>
+<A name="download">
+<H2>Download YCSB</H2>
+... more information soon ...
+<HR>
+<a name="building">
+<H2>Building YCSB</H2>
+To build YCSB, you need to build:
+<UL>
+<LI>The YCSB Client
+<LI>Your DB interface layer
+</UL>
+The YCSB distribution can be built with <a href="http://ant.apache.org">ant</a>:
+<pre>
+ % cd ycsb
+ % ant
+</pre>
+If your build was successful, you should be able to run the Client to get the usage message:
+<pre>
+ % java -cp build/ycsb.jar com.yahoo.ycsb.Client
+Usage: java com.yahoo.ycsb.Client [options]
+Options:
+ -threads n: execute using n threads (default: 1) - can also be specified as the
+ "threadcount" property using -p
+ -target n: attempt to do n operations per second (default: unlimited) - can also
+ be specified as the "target" property using -p
+ -load: run the loading phase of the workload
+ -t: run the transactions phase of the workload (default)
+ -db dbname: specify the name of the DB to use (default: com.yahoo.ycsb.BasicDB) -
+ can also be specified as the "db" property using -p
+ -P propertyfile: load properties from the given file. Multiple files can
+ be specified, and will be processed in the order specified
+ -p name=value: specify a property to be passed to the DB and workloads;
+ multiple properties can be specified, and override any
+ values in the propertyfile
+ -s: show status during run (default: no status)
+ -l label: use label for status (e.g. to label one experiment out of a whole batch)
+
+Required properties:
+ recordcount: how many records in the database
+ operationcount: how many transactions to execute
+ workload: the name of the workload class to use (e.g. com.yahoo.ycsb.workloads.CoreWorkload)
+</pre>
+<HR>
+<a name="running">
+<H2>Running a workload</H2>
+There are 6 steps to running a workload:
+<OL>
+<LI>Set up the database system to test
+<LI>Choose the appropriate DB interface layer
+<LI>Choose the appropriate workload
+<LI>Choose the appropriate runtime parameters (number of client threads, target throughput, etc.)
+<LI>Load the data
+<LI>Execute the workload
+</OL>
+The steps described here assume you are running a single client server. This should be sufficient for small to medium clusters (e.g. 10 or so machines). For much larger clusters, you may
+have to run multiple clients on different servers to generate enough load. Similarly, loading a database may be faster in some cases using multiple client machines. For more details on
+running multiple clients in parallel, see <A href="parallelclients.html">here</A>.
+<H3>Step 1. Set up the database system to test</H3>
+The first step is to set up the database system you wish to test. This can be done on a single machine or a cluster, depending on the configuration you wish to benchmark.
+<P>
+You must also create or set up tables/keyspaces/storage buckets to store records. The details vary according to each database system, and depend on the workload you wish
+to run. Before the YCSB Client runs, the tables must be created, since the Client itself will not request to create the tables. This is because for some systems, there
+is a manual (human-operated) step to create tables, and for other systems, the table must be created before the database cluster is started.
+<P>
+The tables that must be created depends on the workload. For CoreWorkload, the YCSB Client will assume that there is a "table" called "usertable" with a
+flexible schema: columns can be added at runtime as desired. This "usertable" can be mapped into whatever storage container is appropriate. For example, in MySQL you would "CREATE TABLE," in
+Cassandra you would define a keyspace in the Cassandra configuration, and so on. The database interface layer (described in step 2) will receive requests for
+reading or writing records in "usertable" and translate them into requests for the actual storage you have allocated. This may mean that you have to provide
+information for the database interface layer to help it understand what the structure of the underlying storage is. For example, in Cassandra, you must define
+"column families" in addition to keyspaces. Thus, it is necessary to create a column family and give the family some name (for example, you might use "values.") Then,
+the database access layer will need to know to refer to the "values" column family, either because the string "values" is passed in as a property, or because it is
+hardcoded in the database interface layer.
+<H3>Step 2. Choose the appropriate DB interface layer</H3>
+The DB interface layer is a java class that execute read, insert, update, delete and scan calls generated by the YCSB Client into calls against your database's API. This class is a
+subclass of the abstract DB class in the com.yahoo.ycsb package. The DB interface layer is not built as part of building YCSB; you must build it separately. Once you have built the interface layer,
+you will specify the class name of the layer on the command line when you run YCSB Client, and the Client will dynamically load your interface class. Any properties specified on the command line, or
+in parameter files specified on the command line, will be passed to the DB interface instance, and can be used to configure the layer (for example, to tell it the hostname of the database you are benchmarking.)
+<P>
+The YCSB Client is distributed with a simple dummy interface layer, com.yahoo.ycsb.BasicDB. This layer just prints the operations it would have executed to System.out. It can be useful for ensuring
+that the client is operating properly, and for debugging your workloads.
+<P>
+Other sample DB interface layer classes are distributed in src/com/yahoo/ycsb/db. To build those classes, run:
+<pre>
+% ant dbcompile
+</pre>
+Note that these classes will not be built using a normal ant execution, and not included in the resulting ycsb.jar. Thus, to use these classes, you will need
+to 1. have them on your classpath, and 2. have any required libraries also on your classpath. For example, the Cassandra database interface layer is com.yahoo.ycsb.db.CassandraClient, and requires the libthrift.jar
+to be accessible on your classpath.
+<P>
+For more details about implementing a DB interface layer, see <a href="dblayer.html">here</a>.
+<h3>Step 3. Choose the appropriate workload</h3>
+The workload defines the data that will be loaded into the database during the <I>loading</I> phase, and the operations that will be executed against the data set during the <I>transaction</I> phase.
+
+Typically, a workload is a combination of:
+<UL>
+<LI>Workload java class (subclass of com.yahoo.ycsb.Workload)
+<LI>Parameter file (in the Java Properties format)
+</UL>
+Because the properties of the dataset must be known during the <i>loading</i> phase (so that the proper kind of record can be constructed and inserted) and during the <I>transaction</I> phase (so
+that the correct record ids and fields can be referred to) a single set of properties is shared among both phases. Thus the parameter file is used in both phases. The
+workload java class uses those properties to either insert records (<i>loading</i> phase) or execute transactions against those records (<i>transaction</i> phase). The choice
+of which phase to run is based on a parameter you specify when you run the YCSB Client tool.
+<p>
+You specify both the java class and the parameter file on the command line when you run the YCSB Client. The Client will dynamically load your workload class, pass
+it the properties from the parameters file (and any additional properties specified on the command line) and then execute the workload. This happens both for the <I>loading</I> and <I>transaction</I> phases,
+as the same properties and workload logic applies to both. For example, if the <I>loading</I> phase creates records with 10 fields, then the <i>transaction</I> phase must know that there are 10 fields
+it can query and modify.
+<P>
+The CoreWorkload is a package of standard workloads that is distributed with the YCSB and can be used directly. In particular, the CoreWorkload defines a simple mix of read/insert/update/scan operations. The relative
+frequency of each operation is defined in the parameter file, as are other properties of the workload. Thus, by changing the parameter file, a variety of different concrete workloads can be executed. For more details
+on the CoreWorkload, see <a href="coreworkloads.html">here</a>.
+<P>
+If the CoreWorkload does not satisfy your needs, you can define your own workload by subclassing the com.yahoo.ycsb.Workload class. Details for doing this are <a href="workload.html">here</A>.
+
+<H3>Step 4. Choose the appropriate runtime parameters</H3>
+Although the workload class and paramters file define a specific workload, there are additional settings that you may want to specify for a particular run of the benchmark. These settings are provided on the command line
+when you run the YCSB client. These settings are:
+<UL>
+<LI><B>Threads</B>: the number of client threads. By default, the YCSB Client uses a single worker thread, but additional threads can be specified. This is often done to increase the amount of load offered against the database.
+<LI><B>Target</B>: the target number of operations per second. By default, the YCSB Client will try to do as many operations as it can. For example, if each operation takes 100 milliseconds on average, the Client will do about 10 operations per second per worker thread. However, you can throttle the
+target number of operations per second. For example, to generate a latency versus throughput curve, you can try different target throughputs, and measure the resulting latency for each.
+<LI><B>Status</B>: for a long running workload, it may be useful to have the Client report status, just to assure you it has not crashed and to give you some idea of its progress. By specifying "-s" on the command line, the Client will
+report status every 10 seconds to System.err.
+</UL>
+<H3>Step 5. Load the data</H3>
+Workloads have two executable phases: the <I>loading</I> phase (which defines the data to be inserted) and the <I>transactions</I> phase (which defines the
+operations to be executed against the data set.) To load the data, you run the YCSB Client and tell it to execute the <I>loading</I> section.
+<P>
+For example, consider the benchmark workload A (more details about the standard workloads are XXX here XXX). To load the standard dataset:
+
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.BasicDB -P workloads/workloada
+</pre>
+A few notes about this command:
+<UL>
+<LI>The "-load" parameter tells the Client to execute the <I>data</I> section of the workload.
+<LI>The "-db" parameter tells the Client which DB interface layer to use. In this case, we used the dummy BasicDB layer. You can also specify this as a property
+in your parameters file using the "db" property (for example, "db=com.yahoo.ycsb.BasicDB").
+<LI>The "-P" parameter is used to load property files. In this case, we used it to load the workloada parameter file.
+</UL>
+If you used BasicDB, you would see the insert statements for the database. If you used a real DB interface layer, the records would be loaded into the database.
+<P>
+The standard workload paramter files create very small databases; for example, workloada creates only 1,000 records. This is useful while debugging your setup. However,
+to run an actual benchmark you'll want to generate a much larger database. For example, imagine you want to load 100 million records. Then, you will need to
+override the default "recordcount" property in the workloada file. This can be done in one of two ways:
+<OL>
+<LI>Specifying a new property file containing a new value of "recordcount." If this file is specified on the command line after the workloada file, it will override
+any properties in workloada. For example, create a file called "large.dat" with the single line:
+<PRE>
+recordcount=100000000
+</PRE>
+Then, run the client as follows:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat
+</pre>
+The client will load both property files, but will use the value of recordcount from the last file it loaded, e.g. large.dat
+<LI>Specify a new value of the "recordcount" property on the command line. Any properties specified on the command line override properties specified in property files.
+In this case, run the client as follows:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.BasicDB -P workloads/workloada -p recordcount=100000000
+</pre>
+</OL>
+In general, it is good practice to store any important properties in new parameter files, instead of specifying them on the command line. This makes
+your benchmark results more reproducible; instead of having to reconstruct the exact command line you used, you just reuse the property files. Note, however, that
+the YCSB Client will print out its command line when it begins executing, so if you store the output of the client in a data file, you can retrieve the command line
+from that file.
+<P>
+Because a large database load will take a long time, you may wish to 1. require the Client to produce status, and 2. direct any output to a datafile. Thus, you might
+execute the following to load your database:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat -s > load.dat
+</pre>
+The "-s" parameter will require the Client to produce status report on System.err. Thus, the output of this command might be:
+<PRE>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat -s > load.dat
+Loading workload... (might take a few minutes in some cases for large data sets)
+Starting test.
+ 0 sec: 0 operations
+ 10 sec: 61731 operations; 6170.6317473010795 operations/sec
+ 20 sec: 129054 operations; 6450.76477056883 operations/sec
+...
+</PRE>
+This status output will help you to see how quickly load operations are executing (so you can estimate the completion time of the load) as well as verify that the
+load is making progress.
+<P>
+When the load completes, the Client will report statistics about the performance of the load. These statistics are the same as in the transaction phase, so see below for information on
+interpreting those statistics.
+<H3>Step 6: Execute the workload</H3>
+Once the data is loaded, you can execute the workload. This is done by telling the client to run the <i>transaction</I> section of the workload.
+<P>
+To execute the workload, you can use the following command:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -t -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat -s > transactions.dat
+</pre>
+The main difference in this invocation is that we used the "-t" parameter to tell the Client to use the <I>transaction</I> section instead of the <I>data</I> section.
+If you used BasicDB, and examine the resulting transactions.dat file, you will see a combination of read and update requests, as well as statistics about the execution.
+<P>
+Typically you will want to use the "-threads" and "-target" parameters to control the amount of offered load. For example, we might want 10 threads attempting a total of 100 operations per second (e.g. 10 operations/sec per thread.) As long
+as the average latency of operations is not above 100 ms, each thread will be able to carry out its intended 10 operations per second. In general, you need enough threads so that no thread is attempting more operations per second than is possible, otherwise
+your achieved throughput will be less than the specified target throughput. For this example, we can execute:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -t -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat -s -threads 10 -target 100 > transactions.dat
+</pre>
+Note in this example we have used the "-threads 10" command line parameter to specify 10 threads, and "-target 100" command line parameter to specify 100 operations per second as the target.
+Alternatively, both values can be set in your parameters file using the "threads" and "target" properties respectively. For example:
+<pre>
+threads=10
+target=100
+</pre>
+<P>
+
+At the end of the run, the Client will report performance statistics on System.out. In the above example, these statistics will be written to the transactions.dat file.
+The default is to produce average, min, max, 95th and 99th percentile latency for each operation type (read, update, etc.), a count of the return codes for each operation, and a histogram of latencies for each
+operation. The return codes are defined by your database interface layer, and allow you to see if there were any errors during the workload. For the above example, we might get output like:
+<pre>
+[OVERALL],RunTime(ms), 10110
+[OVERALL],Throughput(ops/sec), 98.91196834817013
+[UPDATE], Operations, 491
+[UPDATE], AverageLatency(ms), 0.054989816700611
+[UPDATE], MinLatency(ms), 0
+[UPDATE], MaxLatency(ms), 1
+[UPDATE], 95thPercentileLatency(ms), 1
+[UPDATE], 99thPercentileLatency(ms), 1
+[UPDATE], Return=0, 491
+[UPDATE], 0, 464
+[UPDATE], 1, 27
+[UPDATE], 2, 0
+[UPDATE], 3, 0
+[UPDATE], 4, 0
+...
+</PRE>
+This output indicates:
+<UL>
+<LI>The total execution time was 10.11 seconds
+<LI>The average throughput was 98.9 operations/sec (across all threads)
+<LI>There were 491 update operations, with associated average, min, max, 95th and 99th percentile latencies
+<LI>All 491 update operations had a return code of zero (success in this case)
+<LI>464 operations completed in less than 1 ms, while 27 completed between 1 and 2 ms.
+</UL>
+Similar statistics are available for the read operations.
+<P>
+While a histogram of latencies is often useful, sometimes a timeseries is more useful. To request a time series, specify the "measurementtype=timeseries" property on the Client command line
+or in a properties file. By default, the Client will report average latency for each interval of 1000 milliseconds. You can specify a different granularity for reporting
+using the "timeseries.granularity" property. For example:
+<pre>
+% java -cp build/ycsb.jar com.yahoo.ycsb.Client -t -db com.yahoo.ycsb.BasicDB -P workloads/workloada -P large.dat -s -threads 10 -target 100 -p measurementtype=timeseries -p timeseries.granularity=2000 > transactions.dat
+</pre>
+will report a timeseries, with readings averaged every 2,000 milliseconds (e.g. 2 seconds). The result will be:
+<PRE>
+[OVERALL],RunTime(ms), 10077
+[OVERALL],Throughput(ops/sec), 9923.58836955443
+[UPDATE], Operations, 50396
+[UPDATE], AverageLatency(ms), 0.04339630129375347
+[UPDATE], MinLatency(ms), 0
+[UPDATE], MaxLatency(ms), 338
+[UPDATE], Return=0, 50396
+[UPDATE], 0, 0.10264765784114054
+[UPDATE], 2000, 0.026989343690867442
+[UPDATE], 4000, 0.0352882703777336
+[UPDATE], 6000, 0.004238958990536277
+[UPDATE], 8000, 0.052813085033008175
+[UPDATE], 10000, 0.0
+[READ], Operations, 49604
+[READ], AverageLatency(ms), 0.038242883638416256
+[READ], MinLatency(ms), 0
+[READ], MaxLatency(ms), 230
+[READ], Return=0, 49604
+[READ], 0, 0.08997245741099663
+[READ], 2000, 0.02207505518763797
+[READ], 4000, 0.03188493260913297
+[READ], 6000, 0.004869141813755326
+[READ], 8000, 0.04355329949238579
+[READ], 10000, 0.005405405405405406
+</PRE>
+This output shows separate time series for update and read operations, with data reported every 2000 milliseconds. The data reported for a time point is the average over the previous 2000 milliseconds only.
+(In this case we used 100,000 operations and a target of 10,000 operations per second for a more interesting output.)
+A note about latency measurements: the Client measures the end to end latency of executing a particular operation against the database. That is, it starts a timer before calling the appropriate method in the DB interface layer
+class, and stops the timer when the method returns. Thus latencies include: executing inside the interface layer, network latency to the database server, and database execution time. They do not include delays introduced for throttling
+the target throughput. That is, if you specify a target of 10 operations per second (and a single thread) then the Client will only execute an operation every 100 milliseconds. If the operation takes 12 milliseconds, then the client
+will wait for an additional 88 milliseconds before trying the next operation. However, the reported latency will not include this wait time; a latency of 12 milliseconds, not 100, will be reported.
+<HR>
+<A name="extending">
+<H1>Extending YCSB</H1>
+YCSB is designed to be extensible. It is easy to add a new database interface layer to support benchmarking a new database. It is also easy to define new workloads.
+<ul>
+<li><A HREF="dblayer.html">DB Interface Layer</a>
+<li><A HREF="workload.html">Implementing new workloads</a>
+</UL>
+More details about the entire class structure of YCSB is available here:
+<UL>
+<LI><A HREF="javadoc/index.html">YCSB javadoc documentation</A>
+</ul>
+<HR>
+YCSB - Yahoo! Research - Contact cooperb@yahoo-inc.com.
+</body>
+</html>
86 doc/javadoc/allclasses-frame.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_22) on Mon Apr 19 13:47:53 PDT 2010 -->
+<TITLE>
+All Classes
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/yahoo/ycsb/BasicDB.html" title="class in com.yahoo.ycsb" target="classFrame">BasicDB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Client.html" title="class in com.yahoo.ycsb" target="classFrame">Client</A>
+<BR>
+<A HREF="com/yahoo/ycsb/workloads/CoreWorkload.html" title="class in com.yahoo.ycsb.workloads" target="classFrame">CoreWorkload</A>
+<BR>
+<A HREF="com/yahoo/ycsb/CounterGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">CounterGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb" target="classFrame">DB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBException.html" title="class in com.yahoo.ycsb" target="classFrame">DBException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBFactory.html" title="class in com.yahoo.ycsb" target="classFrame">DBFactory</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBWrapper.html" title="class in com.yahoo.ycsb" target="classFrame">DBWrapper</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DiscreteGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">DiscreteGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/FindGoodAB.html" title="class in com.yahoo.ycsb" target="classFrame">FindGoodAB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/FindGoodScrambleVector.html" title="class in com.yahoo.ycsb" target="classFrame">FindGoodScrambleVector</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Generator.html" title="class in com.yahoo.ycsb" target="classFrame">Generator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/IntegerGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">IntegerGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Measurements.html" title="class in com.yahoo.ycsb" target="classFrame">Measurements</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurement.html" title="class in com.yahoo.ycsb" target="classFrame">OneMeasurement</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurementHistogram.html" title="class in com.yahoo.ycsb" target="classFrame">OneMeasurementHistogram</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurementTimeSeries.html" title="class in com.yahoo.ycsb" target="classFrame">OneMeasurementTimeSeries</A>
+<BR>
+<A HREF="com/yahoo/ycsb/ScrambledZipfianGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">ScrambledZipfianGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/SkewedLatestGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">SkewedLatestGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestCollisions.html" title="class in com.yahoo.ycsb" target="classFrame">TestCollisions</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestExpandedZipfian.html" title="class in com.yahoo.ycsb" target="classFrame">TestExpandedZipfian</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestZipfian.html" title="class in com.yahoo.ycsb" target="classFrame">TestZipfian</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UniformGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">UniformGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UniformIntegerGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">UniformIntegerGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UnknownDBException.html" title="class in com.yahoo.ycsb" target="classFrame">UnknownDBException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Utils.html" title="class in com.yahoo.ycsb" target="classFrame">Utils</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Workload.html" title="class in com.yahoo.ycsb" target="classFrame">Workload</A>
+<BR>
+<A HREF="com/yahoo/ycsb/WorkloadException.html" title="class in com.yahoo.ycsb" target="classFrame">WorkloadException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/ZipfianGenerator.html" title="class in com.yahoo.ycsb" target="classFrame">ZipfianGenerator</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
86 doc/javadoc/allclasses-noframe.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_22) on Mon Apr 19 13:47:53 PDT 2010 -->
+<TITLE>
+All Classes
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/yahoo/ycsb/BasicDB.html" title="class in com.yahoo.ycsb">BasicDB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Client.html" title="class in com.yahoo.ycsb">Client</A>
+<BR>
+<A HREF="com/yahoo/ycsb/workloads/CoreWorkload.html" title="class in com.yahoo.ycsb.workloads">CoreWorkload</A>
+<BR>
+<A HREF="com/yahoo/ycsb/CounterGenerator.html" title="class in com.yahoo.ycsb">CounterGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBException.html" title="class in com.yahoo.ycsb">DBException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBFactory.html" title="class in com.yahoo.ycsb">DBFactory</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DBWrapper.html" title="class in com.yahoo.ycsb">DBWrapper</A>
+<BR>
+<A HREF="com/yahoo/ycsb/DiscreteGenerator.html" title="class in com.yahoo.ycsb">DiscreteGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/FindGoodAB.html" title="class in com.yahoo.ycsb">FindGoodAB</A>
+<BR>
+<A HREF="com/yahoo/ycsb/FindGoodScrambleVector.html" title="class in com.yahoo.ycsb">FindGoodScrambleVector</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Generator.html" title="class in com.yahoo.ycsb">Generator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/IntegerGenerator.html" title="class in com.yahoo.ycsb">IntegerGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Measurements.html" title="class in com.yahoo.ycsb">Measurements</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurement.html" title="class in com.yahoo.ycsb">OneMeasurement</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurementHistogram.html" title="class in com.yahoo.ycsb">OneMeasurementHistogram</A>
+<BR>
+<A HREF="com/yahoo/ycsb/OneMeasurementTimeSeries.html" title="class in com.yahoo.ycsb">OneMeasurementTimeSeries</A>
+<BR>
+<A HREF="com/yahoo/ycsb/ScrambledZipfianGenerator.html" title="class in com.yahoo.ycsb">ScrambledZipfianGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/SkewedLatestGenerator.html" title="class in com.yahoo.ycsb">SkewedLatestGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestCollisions.html" title="class in com.yahoo.ycsb">TestCollisions</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestExpandedZipfian.html" title="class in com.yahoo.ycsb">TestExpandedZipfian</A>
+<BR>
+<A HREF="com/yahoo/ycsb/TestZipfian.html" title="class in com.yahoo.ycsb">TestZipfian</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UniformGenerator.html" title="class in com.yahoo.ycsb">UniformGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UniformIntegerGenerator.html" title="class in com.yahoo.ycsb">UniformIntegerGenerator</A>
+<BR>
+<A HREF="com/yahoo/ycsb/UnknownDBException.html" title="class in com.yahoo.ycsb">UnknownDBException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Utils.html" title="class in com.yahoo.ycsb">Utils</A>
+<BR>
+<A HREF="com/yahoo/ycsb/Workload.html" title="class in com.yahoo.ycsb">Workload</A>
+<BR>
+<A HREF="com/yahoo/ycsb/WorkloadException.html" title="class in com.yahoo.ycsb">WorkloadException</A>
+<BR>
+<A HREF="com/yahoo/ycsb/ZipfianGenerator.html" title="class in com.yahoo.ycsb">ZipfianGenerator</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
508 doc/javadoc/com/yahoo/ycsb/BasicDB.html
@@ -0,0 +1,508 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_22) on Mon Apr 19 13:47:52 PDT 2010 -->
+<TITLE>
+BasicDB
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.yahoo.ycsb.BasicDB class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="BasicDB";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/yahoo/ycsb/Client.html" title="class in com.yahoo.ycsb"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/yahoo/ycsb/BasicDB.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BasicDB.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.yahoo.ycsb</FONT>
+<BR>
+Class BasicDB</H2>
+<PRE>
+java.lang.Object
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">com.yahoo.ycsb.DB</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.yahoo.ycsb.BasicDB</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>BasicDB</B><DT>extends <A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></DL>
+</PRE>
+
+<P>
+Basic DB that just prints out the requested operations, instead of doing them against a database.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#SIMULATE_DELAY">SIMULATE_DELAY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#SIMULATE_DELAY_DEFAULT">SIMULATE_DELAY_DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#VERBOSE">VERBOSE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#VERBOSE_DEFAULT">VERBOSE_DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#BasicDB()">BasicDB</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#delete(java.lang.String, java.lang.String)">delete</A></B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete a record from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#init()">init</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initialize any state for this DB.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#insert(java.lang.String, java.lang.String, java.util.HashMap)">insert</A></B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Insert a record in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#read(java.lang.String, java.lang.String, java.util.Set, java.util.HashMap)">read</A></B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.Set&lt;java.lang.String&gt;&nbsp;fields,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read a record from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#scan(java.lang.String, java.lang.String, int, java.util.Set, java.util.Vector)">scan</A></B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;startkey,
+ int&nbsp;recordcount,
+ java.util.Set&lt;java.lang.String&gt;&nbsp;fields,
+ java.util.Vector&lt;java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&gt;&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a range scan for a set of records in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/BasicDB.html#update(java.lang.String, java.lang.String, java.util.HashMap)">update</A></B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;values)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Update a record in the database.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.yahoo.ycsb.DB"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class com.yahoo.ycsb.<A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#cleanup()">cleanup</A>, <A HREF="../../../com/yahoo/ycsb/DB.html#getProperties()">getProperties</A>, <A HREF="../../../com/yahoo/ycsb/DB.html#setProperties(java.util.Properties)">setProperties</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="VERBOSE"><!-- --></A><H3>
+VERBOSE</H3>
+<PRE>
+public static final java.lang.String <B>VERBOSE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.BasicDB.VERBOSE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="VERBOSE_DEFAULT"><!-- --></A><H3>
+VERBOSE_DEFAULT</H3>
+<PRE>
+public static final java.lang.String <B>VERBOSE_DEFAULT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.BasicDB.VERBOSE_DEFAULT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SIMULATE_DELAY"><!-- --></A><H3>
+SIMULATE_DELAY</H3>
+<PRE>
+public static final java.lang.String <B>SIMULATE_DELAY</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.BasicDB.SIMULATE_DELAY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SIMULATE_DELAY_DEFAULT"><!-- --></A><H3>
+SIMULATE_DELAY_DEFAULT</H3>
+<PRE>
+public static final java.lang.String <B>SIMULATE_DELAY_DEFAULT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.BasicDB.SIMULATE_DELAY_DEFAULT">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="BasicDB()"><!-- --></A><H3>
+BasicDB</H3>
+<PRE>
+public <B>BasicDB</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="init()"><!-- --></A><H3>
+init</H3>
+<PRE>
+public void <B>init</B>()</PRE>
+<DL>
+<DD>Initialize any state for this DB.
+ Called once per DB instance; there is one DB instance per client thread.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#init()">init</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="read(java.lang.String, java.lang.String, java.util.Set, java.util.HashMap)"><!-- --></A><H3>
+read</H3>
+<PRE>
+public int <B>read</B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.Set&lt;java.lang.String&gt;&nbsp;fields,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;result)</PRE>
+<DL>
+<DD>Read a record from the database. Each field/value pair from the result will be stored in a HashMap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#read(java.lang.String, java.lang.String, java.util.Set, java.util.HashMap)">read</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>table</CODE> - The name of the table<DD><CODE>key</CODE> - The record key of the record to read.<DD><CODE>fields</CODE> - The list of fields to read, or null for all of them<DD><CODE>result</CODE> - A HashMap of field/value pairs for the result
+<DT><B>Returns:</B><DD>Zero on success, a non-zero error code on error</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="scan(java.lang.String, java.lang.String, int, java.util.Set, java.util.Vector)"><!-- --></A><H3>
+scan</H3>
+<PRE>
+public int <B>scan</B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;startkey,
+ int&nbsp;recordcount,
+ java.util.Set&lt;java.lang.String&gt;&nbsp;fields,
+ java.util.Vector&lt;java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&gt;&nbsp;result)</PRE>
+<DL>
+<DD>Perform a range scan for a set of records in the database. Each field/value pair from the result will be stored in a HashMap.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#scan(java.lang.String, java.lang.String, int, java.util.Set, java.util.Vector)">scan</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>table</CODE> - The name of the table<DD><CODE>startkey</CODE> - The record key of the first record to read.<DD><CODE>recordcount</CODE> - The number of records to read<DD><CODE>fields</CODE> - The list of fields to read, or null for all of them<DD><CODE>result</CODE> - A Vector of HashMaps, where each HashMap is a set field/value pairs for one record
+<DT><B>Returns:</B><DD>Zero on success, a non-zero error code on error</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="update(java.lang.String, java.lang.String, java.util.HashMap)"><!-- --></A><H3>
+update</H3>
+<PRE>
+public int <B>update</B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Update a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
+ record key, overwriting any existing values with the same field name.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#update(java.lang.String, java.lang.String, java.util.HashMap)">update</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>table</CODE> - The name of the table<DD><CODE>key</CODE> - The record key of the record to write.<DD><CODE>result</CODE> - A HashMap of field/value pairs to update in the record
+<DT><B>Returns:</B><DD>Zero on success, a non-zero error code on error</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="insert(java.lang.String, java.lang.String, java.util.HashMap)"><!-- --></A><H3>
+insert</H3>
+<PRE>
+public int <B>insert</B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key,
+ java.util.HashMap&lt;java.lang.String,java.lang.String&gt;&nbsp;values)</PRE>
+<DL>
+<DD>Insert a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
+ record key.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#insert(java.lang.String, java.lang.String, java.util.HashMap)">insert</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>table</CODE> - The name of the table<DD><CODE>key</CODE> - The record key of the record to insert.<DD><CODE>result</CODE> - A HashMap of field/value pairs to insert in the record
+<DT><B>Returns:</B><DD>Zero on success, a non-zero error code on error</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delete(java.lang.String, java.lang.String)"><!-- --></A><H3>
+delete</H3>
+<PRE>
+public int <B>delete</B>(java.lang.String&nbsp;table,
+ java.lang.String&nbsp;key)</PRE>
+<DL>
+<DD>Delete a record from the database.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/yahoo/ycsb/DB.html#delete(java.lang.String, java.lang.String)">delete</A></CODE> in class <CODE><A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb">DB</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>table</CODE> - The name of the table<DD><CODE>key</CODE> - The record key of the record to delete.
+<DT><B>Returns:</B><DD>Zero on success, a non-zero error code on error</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/yahoo/ycsb/Client.html" title="class in com.yahoo.ycsb"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/yahoo/ycsb/BasicDB.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="BasicDB.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
379 doc/javadoc/com/yahoo/ycsb/Client.html
@@ -0,0 +1,379 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_22) on Mon Apr 19 13:47:52 PDT 2010 -->
+<TITLE>
+Client
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.yahoo.ycsb.Client class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="Client";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/yahoo/ycsb/BasicDB.html" title="class in com.yahoo.ycsb"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/yahoo/ycsb/CounterGenerator.html" title="class in com.yahoo.ycsb"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/yahoo/ycsb/Client.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Client.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.yahoo.ycsb</FONT>
+<BR>
+Class Client</H2>
+<PRE>
+java.lang.Object
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.yahoo.ycsb.Client</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>Client</B><DT>extends java.lang.Object</DL>
+</PRE>
+
+<P>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#INSERT_COUNT_PROPERTY">INSERT_COUNT_PROPERTY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates how many inserts to do, if less than recordcount.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#OPERATION_COUNT_PROPERTY">OPERATION_COUNT_PROPERTY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#RECORD_COUNT_PROPERTY">RECORD_COUNT_PROPERTY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#WORKLOAD_PROPERTY">WORKLOAD_PROPERTY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#Client()">Client</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#checkRequiredProperties(java.util.Properties)">checkRequiredProperties</A></B>(java.util.Properties&nbsp;props)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;args)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/yahoo/ycsb/Client.html#usageMessage()">usageMessage</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="OPERATION_COUNT_PROPERTY"><!-- --></A><H3>
+OPERATION_COUNT_PROPERTY</H3>
+<PRE>
+public static final java.lang.String <B>OPERATION_COUNT_PROPERTY</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.Client.OPERATION_COUNT_PROPERTY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="RECORD_COUNT_PROPERTY"><!-- --></A><H3>
+RECORD_COUNT_PROPERTY</H3>
+<PRE>
+public static final java.lang.String <B>RECORD_COUNT_PROPERTY</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.Client.RECORD_COUNT_PROPERTY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="WORKLOAD_PROPERTY"><!-- --></A><H3>
+WORKLOAD_PROPERTY</H3>
+<PRE>
+public static final java.lang.String <B>WORKLOAD_PROPERTY</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.Client.WORKLOAD_PROPERTY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INSERT_COUNT_PROPERTY"><!-- --></A><H3>
+INSERT_COUNT_PROPERTY</H3>
+<PRE>
+public static final java.lang.String <B>INSERT_COUNT_PROPERTY</B></PRE>
+<DL>
+<DD>Indicates how many inserts to do, if less than recordcount. Useful for partitioning
+ the load among multiple servers, if the client is the bottleneck. Additionally, workloads
+ should support the "insertstart" property, which tells them which record to start at.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.yahoo.ycsb.Client.INSERT_COUNT_PROPERTY">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="Client()"><!-- --></A><H3>
+Client</H3>
+<PRE>
+public <B>Client</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="usageMessage()"><!-- --></A><H3>
+usageMessage</H3>
+<PRE>
+public static void <B>usageMessage</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkRequiredProperties(java.util.Properties)"><!-- --></A><H3>
+checkRequiredProperties</H3>
+<PRE>
+public static boolean <B>checkRequiredProperties</B>(java.util.Properties&nbsp;props)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="main(java.lang.String[])"><!-- --></A><H3>
+main</H3>
+<PRE>
+public static void <B>main</B>(java.lang.String[]&nbsp;args)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/yahoo/ycsb/BasicDB.html" title="class in com.yahoo.ycsb"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/yahoo/ycsb/CounterGenerator.html" title="class in com.yahoo.ycsb"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/yahoo/ycsb/Client.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Client.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
270 doc/javadoc/com/yahoo/ycsb/CounterGenerator.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_22) on Mon Apr 19 13:47:52 PDT 2010 -->
+<TITLE>
+CounterGenerator
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.yahoo.ycsb.CounterGenerator class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ parent.document.title="CounterGenerator";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/yahoo/ycsb/Client.html" title="class in com.yahoo.ycsb"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/yahoo/ycsb/DB.html" title="class in com.yahoo.ycsb"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html?com/yahoo/ycsb/CounterGenerator.html" target="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CounterGenerator.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.yahoo.ycsb</FONT>
+<BR>
+Class CounterGenerator</H2>
+<PRE>
+java.lang.Object
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/yahoo/ycsb/Generator.html" title="class in com.yahoo.ycsb">com.yahoo.ycsb.Generator</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../com/yahoo/ycsb/IntegerGenerator.html" title="class in com.yahoo.ycsb">com.yahoo.ycsb.IntegerGenerator</A>
+ <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.yahoo.ycsb.CounterGenerator</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>CounterGenerator</B><DT>extends <A HREF="../../../com/yahoo/ycsb/IntegerGenerator.html" title="class in com.yahoo.ycsb">IntegerGenerator</A></DL>
+</PRE>
+
+<P>
+Generates a sequence of integers 0, 1, ...
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+