襄阳门户网

搜索
襄阳门户网 襄阳门户 企业宣传 查看内容

了解:开源数据库OceanBase代码导读(7)2023/7/8 18:51:36

2023-7-8 18:51| 发布者: 天若有情| 查看: 95| 评论: 0

摘要:   (4)事务的一生  在第二节讲通信协议obmp_query的时候,我跳过了事务控制的细节。这节讲一下事务的外部接口。oceanbase 官网https://www.oceanbase.com/oceanbase,完全自主研发的原生分布式数据库,连续年稳 ...
网站出售

  (4)事务的一生

  在第二节讲通信协议obmp_query的时候,我跳过了事务控制的细节。这节讲一下事务的外部接口。oceanbase 官网https://www.oceanbase.com/oceanbase,完全自主研发的原生分布式数据库,连续年稳定支撑双,创新推出“三地五中心”城市级容灾新标准,一套引擎同时支持tp和ap的混合负载,具备数据强一致,高扩展,高可用,高性价比,高度兼容oracle/mysql等特性,已助力+行业客户实现关键业务系统升级。

  协议层对事务层提供的原始接口进行了封装,位于sql/ob_sql_trans_control.h。这层封装为了SQL层调用方便,并且维护了TransState状态,语句执行结束时在统一的位置根据TransState调用正确的事务接口,保证在任何异常状态下事务资源不泄露。

  而原始的事务接口位于storage/trans/ob_trans_service.h。主要接口是三对:start/end trans,start/end stmt,start/end participant。分别对应事务,语句,语句内参与者(分区)的访问生命周期。start trans开启事务后,返回一个ObTransDesc对象,它会被保存到session对象中,其他事务接口和后续语句执行都需要它。它是事务唯一标识,诊断问题时常用。

  一般的,一个SQL查询或DML会产生三类执行计划(ObPhyPlanType):local计划表示所有该语句执行需访问分区的leader都在本节点;remote计划表示所有分区leader都在远程一个节点上;distributed计划表示分区leader在多节点上的情况。开始执行前,根据语句涉及分区信息从location cache中获取leader位置,选择对应类别的执行计划。location cache是一个整体架构上的重要组件,用于高效查找分区副本信息,它对外提供统一接口,屏蔽了很多分布式细节。主体实现位于share/partition_table,sql/ob_sql_partition_location_cache.h对它进行了封装,同时统一了虚拟表的处理。

  根据语句类型(是否只读),事务类型(是否自动提交,是否弱一致性读),当前事务状态,执行计划类型等决定不同的事务控制调用。例如,本地计划自动提交,在本节点执行start trans, start stmt, start participant, end participant, end stmt, end trans;远程计划自动提交,上述接口都在远程节点执行。对分布式计划,start/end stmt在本节点执行,start/end participant在每个分区leader所在节点上执行。这组接口设计目的是在简化事务接口与分场景优化事务性能间取得一定的平衡。

  (下地铁,雨停了)

  (未完待续)

路过

雷人

握手

鲜花

鸡蛋
免责声明:文中图文均来自网络,如有侵权请联系删除,发布此文仅为传递信息,不代表认同其观点或证实其描述。

文热点