OceanBase memtable的transnode中会记录实际数据吗

memtable中每一行数据都会在hash table和b tree中存在吗,对于每一条存在的数据,都会有它对应的mvccrow链表吗?transnode是为了mvcc机制设计的,那transnode中会记录实际数据吗,还是更新的数据会记录到hash table或者btree中呢

1、在Oceanbase中,memtable是用于存储数据的结构,它包含每一条数据。对于每一条存在的数据,都会在hash table和b tree中存在,并且会有对应的mvccrow链表。

2、当数据写入memtable时,Oceanbase会使用哈希算法将数据写入到对应的hash table中,并使用B+树算法将数据写入到对应的b tree中。这样做的目的是为了提高数据的读写速度和查询效率。
对于每一条存在的数据,都会有它对应的mvccrow链表。mvccrow链表是用于实现多版本并发控制(MVCC)机制的数据结构。MVCC机制是一种用于实现并发控制的技术,它允许多个事务同时访问数据库,并且能够保证数据的一致性和完整性。
transnode是Oceanbase中用于实现MVCC机制的数据结构,它记录了数据在每个版本中的状态。但是,transnode中并不记录实际数据,而是记录数据的版本号和指向下一个版本的指针。当事务访问数据时,它会先从transnode中读取当前版本的数据,如果需要访问其他版本的数据,则需要从其他transnode中读取。

那实际数据是存放在哪里呢

实际数据存储在Memtable中的SSTable文件中。当Memtable中的数据量达到一定程度时,会将其刷写到磁盘上的SSTable文件中。SSTable文件是一种顺序存储的数据文件,每个文件只包含一个数据页。在Oceanbase中,每个Tablet都会有多个SSTable文件,用于存储数据页。

好的,明白了,也就是transnode只是记录变更操作和快照等信息,实际数据是放在memtable中sorted string数据结构的中,btree、hashtable和mvccrow都是为了加速访问或实现mvcc而生的,比如转储的时候,只是把内存中的sstable拷贝到磁盘上?

但是这两张图里面,memtable的读写都是体验对transnode的读写,也没有说明transnode还有链表链到内存中的sstable,没有体现对内存中的sstable的读写。


可以说transnode只是记录变更操作和快照等信息,实际数据是放在memtable中sorted string数据结构中,btree、hashtable和mvccrow都是为了加速访问或实现mvcc而生的。转储时,只是把内存中的sstable拷贝到磁盘上

图上说明就是可以理解为事务在执行过程吧,会修改sorted string table的中值,并且会回调来同步修改transnode中的值吧