当前位置:首页 > 云服务器 > 正文内容

9.Benchmark SQL 数据库测试工具代码——事务New-Order,badman250的博客 - 皇冠云

来源于网络1个月前 (05-26)云服务器0
香港256IP千兆站群服务器BGP专线240元起! 华为云香港物理机精品线路全面上线![特价] 企业级CN2 GIA双程专线高速回国 T3机房 香港美国韩国海外独立物理服务器特价热销中!

9.Benchmark SQL 数据库测试工具代码——事务New-Order

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50357678

New-Order事务是一个中等的量级的读写事务。

是整个负载的主心骨。

1.  输入input data

仓库ID,区域ID,用户ID,物品数量,是否本地供货,物品ID,供货仓库ID,订单数量。

其中区域ID随机从1~10中区,保证D_W_ID=W_ID。

用户ID,通过随机获取,保证C_D_ID=D_ID,C_W_ID=W_ID。

物品数量5~15之间,平均是10。

默认都是本地

物品ID是数组,取决于物品数量,数据就多大

供货仓库ID也是数组,取决于物品数量,数据就多大

订单数量也是数组,取决于物品数量,数据就多大。

         根据物品数量,进行循环:

设置物品ID(1~10 0000)

                   获取供货仓库ID,1%的概率是异地供货。

                   物品数量时随机1~10之间。

         然后1%的需要回滚,将最后一种物品的ID(一个订单平均有10种物品)设置为-12345

参数设置完毕。

2.     步骤一SELECT FROMCUSTOMER&WAREHOUSE

先从customer表,warehouse表中,获取 c_discount,c_last,c_credit,w_tax属性。

使用条件是w_id, w_id=c_w_id,c_d_id,c_id.

"SELECT c_discount, c_last,c_credit, w_tax" +

                "  FROM benchmarkSQL.customer,benchmarksql.warehouse" +

                " WHERE w_id = ? AND w_id = c_w_id"+

                  " AND c_d_id = ? AND c_id = ?"

3.  步骤二select from district

从表district 中选择 d_next_o_id,d_tax 用于更新。使用for update锁住要更新的行。

"SELECT d_next_o_id, d_taxFROM benchmarksql.district" +

                    " WHERE d_id = ? AND d_w_id = ? FOR UPDATE"

4.  步骤三insert into new_order

将o_id,d_id,w_id的值 插入到表中NEW_ORDER。

"INSERT INTObenchmarksql.NEW_ORDER (no_o_id, no_d_id, no_w_id) " +

                        "VALUES ( ?, ?, ?)"

5.  步骤四update district

更新district表中的d_next_o_id值。

UPDATE benchmarksql.district SETd_next_o_id = d_next_o_id + 1 " +

                " WHERE d_id = ? AND d_w_id = ?

 

6.  步骤五insert into oorder

插入到表oorder中,包括o_id,d_id,w_id,c_id,o_ol_cnt,o_all_local

"INSERT INTObenchmarksql.OORDER " +

                  " (o_id, o_d_id, o_w_id, o_c_id, o_entry_d, o_ol_cnt,o_all_local)" +

                  " VALUES (?, ?, ?, ?, ?, ?, ?)"

7.  步骤六select from item & update stock

根据订单中物品种类(平均10个)

循环:

         每个物品的供应仓库,每个物品的数量。

         如果如果物品的ID为-12345则抛出异常,后续回滚。

         从ITEM表中选择物品的价格、名字、数据

         "SELECT i_price, i_name , i_data FROMbenchmarksql.item WHERE i_id = ?"

         然后从stock表(库存中)选择需要更新的行如下:

"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 benchmarksql.stock WHERE s_i_id = ? AND s_w_id = ? FORUPDATE"

         其中使用了select …for update.

         获得stock表中的相关信息,

然后处理stock中的s_quantity数量。以及s_remote_cnt_increment.进行更新,如下:

"UPDATE benchmarksql.stockSET s_quantity = ? , s_ytd = s_ytd + ?, s_remote_cnt = s_remote_cnt + ? " +

                    " WHERE s_i_id =? AND s_w_id = ?"

8.  步骤七insert into order_line

获取该物品的价格(单价乘以数量)

然后根据该物品中i_data和s_data中是否包含ORIGINAL字符串,来判断物品品牌是BAD还是GOOD。

接着根据d_id(区域ID)来设置 ol_dist_info

最后插入到order_line表中,如下:

"INSERT INTObenchmarksql.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 (?,?,?,?,?,?,?,?,?)"

循环结束。

9.  步骤八print message

输出该订单相关的信息,

用户所在的仓库ID

仓库税

区域ID

区域税

订单ID

订单物品种类数量

用户ID

用户名字

用户信用折扣

每种物品的仓库ID,物品ID,物品名字,该物品数量,仓库数量,物品品牌,单品价格,该物品合计

最后输出该订单的总价格。

然后该交易结束。

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/notbaron/article/details/50357678

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

扫描二维码推送至手机访问。

版权声明:文章来源于互联网公开页面遵守互联网分享协议,若涉及侵权请联系客服处理。

本文链接:https://www.idchg.com/info/201415/

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。