加入收藏 | 设为首页 | 会员中心 | 我要投稿 柳州站长网 (https://www.0772zz.cn/)- 基础存储、数据迁移、云安全、数据计算、数据湖!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

数据加密的六大趋势

发布时间:2021-02-03 13:54:02 所属栏目:外闻 来源:互联网
导读:四个隐式字段: DB_TRX_ID: 6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID DB_ROLL_PTR 7byte,回滚指针,指向这条记录的上一个版本(存储于rollback segment里) DB_ROW_ID 6byte,隐含的自增ID(隐藏主键),如果数据表没

四个隐式字段:

DB_TRX_ID:

6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID

DB_ROLL_PTR

7byte,回滚指针,指向这条记录的上一个版本(存储于rollback segment里)

DB_ROW_ID

6byte,隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引

FLAG

一个删除flag隐藏字段, 既记录被更新或删除并不代表真的删除,而是删除flag变了

事务对一条记录的修改,会导致该记录的undo log成为一条记录版本线性表(链表),undo log的链首就是最新的旧记录,链尾就是最早的旧记录。

undo日志:此知识点上文已经说过了,对MVCC有帮助的实质是update undo log,undo log实际上就是存在rollback segment中旧记录链。

一致读视图 Consistent Read View:Read View是事务进行快照读操作的时候生产的读视图(Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID(InnoDB里面每个事务有一个唯一的事务ID,叫作transaction id。它是在事务开始的时候向InnoDB的事务系统申请的,是按申请顺序严格递增的)。拿着这个ID跟记录中ID对比进行选择性展示,这里说下大致的思维。

你可以简单的理解为MVCC为每一行增加了两个隐藏字段,两个字段分别保存了这个行的当前事务ID跟行的删除事务ID。

insert时:

InnoDB为新插入的每一行保存当前系统版本号作为版本号。

select时:

1、 InnoDB只会查找版本早于当前事务版本的数据行(也就是行的系统版本号<=事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。

2、行的删除版本要么未定义,要么大于当前事务版本号,这可以确保事务读取到的行在事务开始之前未被删除。

3、只有1,2 同时满足的记录,才能返回作为查询结果。

delete时:

InnoDB会为删除的每一行保存当前系统的版本号(事务的ID)作为删除标识.

update时:

InnoDB执行update,实际上是新插入了一行记录,并保存其创建时间为当前事务的ID,同时保存当前事务ID到要update的行的删除时间。

上面只是一个浅显的讲解MVCC选择标准流程,源码层面应该是根据低水位跟高水位来截取的。具体实现可自行百度。

重点:

1、事务中快照读的结果是非常依赖该事务首次出现快照读的地方,即某个事务中首次出现快照读的地方非常关键,它有决定该事务后续快照读结果的能力。

2、在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。

7、缓冲池(buffer pool)

(编辑:柳州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读