10.Benchmark SQL 数据库测试工具代码——事务Payment
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50357684
事务Payment是轻量级的读写交易。
1. 输入数据
每个终端对应一个WAREHOUSE的ID
一个随机区域(1~10)
85%的时间,客户在本地的仓库和区域活动
15%的事件,在远程的仓库和区域活动。
此外60%的概率通过用户名字进行查找
40%的概率通过用户ID进行查找。
付款数额随机从1~5000
入参包括:终端仓库ID,客户仓库ID,付款数额,区域ID,客户区域ID,客户ID,客户名字,是否通过名字查找。
其中85%概率 终端仓库ID=客户仓库ID,区域ID=客户区域ID。
2. 步骤一
更新WAREHOUSE中的w_ytd变量(年度余额)
设置为输入的参数付款数额随机从1~5000
"UPDATE benchmarksql.warehouse SET w_ytd = w_ytd +? WHERE w_id = ? "
3. 步骤二
从warehouse总获得终端仓库ID所对应的属性。
"SELECT w_street_1,w_street_2, w_city, w_state, w_zip, w_name"+
" FROM benchmarksql.warehouse WHERE w_id = ?"
4. 步骤三
更新district表中的d_ytd,如下:
"UPDATE benchmarksql.district SETd_ytd = d_ytd + ? WHERE d_w_id = ? AND d_id = ?"
5. 步骤四
从district中获得区域的属性,如下:
"SELECT d_street_1,d_street_2, d_city, d_state, d_zip, d_name"+
" FROM benchmarksql.district WHERE d_w_id = ? AND d_id = ?"
6. 步骤五
如果通过名字查找:
从customer中获取客户仓库ID,客户区域ID,客户名字对应的数量namecnt。
"SELECT count(*) AS namecntFROM benchmarksql.customer " +
" WHERE c_last = ? AND c_d_id= ? AND c_w_id = ?"
再从customer表中,获取客户仓库ID,客户区域ID,客户名字对应的相关属性。
使用namecnt对应数量的中间一条记录。
"SELECT c_first, c_middle,c_id, c_street_1, c_street_2, c_city, c_state, c_zip," +
" c_phone, c_credit,c_credit_lim, c_discount, c_balance, c_since "+
" FROM benchmarksql.customerWHERE c_w_id = ? AND c_d_id = ? AND c_last = ? "+
"ORDER BY c_w_id, c_d_id, c_last, c_first "
获取相关属性。
如果是通过ID查找,则
直接通过c_w_id,c_d_id,c_id来获取,客户相关属性。
"SELECT c_first, c_middle,c_last, c_street_1, c_street_2, c_city, c_state, c_zip," +
" c_phone, c_credit,c_credit_lim, c_discount, c_balance, c_since "+
" FROM benchmarksql.customerWHERE c_w_id = ? AND c_d_id = ? AND c_id = ?"
7. 步骤六
将客户的列c_balance上加上随机的额度
根据客户的c_credit来执行:
如果为BC(bad credit)
则从customer表中选择c_data列
"SELECT c_data FROMbenchmarksql.customer WHERE c_w_id = ? AND c_d_id = ? AND c_id = ?"
修改原来的c_data,并更新customer中的c_data.如下:
"UPDATE benchmarksql.customerSET c_balance = ?, c_data = ? " +
" WHERE c_w_id = ? AND c_d_id = ? AND c_id = ?"
不更新客户的c_balance(余额)
如果为GC(good credit)
直接更新客户的c_balance.
"UPDATE benchmarksql.customerSET c_balance = ? WHERE c_w_id = ? AND c_d_id = ? AND c_id = ?"
8. 步骤七
获取w_name和d_name 各取10个字符。
通过4个空格连接。
然后插入到HISTORY表中如下:
"INSERT INTObenchmarksql.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 (?,?,?,?,?,?,?,?)"
9. 步骤八print message
输出付款事务相关信息:
时间
仓库ID
仓库街道1
仓库街道2
城市
区域ID
区域街道1
区域寄到2
区域城市、区域状态、区域右边
客户ID
客户姓名
客户街道1
客户街道2
客户城市、状态、邮编
客户信誉
客户折扣
客户手机
总共付款
客户信誉限制
客户余额