数据库一致性读的经典解释

原创 2015年11月19日 11:53:15
不知道是从哪里转的了, 假设有张表,叫table1,里面有5000万行数据,假设预计全表扫描1次需要1个小时,我们从过程来看: 

1、在1点钟,有个用户A发出了select * from table1;此时不管将来table1怎么变化,正确的结果应该是用户A会看到在1点钟这个时刻的内容。这个是没有疑问的。 
2、在1点30分,有个用户B执行了update命令,更新了table1表中的第4000万行的这条记录,这时,用户A的全表扫描还没有到达第4000万条。毫无疑问,这个时候,第4000万行的这条记录是被写到了回滚段里去了的,我假设是回滚段RBS1,如果用户A的全表扫描到达了第4000万行,是应该会正确的从回滚段RBS1中读取出1点钟时刻的内容的。 
3、这时,用户B将他刚才做的操作commit了,但是这时,系统仍然可以给用户A提供正确的数据,因为那第4000万行记录的内容仍然还在回滚段RBS1里,系统可以根据SCN来到回滚段里找到正确的数据,但是大家注意到,这时记录在RBS1里的第4000万行记录已经发生了一点重大的改变:就是这个第4000万行的在回滚段RBS1里的数据有可能随时被覆盖掉,因为这条记录已经被提交了!!! 
4、由于用户A的查询时间漫长,而业务在一直不断的进行,RBS1回滚段在被多个不同的tracnsaction使用着,这个回滚段里的extent循环到了第4000万行数据所在的extent,由于这条记录已经被标记提交了,所以这个extent是可以被其他transaction覆盖掉的! 
5、到了1点40分,用户A的查询终于到了第4000万行,而这时已经出现了第4条说的情况,需要到回滚段RBS1去找数据,但是已经被覆盖掉了,于是01555就出现了。

经典的一致性hash算法解释

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1...

Oracle数据库一致性读的原理

Oracle数据库一致性读的原理

Oracle之数据库一致性读的原理

在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read)、回滚事务(Rollback Transaction)以及实例恢复(Instance Recovery...

Oracle之数据库一致性读的原理

在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read)、回滚事务(Rollback  Transaction)以及实例恢复(Instance Recovery...

Oracle 数据库一致性读的原理

Oracle 数据库一致性读的原理 在Oracle数据库中,undo主要有三大作用: 提供一致性读(Consistent Read)、回滚事务(Rollback Transaction)以及实...
  • haiross
  • haiross
  • 2013年09月04日 17:27
  • 2930

Oracle数据库通过undo保证一致性读和不发生脏读

不发生脏读,用户A对表更新了,没有提交,用户B对进行查询,没有提交的更新不能出现在用户的查询结果中。 实例模拟:表test中的数据如下 1,用户A查询:SQL> select * from t...
  • kkdelta
  • kkdelta
  • 2012年01月07日 19:01
  • 2090

Oracle数据库通过undo保证一致性读和不发生脏读

Oracle数据库通过undo保证一致性读和不发生脏读 - Oracle - 红黑联盟 http://www.2cto.com/database/201206/136830.html Orac...

缓存与数据库一致性保证

  • 2017年03月01日 14:56
  • 317KB
  • 下载

阿里业务研发经典案例:另类解法,分布式一致性

在大型互联网系统中,基于成本的考虑,普遍会使用MySQL 数据库;同时由于业务量很大,通常会按照用户维度对数据做垂直拆分,即大家常说的分库分表。在阿里巴巴的红包系统中,红包的发放操作会涉及两个数据库的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库一致性读的经典解释
举报原因:
原因补充:

(最多只允许输入30个字)