参考Wikipedia: http://en.wikipedia.org/wiki/Isolation_(database_systems)#Repeatable_reads_.28phantom_reads.29
Isolation的理想状态是:the result of Transaction A is invisible to Transaction B until Transaction A is completed。不过这么一来,只有Serializable级别才能满足要求,即Transactions是一个接一个地执行,不允许Transactions的并行。如果想要Transactions的并行,那么就不可能有绝对的isolation。为此,ANSI/ISO制定的SQL标准给Isolation分了4个级别,由高到低分别是:
- Serializable
- Repeatable Read (Phantom Read)
- Read Committed (Nonrepeatable Read)
- Read Uncommitted (Dirty Read)
级别越高的,isolation性越好,而低级别的isolation会有各种各样的并发问题(如上面括号中所示)。下面一一介绍。
1. Read Uncommitted
Transaction 1可以查看Transaction 2未提交的操作结果,这会导致Dirty Read的问题,如下图所示:
Transaction 1的执行的第二个query会读到Transaction 2中update的结果,如果Transaction 2 rollback的话,这个读到的数据明显是错误的。
2. Read Committed
如果我们强制Transaction 1只能读Transaction 2中已经commit的update,就可以解决Dirty Read的问题。强制的手段是:每次query(比如SELECT)时,都会获取当前数据库(或者可能只是query涉及的表)的一个snapshot,query从这个snapshot中获得结果。没有commit的update不会在snapshot中出现,所以就不会被query到。
这样允许Transaction 2并行执行,且不会影响Transaction 1。当Transaction 1 commit的时候,DBMS检测是否有冲突(比如Transaction 1也update了Transaction 2中update的row),如果执行的结果等同于顺序执行Transaction 1和 Transaction 2 ,则认为没有冲突。
但这样也会有问题:Nonrepeatable Read,即可能执行同一query两次而出现不同的结果,我们认为这是不符合一致性原则的。
3. Repeatable Read
解决Nonrepeatable Read问题的办法是给Transaction 1中的SELECT涉及的行加一个read lock。
锁的排斥功能很明确:read locks不会block read locks,只block write locks;write locks block both read locks and write locks。
不过会有新的问题:phantom read。
当Transaction 1执行一个range query(范围查询,如like, between等)时,只会为涉及到的row加read lock,如果插入一个新row在range之内,第二次range query还是会被读出。
4. Serializable
强制Transactions按顺序执行,所以Transaction之间不可能冲突。强制的手段是给place a read lock on every row the transaction read;同时,如果有range query,还会添加一个range lock。明显,Serializable会耗费很多的lock overhead。
Serializable相当于在Transaction 1开始时(而不是query开始时)给当前数据库(或是Transaction涉及的表)take a snapshot,Transaction 1中的所有query都从这一个snapshot中获取结果。
- 大小: 4.9 KB
- 大小: 5.3 KB
- 大小: 4.4 KB
分享到:
相关推荐
ISOLATION_READ_UNCOMMITTED 最低级别的隔离级别,允许一个事务读取另一个事务未提交的数据。这可能会导致以下问题: - **脏读**:一个事务读取了另一个事务未提交的数据。 - **不可重复读**:在一个事务中多次...
$\ t\ $控制了$\ iTree\ $的数量即$\ Ensemble\ size \ $,孤立森林算法提出者通过实验发现,当$\ t=100\ $之前时,算
《Isolation Forest 异常检测算法的Java实现详解》 在大数据时代,异常检测成为了一项重要的任务,特别是在电商和金融领域,及时发现并处理欺诈行为对于企业的安全至关重要。Isolation Forest(隔离森林)是一种...
孤立森林(Isolation Forest)是一种基于机器学习的异常检测算法,尤其适用于大数据集中的异常值检测。该算法是由Liu et al.在2008年提出的,它利用了随机森林(Random Forest)的特性来识别数据集中的离群点。在...
RANSACTION ISOLATION LEVEL
在介绍和分析数据库事务隔离级别的经典文献《A Critique of ANSI SQL Isolation Levels》中,作者Hal Berenson、Phil Bernstein、Jim Gray、Jim Melton、Elizabeth O’Neil和Patrick O'Neil深入探讨了ANSI SQL-92...
在Oracle中,锁(Lock)和隔离级别(Isolation Level)是确保多用户环境下数据一致性和完整性的关键组成部分。本篇文章将深入探讨这两个概念及其在实际应用中的重要性。 一、Oracle锁机制 1. **锁定类型**: - **...
滑膜故障检测大牛Edwards的论文,发表于automatic期刊 Sliding mode observers for fault detection and isolation 非常详细的介绍了滑膜观测器
java8 看不到源码说我的名字 一个 spring-boot ...Isolation 目前,staging 环境与生产环境完全隔离,使用 kubernetes 命名空间进行 pod 级隔离 kubectl --namespace=staging apply -f k8s/services/staging
《Isolation Forest算法详解》 Isolation Forest,中文名为隔离森林,是一种用于异常检测的机器学习算法,尤其适用于处理大规模数据集。它以其高效、准确的特性,在网络安全、金融欺诈检测、疾病诊断以及数据清洗等...
Matlab实现基于孤立森林(Isolation Forest)的数据异常数据检测可视化(完整源码和数据)基于孤立森林(Isolation Forest)的数据异常数据检测可视化可直接运行注释清晰~Matlab1.多特征输入,可用于检测异常数据,异常...
how to isolate wafer substrate noise
基于孤立森林(Isolation Forest)的数据异常数据检测可视化(Matlab完整源码和数据) 运行环境matlab2018及以上。基于孤立森林(Isolation Forest)的数据异常数据检测可视化(Matlab完整源码和数据) 运行环境matlab2018...
Cracking App Isolation on Apple
标题和描述中的“Isolation__Xinxin、4.3QQT_”可能是指一个特定的软件或项目,其中“Isolation”可能涉及到隔离技术,这在IT领域中常常指的是虚拟化或者安全隔离,比如软件容器或沙箱环境。而“4.3QQT”可能是版本...
- `user-isolation disable`:在指定的接口上禁用用户隔离功能。这通常用于允许同一OLT端口下的不同ONU之间的通信。 #### 6. P2P访问策略配置 - **命令**: `BBS4000(config-t-if-olt-1/1)#p2p-access policing ...
在生物化学领域,ATP合酶是一种至关重要的酶,它在能量转换过程中起着核心作用,尤其是在细胞的线粒体中。线粒体是细胞的能量工厂,负责通过氧化磷酸化产生大部分细胞所需的ATP(三磷酸腺苷)。...
有关算法的完整说明,请查阅算法创建者的原始论文:Python范例可以通过pip安装python实现: pip install IsolationForest 这是一个简短的代码片段,显示了如何使用该库的Python版本。 您也可以阅读文件test.py以...