Skip to content
This repository has been archived by the owner on Aug 23, 2021. It is now read-only.

OLTPBenchmark Support for Apache Phoenix #366

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions config/sample_tpcc_phoenix_config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<parameters>

<!-- Connection details -->
<dbtype>phoenix</dbtype>
<driver>org.apache.phoenix.jdbc.PhoenixDriver</driver>
<DBUrl>jdbc:phoenix:localhost:2181/tpcc</DBUrl>
<username>root</username>
<password></password>
<isolation>TRANSACTION_READ_COMMITTED</isolation>
<uploadCode></uploadCode>
<uploadUrl></uploadUrl>

<!-- Scale factor is the number of warehouses in TPCC -->
<scalefactor>2</scalefactor>

<!-- The workload -->
<terminals>2</terminals>
<works>
<work>
<time>60</time>
<rate>10000</rate>
<weights>45,43,4,4,4</weights>
</work>
</works>

<!-- TPCC specific -->
<transactiontypes>
<transactiontype>
<name>NewOrder</name>
</transactiontype>
<transactiontype>
<name>Payment</name>
</transactiontype>
<transactiontype>
<name>OrderStatus</name>
</transactiontype>
<transactiontype>
<name>Delivery</name>
</transactiontype>
<transactiontype>
<name>StockLevel</name>
</transactiontype>
</transactiontypes>
</parameters>
3 changes: 2 additions & 1 deletion ivy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
<dependency org="org.xerial" name="sqlite-jdbc" rev="3.6.20" force="true" conf="test->compile(*),runtime(*),master(*)"/>
<dependency org="org.postgresql" name="postgresql" rev="42.2.9" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="mysql" name="mysql-connector-java" rev="5.1.47"/>
<dependency org="org.hsqldb" name="hsqldb" rev="2.4.1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.hsqldb" name="hsqldb" rev="2.4.1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.apache.phoenix" name="phoenix-client-hbase-2.4" rev="5.1.1" conf="compile->compile(*),master(*);runtime->runtime(*)"/>

<!-- Core Libraries -->
<dependency org="junit" name="junit" rev="4.11" force="true" conf="test->compile(*),runtime(*),master(*)"/>
Expand Down
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<properties>
<maven.compiler.source>1.10</maven.compiler.source>
<maven.compiler.target>1.10</maven.compiler.target>
<phoenix.version>5.1.1</phoenix.version>
</properties>

<!-- *************************************** BUILDING *************************************** -->
Expand Down Expand Up @@ -197,7 +198,11 @@
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>

<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-client-hbase-2.4</artifactId>
<version>${phoenix.version}</version>
</dependency>
<!--
Because this isn't an open source jar this is required:
$ mvn install:install-file \
Expand Down
141 changes: 141 additions & 0 deletions src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-phoenix-ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
DROP TABLE IF EXISTS WAREHOUSE;
CREATE TABLE WAREHOUSE (
W_ID INTEGER NOT NULL,
W_YTD DECIMAL(12,2) NOT NULL,
W_TAX DECIMAL(4,4) NOT NULL,
W_NAME VARCHAR(10) NOT NULL,
W_STREET_1 VARCHAR(20) NOT NULL,
W_STREET_2 VARCHAR(20) NOT NULL,
W_CITY VARCHAR(20) NOT NULL,
W_STATE CHAR(2) NOT NULL,
W_ZIP CHAR(9) NOT NULL,
CONSTRAINT warehouse_pk PRIMARY KEY (W_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

DROP TABLE IF EXISTS DISTRICT;
CREATE TABLE DISTRICT (
D_W_ID INTEGER NOT NULL,
D_ID INTEGER NOT NULL,
D_YTD DECIMAL(12,2) NOT NULL,
D_TAX DECIMAL(4,4) NOT NULL,
D_NEXT_O_ID INTEGER NOT NULL,
D_NAME VARCHAR(10) NOT NULL,
D_STREET_1 VARCHAR(20) NOT NULL,
D_STREET_2 VARCHAR(20) NOT NULL,
D_CITY VARCHAR(20) NOT NULL,
D_STATE CHAR(2) NOT NULL,
D_ZIP CHAR(9) NOT NULL,
CONSTRAINT district_pk PRIMARY KEY (D_W_ID,D_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

-- TODO: C_SINCE ON UPDATE CURRENT_TIMESTAMP,
DROP TABLE IF EXISTS CUSTOMER;
CREATE TABLE CUSTOMER (
C_W_ID INTEGER NOT NULL,
C_D_ID INTEGER NOT NULL,
C_ID INTEGER NOT NULL,
C_DISCOUNT DECIMAL(4,4) NOT NULL,
C_CREDIT CHAR(2) NOT NULL,
C_LAST VARCHAR(16) NOT NULL,
C_FIRST VARCHAR(16) NOT NULL,
C_CREDIT_LIM DECIMAL(12,2) NOT NULL,
C_BALANCE DECIMAL(12,2) NOT NULL,
C_YTD_PAYMENT FLOAT NOT NULL,
C_PAYMENT_CNT INTEGER NOT NULL,
C_DELIVERY_CNT INTEGER NOT NULL,
C_STREET_1 VARCHAR(20) NOT NULL,
C_STREET_2 VARCHAR(20) NOT NULL,
C_CITY VARCHAR(20) NOT NULL,
C_STATE CHAR(2) NOT NULL,
C_ZIP CHAR(9) NOT NULL,
C_PHONE CHAR(16) NOT NULL,
C_SINCE TIMESTAMP NOT NULL,
C_MIDDLE CHAR(2) NOT NULL,
C_DATA VARCHAR(500) NOT NULL,
CONSTRAINT customer_pk PRIMARY KEY (C_W_ID, C_D_ID, C_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;
CREATE INDEX IDX_CUSTOMER_NAME ON CUSTOMER (C_W_ID,C_D_ID,C_LAST,C_FIRST);

-- TODO: O_ENTRY_D ON UPDATE CURRENT_TIMESTAMP
DROP TABLE IF EXISTS OORDER;
CREATE TABLE OORDER (
O_W_ID INTEGER NOT NULL,
O_D_ID INTEGER NOT NULL,
O_ID INTEGER NOT NULL,
O_C_ID INTEGER NOT NULL,
O_CARRIER_ID INTEGER DEFAULT NULL,
O_OL_CNT DECIMAL(2,0) NOT NULL,
O_ALL_LOCAL DECIMAL(1,0) NOT NULL,
O_ENTRY_D TIMESTAMP NOT NULL,
CONSTRAINT order_pk PRIMARY KEY (O_W_ID,O_D_ID,O_ID)
--UNIQUE (O_W_ID,O_D_ID,O_C_ID,O_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

DROP TABLE IF EXISTS NEW_ORDER;
CREATE TABLE NEW_ORDER (
NO_W_ID INTEGER NOT NULL,
NO_D_ID INTEGER NOT NULL,
NO_O_ID INTEGER NOT NULL,
CONSTRAINT new_order_pk PRIMARY KEY (NO_W_ID,NO_D_ID,NO_O_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

-- TODO: H_DATE ON UPDATE CURRENT_TIMESTAMP
DROP TABLE IF EXISTS HISTORY;
CREATE TABLE HISTORY (
H_C_ID INTEGER NOT NULL,
H_C_D_ID INTEGER NOT NULL,
H_C_W_ID INTEGER NOT NULL,
H_D_ID INTEGER NOT NULL,
H_W_ID INTEGER NOT NULL,
H_DATE TIMESTAMP NOT NULL,
H_AMOUNT DECIMAL(6,2) NOT NULL,
H_DATA VARCHAR(24) NOT NULL,
CONSTRAINT history_pk PRIMARY KEY(H_C_ID,H_C_D_ID,H_C_W_ID,H_D_ID,H_W_ID,H_DATE)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

DROP TABLE IF EXISTS ITEM;
CREATE TABLE ITEM (
I_ID INTEGER NOT NULL,
I_NAME VARCHAR(24) NOT NULL,
I_PRICE DECIMAL(5,2) NOT NULL,
I_DATA VARCHAR(50) NOT NULL,
I_IM_ID INTEGER NOT NULL,
CONSTRAINT item_pk PRIMARY KEY (I_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

DROP TABLE IF EXISTS STOCK;
CREATE TABLE STOCK (
S_W_ID INTEGER NOT NULL,
S_I_ID INTEGER NOT NULL,
S_QUANTITY DECIMAL(4,0) NOT NULL,
S_YTD DECIMAL(8,2) NOT NULL,
S_ORDER_CNT INTEGER NOT NULL,
S_REMOTE_CNT INTEGER NOT NULL,
S_DATA VARCHAR(50) NOT NULL,
S_DIST_01 CHAR(24) NOT NULL,
S_DIST_02 CHAR(24) NOT NULL,
S_DIST_03 CHAR(24) NOT NULL,
S_DIST_04 CHAR(24) NOT NULL,
S_DIST_05 CHAR(24) NOT NULL,
S_DIST_06 CHAR(24) NOT NULL,
S_DIST_07 CHAR(24) NOT NULL,
S_DIST_08 CHAR(24) NOT NULL,
S_DIST_09 CHAR(24) NOT NULL,
S_DIST_10 CHAR(24) NOT NULL,
CONSTRAINT stock_pk PRIMARY KEY (S_W_ID, S_I_ID)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;

DROP TABLE IF EXISTS ORDER_LINE;
CREATE TABLE ORDER_LINE (
OL_W_ID INTEGER NOT NULL,
OL_D_ID INTEGER NOT NULL,
OL_O_ID INTEGER NOT NULL,
OL_NUMBER INTEGER NOT NULL,
OL_I_ID INTEGER NOT NULL,
OL_DELIVERY_D TIMESTAMP,
OL_AMOUNT DECIMAL(6,2) NOT NULL,
OL_SUPPLY_W_ID INTEGER NOT NULL,
OL_QUANTITY DECIMAL(2,0) NOT NULL,
OL_DIST_INFO CHAR(24) NOT NULL,
CONSTRAINT order_line_pk PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER)
) IMMUTABLE_ROWS=true,TRANSACTIONAL=true;
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?xml version="1.0"?>
<dialects>
<dialect type="phoenix">
<procedure name="NewOrder">
<statement name="stmtGetDistSQL">
SELECT D_NEXT_O_ID, D_TAX
FROM DISTRICT
WHERE D_W_ID = ? AND D_ID = ?
</statement>
<statement name="stmtGetStockSQL">
SELECT
S_QUANTITY, S_DATA, S_DIST_01, S_DIST_02, S_DIST_03, S_DIST_04, S_DIST_05,
S_DIST_06, S_DIST_07, S_DIST_08, S_DIST_09, S_DIST_10
FROM STOCK
WHERE
S_I_ID = ?
AND S_W_ID = ?
</statement>
<statement name="stmtInsertOOrderSQL">
UPSERT INTO OORDER (O_ID, O_D_ID, O_W_ID, O_C_ID, O_ENTRY_D, O_OL_CNT, O_ALL_LOCAL) VALUES (?, ?, ?, ?, ?, ?, ?)")
</statement>
<statement name="stmtInsertNewOrderSQL">
UPSERT INTO NEW_ORDER(NO_O_ID, NO_D_ID, NO_W_ID) VALUES ( ?, ?, ?)
</statement>
<statement name="stmtUpdateDistSQL">
UPSERT INTO DISTRICT(D_NEXT_O_ID,D_W_ID,D_ID) SELECT D_NEXT_O_ID + 1,D_W_ID,D_ID FROM DISTRICT WHERE D_W_ID = ? AND D_ID = ?
</statement>
<statement name="stmtInsertOOrderSQL">
UPSERT INTO OORDER(O_ID, O_D_ID, O_W_ID, O_C_ID, O_ENTRY_D, O_OL_CNT, O_ALL_LOCAL) VALUES (?, ?, ?, ?, ?, ?, ?)
</statement>
<statement name="stmtUpdateStockSQL">
UPSERT INTO STOCK(S_QUANTITY,S_YTD,S_ORDER_CNT,S_REMOTE_CNT,S_I_ID,S_W_ID) SELECT ?,S_YTD + ?,S_ORDER_CNT + 1,S_REMOTE_CNT + ?,S_I_ID,S_W_ID FROM STOCK WHERE S_I_ID = ? AND S_W_ID = ?
</statement>
<statement name="stmtInsertOrderLineSQL">
UPSERT INTO ORDER_LINE(OL_O_ID, OL_D_ID, OL_W_ID, OL_NUMBER, OL_I_ID, OL_SUPPLY_W_ID, OL_QUANTITY, OL_AMOUNT, OL_DIST_INFO) VALUES (?,?,?,?,?,?,?,?,?)
</statement>
</procedure>
<procedure name="Delivery">
<statement name="delivUpdateCarrierIdSQL">
UPSERT INTO OORDER(O_CARRIER_ID,O_ID,O_D_ID,O_W_ID) SELECT ?,O_ID,O_D_ID,O_W_ID FROM OORDER WHERE O_ID = ? AND O_D_ID = ? AND O_W_ID = ?
</statement>
<statement name="delivUpdateDeliveryDateSQL">
UPSERT INTO ORDER_LINE(OL_DELIVERY_D,OL_O_ID,OL_D_ID,OL_W_ID,OL_NUMBER) SELECT ?,OL_O_ID,OL_D_ID,OL_W_ID,OL_NUMBER FROM ORDER_LINE WHERE OL_O_ID = ? AND OL_D_ID = ? AND OL_W_ID = ?
</statement>
<statement name="delivUpdateCustBalDelivCntSQL">
UPSERT INTO CUSTOMER(C_BALANCE,C_DELIVERY_CNT,C_W_ID,C_D_ID,C_ID) SELECT C_BALANCE + ?, C_DELIVERY_CNT + 1, C_W_ID,C_D_ID,C_ID FROM CUSTOMER WHERE C_W_ID = ? AND C_D_ID = ? AND C_ID = ?
</statement>
</procedure>
<procedure name="Payment">
<statement name="payUpdateWhseSQL">
UPSERT INTO WAREHOUSE(W_YTD,W_ID) SELECT W_YTD + ?,W_ID FROM WAREHOUSE WHERE W_ID=?
</statement>
<statement name="payUpdateDistSQL">
UPSERT INTO DISTRICT(D_YTD,D_W_ID,D_ID) SELECT D_YTD + ?,D_W_ID,D_ID FROM DISTRICT WHERE D_W_ID = ? AND D_ID = ?
</statement>
<statement name="payUpdateCustBalCdataSQL">
UPSERT INTO CUSTOMER(C_BALANCE,C_YTD_PAYMENT,C_PAYMENT_CNT,C_DATA,C_W_ID,C_D_ID,C_ID) SELECT ?,?,?,?,C_W_ID,C_D_ID,C_ID FROM CUSTOMER WHERE C_W_ID = ? AND C_D_ID = ? AND C_ID = ?
</statement>
<statement name="payUpdateCustBalSQL">
UPSERT INTO CUSTOMER(C_BALANCE,C_YTD_PAYMENT,C_PAYMENT_CNT,C_W_ID,C_D_ID,C_ID) SELECT ?,?,?,C_W_ID,C_D_ID,C_ID FROM CUSTOMER WHERE C_W_ID = ? AND C_D_ID = ? AND C_ID = ?
</statement>
<statement name="payInsertHistSQL">
UPSERT INTO HISTORY(H_C_D_ID, H_C_W_ID, H_C_ID, H_D_ID, H_W_ID, H_DATE, H_AMOUNT, H_DATA) VALUES (?,?,?,?,?,?,?,?)
</statement>
</procedure>
</dialect>
</dialects>
1 change: 1 addition & 0 deletions src/com/oltpbenchmark/types/DatabaseType.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public enum DatabaseType {
CASSANDRA("com.github.adejanovski.cassandra.jdbc.CassandraDriver", true, true, false),
MEMSQL("com.mysql.jdbc.Driver", true, false, false),
NOISEPAGE("org.postgresql.Driver", false, false, true),
PHOENIX("org.apache.phoenix.jdbc.PhoenixDriver",false, false, true),
;

private DatabaseType(String driver,
Expand Down