Javatpoint标志
Javatpoint标志

DBMS中的可序列化性

大多数现代应用程序的支柱是DBMS的形式。当我们正确地设计表单时,它将为我们的应用程序提供高性能和相对的存储解决方案。在这个主题中,我们将解释序列化概念以及这个概念如何深刻地影响DBMS。我们还通过一些示例来理解可序列化性的概念。最后,我们将用一个说明可序列化性重要性的示例来结束这个主题。

什么是DBMS的可序列化性?

在计算机科学领域,可序列化性是一个术语,它是系统的一种属性,描述了不同的进程如何操作共享数据。如果系统给出的结果与系统执行的操作相似,那么在这种情况下,我们称该系统为可序列化的。在这里,系统的合作意味着在执行数据时没有重叠。在DBMS中,当数据被写入或读取时,DBMS可以阻止所有其他进程访问数据。

在MongoDB开发人员证书中,DBMS使用各种锁系统来允许其他进程,同时保持数据的完整性。在MongoDB中,最受限制的序列化级别是雇员,可以通过两阶段锁定或2PL进行限制。在锁定级别的第一阶段,数据对象在操作执行之前被锁定。当事务完成后,就会释放数据对象的锁。此过程保证在操作中没有冲突,并且所有事务都将数据库视为冲突数据库。

两阶段锁定或2PL系统为数据库的冲突提供了强有力的保证。

它可以减少性能下降,然后增加获取容量的开销,然后释放数据锁。因此,系统允许约束序列化以提高DBMS的性能。这样可以确保最终结果与某些顺序执行相同,并对数据库中涉及的操作进行改进。

因此,可序列化性是描述不同进程如何操作共享数据的系统属性。在DBMS中,通过在其他进程执行期间锁定数据,采用了总体Serializable属性。此外,可序列化性确保最终结果等同于数据的顺序操作。

什么是可序列化的时间表?

  • 在DBMS中,可序列化调度是读写操作序列不干扰可序列化性的一种属性。此属性确保事务与其他事务一起自动执行。在DBMS中,可序列化性的顺序必须与同一事务的某些串行调度顺序相同。
  • 在DBMS中,有几种算法可用于检查数据库的可序列化性。其中最重要的算法之一是冲突序列化算法。冲突序列化算法是检查数据库中潜在冲突的能力。当两个事务访问相同的数据时,这种冲突就会在数据库中发生。如果没有冲突,那么数据库中的序列化性是有保证的。但是,如果发生冲突,则有可能实现序列化。
  • 另一种用于检查数据库可序列化性的算法是DBMS算法。借助DBMS算法,我们可以检查两个事务之间潜在的相互依赖关系。当两个事务给出正确的输出时,则存在相互依赖关系。当没有相互依赖关系时,数据库中有一个可序列化的保证。但是,如果存在相互依赖,则有可能是可序列化的。
  • 我们还可以使用优先图算法来检查数据库的可序列化性。当一个事务必须先于另一个事务时,则存在优先关系,以便调度有效。如果不存在循环,那么DBMS中调度的可序列化性就得到了保证。但是,如果存在周期,则调度可能是可序列化的,也可能不是。要全面了解不同的算法,请参加MongoDB Administration认证,并获得有关DBMS中可序列化性概念的专家分析。

可序列化性类型

在DBMS中,即使所有事务都是并发的,也应该按照特定的顺序排列。如果所有事务都不可序列化,则会产生不正确的结果。

在DBMS中,有不同类型的可序列化对象。每种类型的序列化都有一些优点和缺点。两种最常见的可序列化类型是视图可序列化性和冲突可序列化性。

1.冲突可串行性

冲突序列化性是序列化性中的一种冲突操作,它操作应按特定顺序执行的相同数据项,并维护数据库的一致性。在DBMS中,每个事务都有一些唯一的值,数据库的每个事务都基于数据库的这个唯一值。

这个惟一的值确保不会并发执行具有相同冲突值的两个操作。例如,让我们考虑两个示例,即订单表和客户表。一个客户可以有多个订单,但是每个订单只属于一个客户。数据库的冲突序列化性有一些条件。如下所示。

  • 两个操作应该有不同的事务。
  • 两个事务应该具有相同的数据项。
  • 这两个操作之间应该至少有一个写操作。

如果并发执行两个事务,则一个操作必须添加第一个客户的事务,而另一个操作则由第二个操作添加。此过程确保数据库中不会出现不一致的情况。

2.视图可串行性

视图可序列化性是可序列化性中的一种操作,其中每个事务应该产生一些结果,这些结果是正确顺序执行数据项的输出。与冲突序列化不同,视图序列化的重点是防止数据库中的不一致。在DBMS中,视图的可序列化性为用户提供了一种冲突的方式来查看数据库。

在DBMS中,我们应该理解调度S1和S2,以便更好地理解视图的序列化性。这两个调度应该在两个事务T1和T2的帮助下创建。为了维护事务的等效物,每个调度都必须服从这三个事务。这三个条件如下。

  • 第一个条件是每个调度具有相同类型的事务。此条件的含义是调度S1和S2不能具有相同类型的事务集。如果一个调度提交了事务,但与另一个调度的事务不匹配,则两个调度彼此不相等。
  • 第二个条件是两个调度不应该具有相同类型的读或写操作。另一方面,如果调度S1有两个写操作,而调度S2有一个写操作,我们说这两个调度彼此不相等。我们也可以说,如果读操作的次数不同,则没有问题,但在两个调度中必须有相同数量的写操作。
  • 最后也是最后一个条件是,两个时间表不应该有相同的冲突。同一数据项的执行顺序。例如,假设调度S1的事务为T1,调度S2的事务为T2。事务T1写入数据项A,事务T2也写入数据项A,在这种情况下,两个调度是不等价的。但是,如果调度在数据项上的每个写操作的数量相同,那么我们称之为彼此等效的调度。

用实例测试DBMS的可序列化性

可序列化性是DBMS的一种属性,其中每个事务都是独立自动执行的,即使这些事务是并发执行的。换句话说,我们可以说,如果并发执行多个事务,那么序列化功能的主要工作是以顺序的方式安排这几个事务。

为了更好地理解,让我们用一个例子来解释这些。假设有两个用户Sona和Archita。每个执行两个事务。假设T1和T2事务由Sona执行,T3和T4事务由Archita执行。假设事务T1读写数据项A,事务T2读数据项B,事务T3读写数据项C,事务T4读数据项d,我们按如下方式调度上述事务。

让我们首先讨论为什么这些事务是不可序列化的。

为了使计划被认为是可序列化的,它必须首先满足冲突序列化属性。在上面的示例调度中,注意事务1 (T1)和事务2 (T2)在写入数据项B之前读取数据项B。这会导致T1和T2之间的冲突,因为它们都试图并发地读取和写入相同的数据项。因此,给定的调度不会与可序列化性冲突。

但是,我们的示例确实满足了另一种类型的序列化性,称为视图序列化性。视图序列化性要求,如果两个事务不能看到彼此的更新(即,一个事务不能看到另一个并发事务的影响),则该调度被认为是视图序列化的。在我们的示例中,事务2 (T2)看不到事务4 (T4)所做的任何更新,因为它们不共享公共数据项。因此,该调度被视为可序列化的。

需要注意的是,冲突序列化性是比视图序列化性更强的属性,因为它要求在进行任何更新之前解决所有潜在的冲突(即,每个事务必须在任何其他事务可以写入每个数据项之前读取或写入每个数据项)。视图序列化性只要求如果两个事务不能看到彼此的更新,那么调度是视图序列化的&它们之间是否存在潜在冲突无关紧要。

总而言之,这两个属性对于确保数据库管理系统中并发事务的正确性是必要的。

在DBMS中序列化的好处

下面是在数据库中使用serializable的好处。

  1. 可预测的执行:在serializable中,DBMS的所有线程在同一时间执行。在DBMS中没有这样的意外。在DBMS中,所有变量都按预期更新,并且没有数据丢失或损坏。
  2. 更容易推理和调试:在DBMS中,所有线程都是单独执行的,因此了解数据库的每个线程非常容易。这可以使调试过程非常容易。所以我们不用担心并发进程。
  3. 降低成本:借助serializable属性,我们可以减少用于数据库平稳运行的硬件成本。它还可以降低软件的开发成本。
  4. 提高性能:在某些情况下,可序列化的执行比不可序列化的执行执行性能更好,因为它们允许开发人员优化代码以提高性能。

结论

DBMS事务必须遵循ACID属性才能被认为是可序列化的。在DBMS中有不同类型的可序列化性,每种类型都有自己的优点和缺点。在大多数情况下,选择正确的序列化类型将在性能和正确性之间进行权衡。

选择错误的可序列化性类型可能会导致数据库出现难以调试和修复的错误。希望本指南能让您更好地理解DBMS中的可序列化性是如何工作的,以及存在哪些类型的可序列化性。


下一个话题 1 DBMS中的层结构





Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map