== Dependencies == nanomsg (nanomsg.org) jemalloc (www.canonware.com/jemalloc)
Create a file called ifconfig.txt with IP addresses for the servers and clients, one per line.
$ make $ ./rundb -nid[unique server ID] & $ ./runcl -nid[unique client ID] &
== General Features ==
ddbms is a OLTP database benchmark with the following features.
- Seven different concurrency control algorithms are supported. NO_WAIT[1] : no wait two phase locking WAIT_DIE[1] : wait and die two phase locking TIMESTAMP[1] : basic T/O MVCC[2] : multi-version T/O OCC[3] : optimistic concurrency control (MaaT) CALVIN[4] : Calvin
[1] Phlip Bernstein, Nathan Goodman, "Concurrency Control in Distributed Database Systems", Computing Surveys, June 1981 [2] Phlip Bernstein, Nathan Goodman, "Multiversion Concurrency Control -- Theory and Algorithms", Transactions on Database Systems, Dec 1983 [3] H. Mahmoud et al, "MaaT: Effective and Scalable Coordination of Distributed Transactions in the Cloud", VLDB 2014 [4] A. Thomson et al, "Calvin: Fast Distributed Transactions for Partitioned Database Systems", SIGMOD 2012
- Three benchmarks are supported. 2.1 YCSB[5] 2.2 TPCC[6] Only Payment and New Order transactions are modeled. 2.2 Product-Parts-Supplier (PPS)
[5] B. Cooper et al, "Benchmarking Cloud Serving Systems with YCSB", SoCC 201 [6] http://www.tpc.org/tpcc/
== Config File ==
dbms benchmark has the following parameters in the config file. Parameters with a * sign should not be changed.
-
CORE_CNT : number of cores modeled in the system.
-
NODE_CNT : number of computation nodes modeled in the system
-
PART_CNT : number of logical partitions in the system; Should equal CORE_CNT * NODE_CNT
-
THREAD_CNT : number of worker threads
-
REM_THREAD_CNT : number of message receiver threads
-
SEND_THREAD_CNT : number of message sender threads
-
TPORT_TYPE : communication protocol (TCP, IPC)
-
ENVIRONMENT_EC2 : true if running on Amazon EC2
-
PAGE_SIZE : memory page size
-
CL_SIZE : cache line size
-
DONE_TIMER : number of nanoseconds to run experiment
-
WARMUP_TIMER : number of nanoseconds to run for warmup
-
SEQ_BATCH_TIMER : number of nanoseconds between CALVIN batches
-
WORKLOAD : workload supported (TPCC, YCSB, or PPS)
-
CC_ALG : concurrency control algorithm (WAIT_DIE, NO_WAIT, TIMESTAMP, MVCC, CALVIN, or MAAT)
-
ISOLATION_LEVEL : system isolation level (SERIALIZABLE, READ_COMMITTED, READ_UNCOMMITTED, or NOLOCK)
-
THREAD_ALLOC : per thread allocator.
-
* MEM_PAD : enable memory padding to avoid false sharing.
-
MEM_ALLIGN : allocated blocks are alligned to MEM_ALLIGN bytes
-
* ROLL_BACK : roll back the modifications if a transaction aborts.
-
ENABLE_LATCH : enable latching in btree index
-
* CENTRAL_INDEX : centralized index structure
-
* CENTRAL_MANAGER : centralized lock/timestamp manager
-
INDEX_STRCT : data structure for index.
-
BTREE_ORDER : fanout of each B-tree node
-
TS_TWR : enable Thomas Write Rule (TWR) in TIMESTAMP
-
HIS_RECYCLE_LEN : in MVCC, history will be recycled if they are too long.
-
MAX_WRITE_SET : the max size of a write set in OCC.
-
MAX_ROW_PER_TXN : max number of rows touched per transaction.
-
QUERY_INTVL : the rate at which database queries come
-
MAX_TXN_PER_PART : maximum transactions to run per partition.
// for YCSB Benchmark
- SYNTH_TABLE_SIZE : table size
- ZIPF_THETA : theta in zipfian distribution (rows accessed follow zipfian distribution)
- READ_PERC :
- WRITE_PERC :
- SCAN_PERC : percentage of read/write/scan queries. they should add up to 1.
- SCAN_LEN : number of rows touched per scan query.
- PART_PER_TXN : number of logical partitions to touch per transaction
- PERC_MULTI_PART : percentage of multi-partition transactions
- REQ_PER_QUERY : number of queries per transaction FIRST_PART_LOCAL : with this being true, the first touched partition is always the local partition.
// for TPCC Benchmark
- NUM_WH : number of warehouses being modeled.
- PERC_PAYMENT : percentage of payment transactions.
- DIST_PER_WH : number of districts in one warehouse
- MAX_ITEMS : number of items modeled.
- CUST_PER_DIST : number of customers per district
- ORD_PER_DIST : number of orders per district
- FIRSTNAME_LEN : length of first name
- MIDDLE_LEN : length of middle name
- LASTNAME_LEN : length of last name
// for PPS Benchmark
- MAX_PPS_PART_KEY : number of parts in the parts table
- MAX_PPS_PRODUCT_KEY : number of products in the products table
- MAX_PPS_SUPPLIER_KEY : number of suppliers in the suppliers table
- MAX_PPS_PARTS_PER : number of parts per product or supplier