记不太清社区版是否有闪回功能了,如果有的话?
是否采用了类似Oracle的回滚段技术呢?
记不太清社区版是否有闪回功能了,如果有的话?
是否采用了类似Oracle的回滚段技术呢?
社区版有回收站功能
嗯这个确实是有的,不一样的问题
社区版暂时没有,将来也许会有!
我觉得是没有的,回滚段只是Oracle对于事务回滚的一种处理手段。
并且是MVCC多版本并发控制中对于历史版本的一种管理手段。这个在目前数据库业界也就3种处理方式:
然后像OB或者TiDB这种使用LSMTree存储引擎的分布式数据库,自身已经支持多版本并发控制,就不需要使用像Oracle回滚段那种技术,开辟空间,专门存放增量的多版本数据了。
LSMTree存储引擎中也基本都是多版本全量存储。
然后关于不同隔离级别的读一致性使用说明,在OB中有如下描述:
多版本读一致性使用
多版本读一致性在数据库内部是广泛使用的,也是实现并发控制的关键之一:
弱一致性读: OceanBase 数据库的弱一致性读依旧提供了事务的一致性快照,不会返回未提交事务和一半
事务的情况。
强一致性读:OceanBase 数据库的强一致性读分为两种,分别是事务级别读版本号和语句级别版本号,分
别提供给快照读和读已提交两个隔离级别使用,需要提供返回事务一致性点的能力。
只读事务:OceanBase 数据库的只读语句也是要求提供强一致性读相同的能力,需要提供返回事务一致性
点的能力。
备份恢复点:OceanBase 数据库需要提供可以备份到一个事务一致性快照,防止备份了多余、未提交的事
务或者没有备份需要备份的事务。
总而言之,就是对于LSMTree类型存储引擎,并不需要使用回滚段那种技术手段处理待回滚的数据。
以上是我个人理解,没有翻看源码,不知道是否正确。还请批评指正
感谢张总科普,我也不太了解这个lsm-tree的垃圾数据和回滚是怎么处理的。感觉ob的变更都在内存,试了试闪回表还挺好用的,就是好奇这一部分数据放在哪里了,什么机制处理的。
数据就是写多份,每一份都有版本,MVCC多版本控制就是控制每个事务可见的最大版本,然后写入读取版本出现多个版本,回滚到上个版本,写入新版本。LSMTree的写就是追加写,不断写入新版本数据库,compact干的事情就是合并生成新的sstable,这个过程就会删除历史版本。