红挑k什么作用?

沃倩林沃倩林最佳答案最佳答案

个人认为,Redo和Undo分别实现“撤销”与“重做”的功能;同时由于它们操作的对象都是事务(Transaction),因此在数据库中他们都属于事务管理器TPM(Transaction Process Manager)的子集。 虽然这两个接口都定义在SQL标准中,但它们的实现机制在不同的数据库中可能有所不同 下面简单介绍一下MySQL中的Undo和Redo,这里以InnoDB存储引擎为例。因为对于XtraDB等其它存储引擎,Undo和Redo的管理方式差不多。

1、红/蓝备库同步 每个Memcached连接都有一个状态信息,用于记录当前连接的状态,例如读指针和写指针。当一条更新语句被执行时,除了将数据写入缓存行外,还会把该操作的元数据(包括key,value,flags等)写到日志中。这样在红/蓝主备库上就可以通过读取日志的方式还原出修改的key及其对应的value。 当然,为了减轻搜索空间的大小,只有最新的一笔更新操作才记入日志,而对于以前的操作则只存档而不做恢复。因此每次执行update或delete操作的时候,系统都需要检查这些操作是否已经记录到了日志里,如果没有则不能commit操作,直到修改写入内存缓存并记数到Log文件为止。

2、事务管理 在数据库里面,一个transaction是一个原子性的单元,它是一组相关的sql语句在一个数据表里进行或者不进行的集合。当一个事务开始执行的时候,系统会先检查该事务的所有语句是不是都已经记录的日志里面了,如果是的话就直接执行,否则就抛出异常。在执行的过程中,如果出现错误,也会立即回滚已执行的步骤。每个事务都有唯一的标识ID,这个ID用来标示该事务在数据库中的状态。

3、快照和undo.log 当一个事务执行完了并且提交之后,它的所有操作都在数据库中形成了对数据的读写影响,虽然这个时候这些改变对于用户是看不到的,但是一旦数据库发生了崩溃,这些暂时的数据变更就会丢失。为了防止这种意外的发生,InnoDB为每一个事务创建了一个临时表,用来保存事务期间对数据的修改,而这个临时表的名称就是相应的事务ID。而当数据库发生崩溃后,可以重新构建事务ID的索引,然后按顺序重做各个事务的操作,这样就可以做到“事有可依,有据可循”。

4、事务快照 InnoDB还为每个数据库创建了事务的快照,用来维护整个数据库中各表之间相互关系的完整信息和所有的对象信息。如果某个事务删除了某一张结构表中的一列,而另一事务又在这列的基础上增加了新的值,那么这种冲突就会在快照当中被发现并在适当的地方予以修复。为了保证快照的有效性,系统会在后台定期更新快照的信息,通常每10分钟左右更新一次。

我来回答
请发表正能量的言论,文明评论!