读写事务
在OceanBase系统中,用户的读写请求,即读写事务,都发给MergeServer。MergeServer解析这些读写事务的内容,例如词法和语法分析、schema检查等。对于只读事务,由MergeServer发给相应的ChunkServer分别执行后再合并每个ChunkServer的执行结果;对于读写事务,由MergeServer进行预处理后,发送给UpdateServer执行。
只读事务执行流程如下:
1> MergeServer解析SQL语句,词法分析、语法分析、预处理(schema合法性检查、权限检查、数据类型检查等),最后生成逻辑执行计划和物理执行计划。
2> 如果SQL请求只涉及单张表格,MergeServer将请求拆分后同时发给多台ChunkServer并发执行,每台ChunkServer将读取的部分结果返回MergeServer,由MergeServer来执行结果合并。如果SQL请求只涉及单张表格,MergeServer将请求拆分后同时发给多台ChunkServer并发执行,每台ChunkServer将读取的部分结果返回MergeServer,由MergeServer来执行结果合并。
3> 如果SQL请求涉及多张表格,MergeServer还需要执行联表、嵌套查询等操作。如果SQL请求涉及多张表格,MergeServer还需要执行联表、嵌套查询等操作。
4> MergeServer将最终结果返回给客户端。MergeServer将最终结果返回给客户端。
读写事务执行流程如下:
1> 与只读事务相同,MergeServer首先解析SQL请求,得到物理执行计划。
2> MergeServer请求ChunkServer获取需要读取的基线数据,并将物理执行计划和基线数据一起传给UpdateServer。MergeServer请求ChunkServer获取需要读取的基线数据,并将物理执行计划和基线数据一起传给UpdateServer。
3> UpdateServer根据物理执行计划执行读写事务,执行过程中需要使用MergeServer传入的基线数据。UpdateServer根据物理执行计划执行读写事务,执行过程中需要使用MergeServer传入的基线数据。
4> UpdateServer返回MergeServer操作成功或者失败,MergeServer接着会把操作结果返回客户端。UpdateServer返回MergeServer操作成功或者失败,MergeServer接着会把操作结果返回客户端。
例如,假设某SQL语句为:“update t1 set c1 = c1 + 1 where rowkey=1”,即将表格t1中主键为1的c1列加1,这一行数据存储在ChunkServer中,c1列的值原来为2012。那么,MergeServer执行SQL时首先从ChunkServer读取主键为1的数据行的c1列,接着将读取结果(c1=2012)以及SQL语句的物理执行计划一起发送给UpdateServer。UpdateServer根据物理执行计划将c1加1,即将c1变为2013并记录到MemTable中。当然,更新MemTable之前需要记录操作日志。
原文链接:https://blog.csdn.net/qq_22162093/article/details/107614919
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




