技术开发 频道

淘宝海量数据库OceanBase:读写事务

  【IT168 技术】在OceanBase系统中,客户的读写请求,即读写事务,都发给MergeServer(早期版本中写事务直接发给UpdateServer)。MergeServer解释分析这些读写事务的内容,例如词法和语法分析检查等。只读的事务,由MergeServer执行并应答客户端;非只读的事务,即写事务,由MergeServer进行预处理后,发送给UpdateServer执行,UpdateServer执行后应答MergeServer,MergeServer进行必要的处理后应答客户端。

  相关文章:

  淘宝海量数据库之一:来自业务的挑战

  淘宝海量数据库之二:一致性选择

  淘宝海量数据库之三:事务的ACID

  淘宝海量数据库OceanBase:系统架构详解

  淘宝海量数据库OceanBase:数据结构

  只读事务需要融合UpdateServer上的最新修改,因此MergeServer首先从相关的ChunkServer获得基线数据,然后从UpdateServer获得修改增量并融合到基线数据中形成最新数据。对于每个读事务,MergeServer首次请求UpdateServer时,UpdateServer会返回当前最新修改的快照的句柄,后续在同一读事务中如果MergeServer需要再次或多次访问UpdateServer,它就带上这个快照句柄,这样不论UpdateServer后续发生了什么修改,都不会影响MergeServer当前的读事务。极端情况下,例如整个数据库回滚到过去某个时刻,相应的快照句柄已经失效,则UpdateServer将返回错误,读事务失败。此外,如果某个MergeServer发生故障,导致其所获得的UpdateServer上的快照句柄无法释放,则这些快照句柄在UpdateServer上最终会失效并被释放。

  写事务首先由MergeServer进行解释分析和预处理,例如简单的schema合法性检查,初步的数据类型检查,基本的权限检查,等等。预处理完成后,MergeServer把解析的结果发送给UpdateServer。UpdateServer接收到MergeServer传来的客户的写事务请求后,会生成当前内容的一个快照,并尝试执行客户的修改请求,如果执行过程遇到任何异常,例如用户的权限错误,数据范围越界,或者违反唯一索引等等,则该快照被丢弃,并应答MergeServer事务失败;如果执行成功,则UpdateServer写commit日志,如果写日志失败,则该快照也被丢弃并应答MergeServer事务失败,否则,在UpdateServer内部原子地提交该修改,该修改生效且从此对访问者可见,并应答MergeServer写事务成功。MergeServer收到UpdateServer的应答后,根据应答的结果(成功或失败)进行相应处理,并应答客户端。

  如果MergeServer在约定时间内没有收到UpdateServer的应答,那么它并不确定UpdateServer是否执行了该事务以及如果执行了的话,执行的结果是成功还是失败,因此它应答客户端网络超时。如果客户端收到了MergeServer的网络超时应答或者客户端在约定时间内没有收到MergeServer的应答,那么客户端不能确定该事务是否执行了以及如果执行了话,执行的结果是成功还是失败,客户端将向用户返回网络超时的错误。用户收到网络超时的应答后,需要查询OceanBase以确定事务的执行情况。这类似于储户在银行ATM机器上执行了一个账务操作后,ATM返回超时(比如ATM机器到银行的网络中断或银行主机异常),那么储户的账务操作,可能执行了,也可能没有执行,需要在网络或银行主机恢复正常后查询账户方可确定。

0
相关文章