read uncommited (读未提交) 最低级别,可读取未提交事物的数据,这会导致脏读,比如:某时刻会话a修改了一个数据,但还未提交,此时会话b,读取了该数据,这是,会话a回滚了事物,这就导致数据出现了不一致状态,这就是脏读!read commited (提交读) 避免了脏读,但会导致不...
分类:
数据库 时间:
2015-05-13 00:34:19
阅读次数:
159
分布式数据库数据表分成多个parition,分布在不同server上,拓扑是每个server维护不同的版本时间戳,相比单机数据库,提供MVCC要复杂很多,当然,你如果有spanner的原子钟,那会简单很多。现描述一种可行的实现方案,抛砖引玉。此方案可以做如下保证:
1.单Partition读(分分布式事务读)可以保重repeated read。
2同一个server上的分布式事务可以保证repeat...
分类:
数据库 时间:
2015-05-12 21:08:45
阅读次数:
267
首先需要明确事务的概念:一组原子性的SQL查询,如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组语句,否则所有语句都不执行。事务有ACID四个特性,即:原子性:一个事务是一个不可分割的最小工作单元,其操作要么全部成功,要么全部失败;一致性:数据库总是从一个一致性状态转换为另一个...
分类:
数据库 时间:
2015-05-11 23:30:31
阅读次数:
197
1 并发与隔离1.1 事务隔离级别1.2 悲观锁与乐观锁1.3 多版本并发控制 目前多数的乐观锁都基本于版本实现,多版本并发控制(Multi-Version Concurrent Control)是较为成熟的一种乐观锁实现。1.3.1原理 MVCC是并发条件下实现事务隔离的有效手段。其本质是...
分类:
其他好文 时间:
2015-05-10 20:28:42
阅读次数:
165
参考:http://comedsh.iteye.com/blog/698733并发操作数据库,遇到的问题1、丢失更新如果两个事务都要更新数据库一个字段X,x=100事务A事务B读取X=100读取X=100写入x=X+100写入x=X+200事务结束x=200事务结束x=300最后x=300两个不同事...
分类:
数据库 时间:
2015-05-09 18:49:34
阅读次数:
133
最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:1234567891011121314SELECT@findCount=COUNT(id) FROMMyTableWHERE[fk_related_id]=@ArgumentIF (@...
分类:
数据库 时间:
2015-05-08 17:57:29
阅读次数:
232
在上一篇中忘记了一个细节。Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避免幻读)。它由两个部分构成:第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁...
分类:
数据库 时间:
2015-05-08 17:49:06
阅读次数:
158
多版本并发控制 Multiversion Concurrency Control 大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本...
分类:
数据库 时间:
2015-05-07 10:36:56
阅读次数:
157
一:MySQL锁二:MySQL事务三:MySQL隔离级别1.1为什么要有锁?因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对某张表的某条数据或某些数据进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,..
分类:
数据库 时间:
2015-05-01 20:05:55
阅读次数:
189
Spring事务以前的事务都是编程式事务,需要开启和关闭,然后程序写在这里面spring,声明式事务Spring事务隔离级别DEFAULT 使用数据库默认隔离级别 READ_UNCOMMITTED 允许读取尚未提交的数据。可能导致脏读、幻读或不可重复读。 READ_COMMITTE...
分类:
编程语言 时间:
2015-04-29 13:10:14
阅读次数:
135