📜  一致性水平较弱

📅  最后修改于: 2022-05-13 01:57:02.952000             🧑  作者: Mango

一致性水平较弱

先决条件:

  • DBMS 中的 ACID 属性
  • DBMS 中的并发控制
  • DBMS 中的事务隔离级别
  • DBMS 中的 CAP

数据库管理系统中的每个事务都必须遵循 ACID 属性,本质上需要维护适当的机制来执行数据库上的一系列基本操作或函数,而不会违反任何约束以在完成时产生正确和一致的输出。形成使用 ACID 作为首字母缩略词的一组属性的重要组成部分的一个重要属性是一致性,在非分布式数据库系统的首字母缩写词中由“C”表示。为了进一步讨论,请注意我们讨论了分布式数据库系统的一致性级别的概念,因此遵循 CAP 定理。

因此,一致性是一种属性,可确保如果存在数据库的任何副本,它必须以指定的顺序执行一系列操作,以保持数据库的一个和所有副本以及原始数据库本身的一般最终状态.

  1. 在这里,任何特定时刻的所有 READ 操作都可以有一个可能的输出,因此必须返回相同的值。这必须遵循分布式数据库系统中基于线程的并发执行。
  2. 每个 READ 必须反映该数据项最近完成的 WRITE。
  3. 上面指定的条件与哪个服务器已处理该特定 WRITE 无关。
  4. 此外,即使 READ 和 WRITE 操作是在分布式系统的不同节点上执行的,它也不会限制输出,而且还需要额外的责任来维护全局记录的 READ 和 WRITE 执行顺序多变的。
  5. 该过程有助于节点交换信息并呈现类似的输出顺序以确保一致性。

我们首先讨论一致性和一致性级别的基本定义。此外,我们将列出不同级别的一致性,从最强级别到最弱级别对每个级别进行分类,最后简要讨论二阶一致性和光标稳定性。

强一致性和弱一致性的区别:

S.No

Strong Consistency

Weak Consistency

1.  

The current state of a database follows a universally and mutually accepted sequence of change of state.

It allows distinct views of the database state to see different and unmatched updates in the database state.

2.

Strict Consistency, Atomic Consistency, and Sequential Consistency are stronger levels of consistency.

Causal Consistency, Eventual Consistency is weaker levels of Consistency

3.

End-User is unaware of replications of the given database.

The application developer must be explicitly in the knowledge of the replicated nature of data items in the database.

4.

The user has a view of the database as there exists only one copy of the database that continuously reflects each of the state transitions in a forward direction along with the operations.

The developer must adapt to the replicated nature of the data in the database which results in an increase in the complexity of development as compared to strong consistency.

一致性级别:

各种隔离级别为事务提供特定程度的隔离提供了一定的能力,并且选择的级别也会显着影响数据库的性能。同样,在基于 ACID 的数据库系统的上下文中,绝大多数数据库管理系统都考虑根据应用程序的需要为用户提供整个级别范围以选择特定级别以实现一致性。一致性增加了正确性,以换取最佳性能或 CPU 利用率的降低,从而导致系统的高吞吐量。

开发不同级别的一致性的目的是指定一个过程,以避免由于许多单独但并发的线程可能正在访问共享内存空间并因此访问数据而引起的任何冲突。在这里,我们专注于通过对单个数据项的 READ 和 WRITE 操作来了解基础知识。

提供一致性的不同级别如下:

  1. 顺序一致性
  2. 严格的一致性
  3. 原子一致性或线性一致性
  4. 因果一致性
  5. 最终一致性

对于以下所有示例,我们假设 X 和 Y 的初始值最初为 0。另外,请注意给定线程“T”和数据项“V”的以下表示,进一步使用:

R:V = x ⇒ Read the value of 'V'. The value of 'V' is 'x' at the instant.
W:V = y ⇒ Write the value of 'V'. The value of 'V' is updated to 'y' at the instant.

下面详细讨论每个级别:

1. 顺序一致性:

顺序一致性的关键特征如下:

  • 构成顺序一致性定义基础的最重要条件是每个 WRITE 操作在整个数据库系统中都是有序的。
  • 正在执行的每个线程必须可视化并使用指定的 WRITE 操作顺序,全局设置和访问,而不管哪个线程执行操作以及线程修改了哪些数据项。
  • 但是,请注意,指定的全局排序与每个操作的实时执行顺序不一定总是相同的。
  • WRITE 操作可能存在任何顺序,只要指定的顺序被所有线程同意并遵循。
  • 唯一的限制是,来自同一特定执行线程的写入和读取不得重新排序。
T1W:X = 100    
T2 W:Y = 200   
T3  R:Y = 200R:X = 0R:X = 100
T4  R:Y = 200R:X = 100 

附表 S-1

观察线程 T 3和 T 4遵循 B 在 A 之前更新的事实。即使通过线程 T 1和 T 2 ,我们也可以观察到 B 在 A 之后更新,如上所述,不必遵循真实的- 用于创建全局排序的时间排序。因此,调度仍然被认为是顺序一致的,因为所有线程都同意 S-1 的特定写入操作顺序。

T1W:X = 100    
T2 W: Y = 200   
T3  R:Y = 200R:X = 0R:X = 100
T4  R:Y = 0R:X = 100R:Y = 200

附表 S-2

S-2 不遵守顺序一致性定义中指定的规则,因为 T 4不遵循 T 3之后的全局排序,如下所示:

  • 到 T 3时,对 Y 的 WRITE 已放在对 X 的 WRITE 之前。
  • 与 T 3相反,T 4比 Y 更早地读取对 X 的更新。
  • 该计划违反了顺序一致性,因为所有线程在写入操作的特定顺序上并不一致。

请注意,接下来讨论的一致性级别作为顺序一致性的扩展存在,其中对所有 WRITE 操作都指定了实时约束。

2. 严格的一致性:

严格一致性的主要特征如下:

  • 严格一致性是最高级别的一致性,因此它是最强的一致性。
  • 它要求根据每个 WRITE 操作的实时发生顺序对 WRITE 操作进行排序。
  • 严格一致的调度规则指定必须先看到较早的 WRITE 操作,然后才能看到以后的 WRITE 操作。
  • 此外,每个 READ 操作都必须以实时顺序读取最近 WRITE 的值,而不管哪个执行线程启动了该 WRITE。
  • 在实时分布式系统上实现严格一致性是不可行的,因为不可能就精确的时间达成全球协议,因此对于庞大的分布式数据库的执行顺序是不可能的。
T1W:X = 100   
T2 W:Y = 200  
T3  R:Y = 200R:X = 100
T4  R:X = 100R:Y = 200

附表 S-3

S-1 和 S-2 不遵循严格一致性,因为它们在 X 的值之后都具有 x=0 (R:X = 0) 的 READ 或 y=0 (R: Y = 0) 的 READ Y 已更新为新值。 S-3 是严格一致的,因为所有 READ 操作都反映了每个变量最近的 WRITE 操作。

3. 原子一致性或线性一致性:

一个时间表,如果遵循原子一致性或线性一致性的条件,则称为可线性化的时间表。可实际用于分布式数据库系统的最高级别的一致性是线性一致性。在 CAP 定理的上下文中,它也被称为原子一致性

尽管 Atomic Consistency 与 Strict Consistency 非常相似,但请注意Strict Consistency 和 Atomic Consistency 之间的区别如下:

  • 线性化模型承认在 t 2 -t 1时存在显着的时间段差异,其中在t = t 1时,向系统提交操作,并且 t = t 2时,系统以确认操作已完成的响应来响应已完成。
  • 在分布式系统中,在所有适当位置(也可能包括数据库的复制副本)的 WRITE 操作的交换和更新可以在此时间段内发生。
  • Atomic Consistency 没有对重叠的开始和结束时间戳发生的操作指定任何约束。
  • 仅对于给定操作的时间戳不重叠的操作存在排序约束,因此仅在这种情况下,必须先看到较早的 WRITE,然后才能看到较晚的 WRITE。
T1W:X = 100   
T2 W:Y = 200  
T3

R:X = 0

R:Y  = 200 
T4  R:X = 100R:Y = 200

附表 S-4

调度 S-4 不遵循严格一致性,因为 T 3对 X 的 READ 是在 T 1对 X 的 WRITE 之后初始化的,但是 R:X 的输出是 0。尽管如此,调度是线性化的,因为这个 READ X 由 T 3和 X 由 T 1写入在时间上重叠,因此线性化不需要通过 T 3读取 X 来表示由 T 1写入 X 的结果。

4. 因果一致性:

  • 因果一致性是低于顺序一致性的最流行且非常有用的一致性级别。
  • 在顺序一致性中,所有 WRITE 操作都必然是全局排序的,而不管它们是否相互关联。因果一致性不定义和保持对不相关的 WRITE 操作的约束。
  • 如果特定线程执行数据项的读取(如 R:X),然后写入相同或不同的数据项(R:Y),则因果一致性假定后续写入可能是由读取引起的。因此,为 X 和 Y 指定的全局顺序与所有线程一样,而执行必须在 X 的 WRITE 之后观察 Y 的 WRITE。
T1W:X  = 100     
T2 R:X = 100W:Y = 200   
T3   R:X = 100R:Y = 0R:Y = 200
T4   R:Y = 200R:X = 100 

附表 S-5

T1W:X = 100     
T2 R:X = 100W:Y = 200   
T3   R:X = 100R:Y = 0R:Y = 200
T4   R:Y = 200R:X = 0 

附表 S-6

5. 最终一致性:

  • 最终一致性是最弱的一致性级别。
  • 这里提供的唯一保证是,如果在指定的时间段内没有 WRITE 操作,线程最终必须就最新 WRITE 操作更新的值达成一致。
  • 因此,最终,特定数据库的所有副本都将反映数据项的相同值。

注意 Serializability 和 Linearizability 之间的区别:

S. No

Serializability

Linearizability

1.   

Serializability is an assurance for transactions, or of one or more operations over objects.

Linearizability is an assurance for single operations on single objects.

2.

By definition, it assures that the execution of a set of transactions that generally contains READ and WRITE operations, over a number of items is equivalent to a  serial execution of the transactions.

It specifies a real-time constraint on the behavior of a set of single operations as READ and WRITE, on a single object as a data item or a distributed register.

3.

Serializability stands for “I,” or isolation, in ACID. If users’ transactions each preserve logical correctness (“C,” or consistency, in ACID) is to check for the same.

Linearizability for READ and WRITE operations are as explained for the term “Atomic Consistency” and is the “C,” or “consistency,” in Gilbert and Lynch’s proof of the CAP Theorem.

4.

Serializability does not imply any type of deterministic order, but it simply requires an equivalent serial execution solution as output to existing.Once a READ returns a specific value, all later read should return that value or the value of a later WRITE as discussed for Linear or Atomic Consistency.

二级一致性:

引入二级一致性的目的是在不强制确保可串行化的情况下避免级联中止。

用于实现锁定协议以确保一致性的锁定模式类似于两阶段锁定协议中使用的两种模式:共享(S)和排他(X)。

  • 事务在访问数据项时需要持有适当的锁,但不需要准确实现两阶段锁,因为与 2-PL 相反,S-Lock 可以在任何时刻释放并且可以获得锁随时。
  • 请注意,除非或直到事务已提交或中止,否则无法释放排他锁或 X 锁。
  • 事务可能会重复执行给定数据项的 READ 操作,并为每个 READ 获得两个不同的输出值。 (如上面讨论的较弱的一致性级别所讨论的)

具有二级一致性的不可序列化调度的示例如下:

T1T2
lock-S(Q) 
read(Q) 
unlock(Q) 
 lock-X(Q)
 read(Q)
 write(Q)
 unlock(Q)
lock-S(Q) 
read(Q) 
unlock(Q) 

光标稳定性:

它是二级一致性的一种形式。它是专门设计和用于通过使用游标对关系元组进行迭代的程序的目的。

与锁定整个关系的过程相反,游标稳定性确保:

  • 只有当前时刻迭代正在处理的元组被共享模式下的 S-Lock 锁定。
  • 如果一个元组被修改,它会被一个 X-Lock 以独占模式锁定,直到事务提交,以确保一致性。

上面指定的两个规则都确保了二级一致性,这是较弱的一致性级别。

好处:

  • 它消除了对两阶段锁定协议的需要。
  • 在实践中,它被用于高效系统性能,用于频繁访问的关系,作为增加并发性的一种简单方法。

缺点:

  • 该过程不保证可串行化。
  • 开发人员必须确保应用程序的编码方式能够确保数据库的一致性,即使在很可能存在不可序列化调度的情况下也是如此。
  • 因此,游标稳定性的使用仅限于有限形式的可执行事务,并且在专门和安全的代码设计下也是为了权衡系统性能。