20220526#每日一问#OceanBase社区版中有没有用到类似Oracle的回滚段技术?

记不太清社区版是否有闪回功能了,如果有的话?

是否采用了类似Oracle的回滚段技术呢?

社区版有回收站功能

嗯这个确实是有的,不一样的问题

社区版暂时没有,将来也许会有!

我觉得是没有的,回滚段只是Oracle对于事务回滚的一种处理手段。

并且是MVCC多版本并发控制中对于历史版本的一种管理手段。这个在目前数据库业界也就3种处理方式:

  • 一类是将历史版本直接存在数据表中的,称为 Append-Only,典型代表是 PostgreSQL。
  • 另外两类都是在独立的表空间存储历史版本,它们区别在于存储的方式是全量还是增量。
  • 增量存储就是只存储与版本间变更的部分,这种方式称为 Delta,也就是数学中常作为增量符号的那个 Delta,典型代表是 MySQL 和 Oracle。
  • 全量存储则是将每个版本的数据全部存储下来,这种方式称为 Time-Travle,典型代表是 HANA


然后像OB或者TiDB这种使用LSMTree存储引擎的分布式数据库,自身已经支持多版本并发控制,就不需要使用像Oracle回滚段那种技术,开辟空间,专门存放增量的多版本数据了。


LSMTree存储引擎中也基本都是多版本全量存储。


然后关于不同隔离级别的读一致性使用说明,在OB中有如下描述:

多版本读一致性使用

多版本读一致性在数据库内部是广泛使用的,也是实现并发控制的关键之一:

弱一致性读: OceanBase 数据库的弱一致性读依旧提供了事务的一致性快照,不会返回未提交事务和一半

事务的情况。

强一致性读:OceanBase 数据库的强一致性读分为两种,分别是事务级别读版本号和语句级别版本号,分

别提供给快照读和读已提交两个隔离级别使用,需要提供返回事务一致性点的能力。

只读事务:OceanBase 数据库的只读语句也是要求提供强一致性读相同的能力,需要提供返回事务一致性

点的能力。

备份恢复点:OceanBase 数据库需要提供可以备份到一个事务一致性快照,防止备份了多余、未提交的事

务或者没有备份需要备份的事务。 



总而言之,就是对于LSMTree类型存储引擎,并不需要使用回滚段那种技术手段处理待回滚的数据。

以上是我个人理解,没有翻看源码,不知道是否正确。还请批评指正

感谢张总科普,我也不太了解这个lsm-tree的垃圾数据和回滚是怎么处理的。感觉ob的变更都在内存,试了试闪回表还挺好用的,就是好奇这一部分数据放在哪里了,什么机制处理的。

数据就是写多份,每一份都有版本,MVCC多版本控制就是控制每个事务可见的最大版本,然后写入读取版本出现多个版本,回滚到上个版本,写入新版本。LSMTree的写就是追加写,不断写入新版本数据库,compact干的事情就是合并生成新的sstable,这个过程就会删除历史版本。