加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

OceanBase如何获得TPC-C测试第1名?

发布时间:2019-10-11 08:31:12 所属栏目:编程 来源:又是第1的
导读:TPC-C是TPC组织(国际事宜机能委员会)拟定的关于商品贩卖的订单建设和订单付出等的基准测试尺度,是数据库联机买卖营业处理赏罚体系的势力巨子基准测试尺度。 蚂蚁金服自研的漫衍式相关数据库OceanBase得到TPC-C测试第一名后,引起了大量存眷,本日,我们约请了OceanBas

Prepared Statement是一种二进制的哀求交互协议,可以大大低落体系的交互本钱。OceanBase不只支持用户措施与数据库间行使Prepared Statement, 也支持在存储进程引擎挪用SQL引擎执行时行使这种交互方法。存储进程在对SQL举办一次Prepare操纵并获取独一id后, 后续的每次执行仅必要传入该id和对应的参数,体系可以通过高速缓存找到对应的存储进程或SQL打算开始执行。该进程对比行使SQL文本的交互方法,省去了大量哀求文本理会的CPU开销。

OceanBase内部实现了高速缓存来缓存存储进程的可执行代码及SQL执行打算,差异参数的存储进程和SQL可以通过这一高速缓存快速获取必要的执行工具, 耗时一样平常在几十微秒以内, 有用停止了从头编译带来的毫秒级的耽误和CPU耗损。

可更新视图

在OLTP场景中,通过镌汰应用与数据库的交互次数来实现机能晋升的例子许多,可更新视图就是个中之一。我们常见的数据库视图凡是是只读的,通过界说视图,用户可以界说本身感乐趣的数据以及其获取接口,但视图同时也可以作为更新操纵的进口,好比在TPC-C的new order建设场景中,应用必要获得商品信息,更新库存并获得更新后的值。一样平常可以通过两条SQL实现这一进程:

  1. select i_price,i_name, i_data from item where i_id = ?; 

  2.   

  3.     UPDATE stock 

  4.       SET s_order_cnt = s_order_cnt + 1, 

  5.           s_ytd = s_ytd + ?, 

  6.           s_remote_cnt = s_remote_cnt + ?, 

  7.           s_quantity = (CASE WHEN s_quantity< ? + 10 THEN s_quantity + 91 ELSE s_quantity END) - ? 

  8.       WHERE s_i_id = ? 

  9.           AND s_w_id = ? 

  10.       RETURNING s_quantity, s_dist_01, 

  11.           CASE WHEN i_data NOT LIKE'%ORIGINAL%' THEN 'G' ELSE (CASE WHEN s_data NOT LIKE '%ORIGINAL%' THEN 'G'ELSE 'B' END) END 

  12.       BULK COLLECT INTO ...; 

但通过成立一个可更新视图:

  1. CREATE VIEW stock_item AS 

  2.       SELECT i_price, i_name, i_data, s_i_id,s_w_id, s_order_cnt, s_ytd, s_remote_cnt, s_quantity, s_data, s_dist_01 

  3.       FROM stock s, item i WHERE s.s_i_id =i.i_id; 

我们就可以通过一条语句更新库存并获得商品和库存信息:

  1. UPDATE stock_item 

  2.       SET s_order_cnt = s_order_cnt + 1, 

  3.           s_ytd = s_ytd + ?, 

  4.           s_remote_cnt = s_remote_cnt + ?, 

  5.           s_quantity = (CASE WHEN s_quantity< ? + 10 THEN s_quantity + 91 ELSE s_quantity END) - ? 

  6.       WHERE s_i_id = ? 

  7.           AND s_w_id = ? 

  8.       RETURNING i_price, i_name, s_quantity,s_dist_01, 

  9.           CASE WHEN i_data NOT LIKE'%ORIGINAL%' THEN 'G' ELSE (CASE WHEN s_data NOT LIKE '%ORIGINAL%' THEN 'G'ELSE 'B' END) END 

  10.       BULK COLLECT INTO ...; 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读