CN104252545B - 一种实时内存数据库的对象类型属性类型锁的实现方法 - Google Patents
一种实时内存数据库的对象类型属性类型锁的实现方法 Download PDFInfo
- Publication number
- CN104252545B CN104252545B CN201410536272.3A CN201410536272A CN104252545B CN 104252545 B CN104252545 B CN 104252545B CN 201410536272 A CN201410536272 A CN 201410536272A CN 104252545 B CN104252545 B CN 104252545B
- Authority
- CN
- China
- Prior art keywords
- real
- lock
- time
- target
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/289—Object oriented databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种实时内存数据库的对象类型属性类型锁的实现方法,通过考查实时内存数据库中的典型实时事务通常访问同类的一批对象的同种属性这一特点,为其设置对象类型属性类型锁,从而基于实时内存数据库的时空资源受限的条件,充分保障了实时内存数据库中并发实时事务对同样实时数据的有效互斥共享,并定制高优先级两阶段锁策略,避免了死锁和活锁的出现。
Description
技术领域
本发明涉及一种实时内存数据库的对象类型属性类型锁的实现方法,属于自动化监控技术领域。
背景技术
随着计算机科学和自动化技术的迅速发展,以及各行业自动化监控应用水平和规模的不断提升,独立的领域专用自动化监控系统正在向综合乃至通用自动化监控平台发展。例如电厂自动化监控领域出现了集DCS(集散控制)系统/ECS(电厂厂用电气监控管理)系统/NCS(电力网络监控)系统的一体化监控平台;电网自动化监控领域出现了集SCADA(数据采集与监控)系统/EMS(能量管理)系统/DTS(调度员培训模拟)系统/DMS(配电管理)系统/MIS(管理信息)系统的集成监控平台;而在城市轨道交通领域,则出现了集ATS(行车)系统/PSCADA(电力监控)系统/BAS(环控)系统/FAS(火灾告警)系统/AFC(售检票)系统/PIS(用户信息)系统/ACS(门禁)系统/……多达十数个甚至数十个专业子系统的综合监控平台。这一趋势近年来愈加显著,这就对自动化监控软件平台,尤其是它的实时核心——实时内存数据库的灵活性和可扩展性提出了很高的要求,这要求在同一实时内存数据库中无缝集成不同监控应用中形态各异的数据,并且当监控平台应用于不同自动化领域时,软件自身无需进行重大的设计修改甚或重新开发,仅仅依靠不同的配置和设定就能够方便的应用于不同自动化领域的各种监控应用中。
国内现代监控软件系统大多是伴随着某一专业领域的发展而诞生的领域专用监控系统,采用某种面向对象程序设计语言实现,因此其实时内存数据库通常基于某些针对其专业领域而预先设计好的对象数据依据相应的专业语义进行组织和构建。这种某一领域的专用系统如果直接应用于另一领域,实时内存数据库往往无法满足应用需求;通过扩展勉强应用则通常会造成巨大的时空资源开销,既严重耗费系统内存,并且实时内存数据库的实时性能也堪忧;而要避免这种情况实时内存数据库又不得不重新设计和开发实现。
中国发明专利(申请号201010198065.3,公开日2010年11月24日)公开了一种采用双高速引擎的面向对象实时数据库存储方法,基于通用数据类型的属性作为实时内存数据库的基本组织单位,由属性组成对象,最终再由对象构建成整个实时内存数据库。这种存储结构为实时内存数据库提供了充分的灵活性和可扩展性,使得实时内存数据库在应用于不同自动化领域时可以依据不同的需求存放各自需要的数据对象,而无需对实时内存数据库本身进行重新设计和实现。然而,这种复杂的存储结构在为实时内存数据库提供了充分的灵活性和可扩展性的同时,也为其使用、管理和维护的各个方面带来了诸多的困难和挑战。
在文件系统已经相对成熟的情况下,依然出现了数据库系统并大行其道,就是为了有效的实现数据共享。数据库系统将共享的数据集中存放并加以控制和管理,从而在降低冗余的同时,确保数据的一致性和完整性。数据库中数据操作处理的基本单位是事务,事务是一组不可分割的操作,要么全部执行,要么一点也不执行。事务具有A(原子性)C(一致性)I(隔离性)D(持久性)特性。既然数据库中存放的是共享的数据,必然存在并发的数据访问操作,如果对访问相同数据的事务的并发不加以控制,就可能破坏数据的一致性,因此数据库通常会采用某些并发控制策略来保障数据的一致性。锁策略是一种常用的用于实现数据互斥共享的并发控制策略。事务在访问数据前必须获得相应的锁,否则需要等待数据已加上的锁释放。如果多个事务同时获得了一部分需要的锁,并相互等待对方已经持有的锁,那么由于循环等待会导致死锁。两阶段锁策略是一种常见的避免死锁的策略。
作为数据库技术发展的一个分支的实时内存数据库同样要面对和处理并发控制的问题。实时内存数据库也经常使用锁策略来实现多个并发的实时事务对同样实时数据的互斥共享。只是相比于数据库,实时内存数据库具有的更加严格的时空资源限制,使其锁策略的实现更加困难。
锁的目的是实现对同样数据的互斥共享,因此选择的锁类型和锁策略应当尽可能使得访问同样数据的并发事务因需要持有相同的锁必须互相等待,而访问不同数据的并发事务避免因需要持有相同的锁而互相等待。监控系统的实时内存数据库将包含全部现场最新实时数据的整个库建立在内存中,从而满足监控系统中各种实时应用实时访问实时数据的实时性需求。因为实时内存数据库完全处于内存之中,相比于建立在硬盘中,空间资源限制很宽松的数据库而言,实时内存数据库存在显著的空间资源限制。监控应用中实时内存数据库的实时访问操作基本是软实时操作,虽然不像硬实时操作那样具有完全严格的时间限制,但是通常也具有非常高的实时性要求。数据库中的锁操作本身的时间开销相比于数据操作并不显著,但与此不同的是,实时内存数据库中的锁操作如获取锁或释放锁,与简单的实时访问,如单个对象的单个属性的查询访问或更新访问相比,其时间开销不但是可比的,而且常常是显著更高的。因此锁类型的选择应避免造成实时事务的时间资源开销的显著增加,以免损害实时事务的实时性能,甚至使得实时内存数据库的实时性能无法满足监控应用的需求。
实时内存数据库中的实时事务往往是由一组简单的实时访问如单个对象的单个属性的查询访问和更新访问组成,实时事务本身比较简单,时间开销也非常有限,通常没有充分的余地在执行实时事务前对实时事务进行复杂的分析以确定需要的锁,以及获取和释放各个锁的时机,因而实时内存数据库所采用的锁策略也应当比较简单,最好在执行实时事务之前无需对其进行复杂的预分析就能在实时事务执行过程中有效的获取和释放锁。
专用监控系统的实时内存数据库通常是由预先设计好的对象数据依据专业语义组织和构建而成。因此其实时内存数据库的锁类型和锁策略通常也基于数据的专业语义信息实现。然而,前述专利所述的采用了复杂存储结构的实时内存数据库,当用于不同领域的监控应用时,其中存储的是不同种类的对象,而用于综合监控应用时,其中存储的更是多个领域的诸多对象。因此,在设计时,根本无法确定实时内存数据库中存储的是哪些种类的对象,当然更加无法确定应当将锁设置在何种对象上,也必然意味着实时内存数据库的锁类型和锁策略绝不可能基于任何专业语义实现。
发明内容
为了解决在支持通用监控软件平台而采用了前述专利所述的复杂存储结构的实时内存数据库中,无法利用领域相关的任何专业语义的问题,本发明提供一种实时内存数据库的对象类型属性类型锁的实现方法,实现了实时事务的时间资源开销不显著增加的前提下,实时内存数据库中并发实时事务对同样实时数据的有效互斥共享,并避免了死锁和活锁的出现。
为达到上述目的,本发明采用的技术方案如下:
一种实时内存数据库的对象类型属性类型锁的实现方法,包括以下步骤:
1)在实时内存数据库中设置对象类型属性类型锁,即在每一种对象类型中每一种属性类型上设置一对排它锁和共享锁;
2)实时内存数据库中实时事务开始执行时先构建一个空的锁集合,用来存放实时事务获取并持有的锁;
3)判断实时事务的下一个实时访问类型,如果是查询访问,则检查锁集合中是否存在目标排它锁,然后转入步骤4);如果是更新访问,则检查锁集合中是否存在目标排它锁,然后转入步骤6);
4)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
5)如果存在目标共享锁,则转入步骤8);如果不存在目标共享锁,则获取目标共享锁并加入锁集合,然后转入步骤8);
6)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
7)如果存在目标共享锁,则将其升级为对应的目标排它锁,然后转入步骤8);如果不存在目标共享锁,则获取目标排它锁并加入锁集合,然后转入步骤8);
8)执行实时访问,并判断是否正确完成实时访问,如果是,则转入步骤9);如果否,则转入步骤10);
9)判断是否还有其它实时访问,如果是,则转入步骤3),如果否,则转入步骤11);
10)夭折并回滚实时事务,然后转入步骤11);
11)释放锁集合中全部持有的锁,实时访问结束。
前述的步骤1)中对象类型属性类型锁是指实时事务访问对象的属性,对对象类型中的属性类型设置锁,这种锁称为对象类型属性类型锁。
前述的步骤2)中,实时事务由一系列不可分割的实时访问顺序组成;所述实时事务包括更新事务和查询事务,将包含更新访问的实时事务定义为更新事务,将仅包含查询访问的实时事务定义为查询事务。
前述的实时访问访问一个对象的一个属性,称该对象为目标对象,该属性为目标属性,在访问之前必须获得目标对象对应的对象类型中目标属性对应的属性类型的锁,称为目标锁。
前述的步骤3)中,所述目标排它锁是指在对目标对象的目标属性执行更新访问前,获得的目标对象对应的对象类型中目标属性对应的属性类型的排它锁;所述获得目标排它锁的情况下对该类对象的该种属性可执行更新访问和查询访问。
前述的步骤4)中,所述目标共享锁是指在对目标对象的目标属性查询访问之前,获得的目标对象对应的对象类型中目标属性对应的属性类型的共享锁;所述获得目标共享锁的情况下对该类对象中的该种属性仅可执行查询访问。
前述的对于相同的目标对象对应的对象类型中目标属性对应的属性类型上的目标排它锁和目标共享锁,如果一个实时事务获得并持有目标排它锁,在释放以前,其它并发实时事务既不能获得目标排它锁,也不能获得目标共享锁;而如果一个实时事务获得并持有目标共享锁,那么在释放以前,其它并发实时事务虽然不能获得目标排它锁,但是可以获得目标共享锁。
前述的查询事务具有低优先级,所述更新事务具有高优先级;所述实时事务获取锁时如果因为互斥共享需要等待其它并发实时事务释放锁,那么低优先级或者同等优先级的实时事务需要等待高优先级或者同等优先级的实时事务执行完成并释放锁,而高优先级的实时事务则使低优先级的实时事务夭折并释放锁后重新执行低优先级的实时事务。
前述的步骤2)中,实时事务执行之前需要进行预分析,所述预分析是指查看每一个实时访问的类型。
前述的一个查询事务因为并发更新事务夭折并重新执行k次后,其优先级升高至更新事务的高优先级。
本发明通过考查实时内存数据库中的典型实时事务通常访问同类的一批对象的同种属性这一特点,为其设置对象类型属性类型锁,同时采用共享锁和排它锁,并为其定制高优先级两阶段锁策略,从而基于实时内存数据库的时空资源受限的条件,满足在实时内存数据库空间资源开销的增加可以忽略不计,且实时事务的时间资源开销不显著增加的前提下,充分保障了实时内存数据库中并发实时事务对同样实时数据的有效互斥共享,并避免了死锁和活锁的出现。
附图说明
图1为本发明方法的实时事务处理流程图。
具体实施方式
现结合附图和具体实施方式对本发明作进一步详细说明。
本发明针对采用了专利ZL201010198065.3中所述的复杂存储结构的实时内存数据库的特征设计的,专利ZL201010198065.3中所述的复杂存储结构的实时内存数据库用于支撑通用监控平台,目标是各领域的监控应用。分析两个监控应用中的典型实时事务:例如,电力监控应用中的一个实时事务T 1 查询每一个遥测对象的值、各级上、下限,以及死区等属性,以确定哪些遥测因越限而需要报警。轨道交通监控应用中的一个实时事务T 2 查询所有轨道区间对象的行车状态属性以用于在人机界面上显示全线行车状态。纵观这些监控应用中的典型实时事务,会发现不管是哪个领域的监控应用,都表现出相似的特性。一个实时事务中通常对同一种类的一批数据进行一致的处理。例如数据采集模块绝不会将不同类型的各种数据混在同一批次中采集,而是分批采集遥信、遥测、遥迈等各类数据,这样做无论传输还是处理都相对方便,而且效率也更高,这也就是为什么各领域的监控应用中的各种通信协议都是基于不同的数据类型来组织各种报文。同样,其它的实时应用模块也类似,在合理设计的监控系统或者监控平台中,不会将一个数据的所有功能全部放在一个实时应用模块中实现,而是分而治之,一个实时应用模块实现一类数据的某一种功能,而将无关的功能分散到多个不同的实时应用模块中,从而实现模块的高内聚、低耦合,使得系统平台具有良好的健壮性和可扩展性。这反映在实时内存数据库中就表现为,大量典型的实时事务,通常是访问同类的一批对象的同样一组属性。既然典型的实时事务访问多个对象,而这多个对象属于同一类型,并且访问的又是相同的一组属性,那么对对象类型中的不同属性类型设置锁显然比对每一个对象分别设置锁更为有效。为了区别于对象属性锁,这里将这种锁称为对象类型属性类型锁。
实时内存数据库中不仅包含数据信息,同时还引入了类型信息,包括对象类型,以及对象类型中包含的属性类型。在每一个对象类型的每一个属性类型上设置锁,访问一个对象的一个属性,称该对象为目标对象,该属性为目标属性,要求在访问之前必须获得目标对象对应的对象类型中目标属性对应的属性类型的锁,称为目标锁。而且对象类型属性类型锁是设置在每一种对象类型的每一种属性类型上,在专利ZL201010198065.3中已经指明类型信息相比于数据信息所需要的额外空间资源开销几乎可以忽略不计。同样,设置在对象类型中属性类型上的对象类型属性类型锁需要的额外空间资源开销也几乎可以忽略不计。
实时内存数据库内对象中属性的访问可以分为两类:一类为查询访问,另一类为更新访问。查询访问不会修改对象的属性,而更新访问则会。在监控应用中,数据采集等少数实时应用模块以更新访问为主,计算和维护等一些实时应用模块包含查询访问和更新访问,而人机界面、告警以及趋势等多数实时应用模块以查询访问为主。大多实时应用模块更多的执行查询访问;而且数据显示会频繁刷新以保持最新,这导致大部分实时数据的查询频率通常高于甚至远高于更新频率。因而实时内存数据库中的查询访问量远远大于更新访问量。由于查询访问不会修改对象的属性,因此对同一个对象的同一个属性的多个查询访问同时执行不会造成错误,反而强制这些查询访问必须互斥执行会造成不必要的相互等待。由于实时内存数据库中的查询访问量远超更新访问量,因此允许并发实时事务对同一个对象的同一个属性同时执行查询访问可以有效地保障实时事务的实时性能。考虑到实时内存数据库中不同类型的访问间的严重不均衡特性,在实时内存数据库中同时使用共享锁和排它锁。在对目标对象的目标属性查询访问之前,必须至少先获得目标对象对应的对象类型中目标属性对应的属性类型的共享锁,称为目标共享锁,获得目标共享锁的情况下对该类对象中的该种属性仅可执行查询访问;在对目标对象的目标属性执行更新访问前,必须先获得目标对象对应的对象类型中目标属性对应的属性类型的排它锁,称为目标排它锁,获得目标排它锁的情况下对该类对象的该种属性可执行更新访问和查询访问。对于相同的目标对象对应的对象类型中目标属性对应的属性类型上的目标排它锁和目标共享锁,如果一个实时事务获得并持有目标排它锁,在释放以前,其它并发实时事务既不能获得目标排它锁,也不能获得目标共享锁;而如果一个实时事务获得并持有目标共享锁,那么在释放以前,其它并发实时事务虽然不能获得目标排它锁,但是可以获得目标共享锁。
在实时内存数据库中,使用上述的对象类型属性类型锁可以实现数据的互斥共享,然而如果多个并发的实时事务同时获得了一部分需要的锁,并且相互等待对方已经持有的锁,那么由于循环等待会导致死锁。实时内存数据库中常采用两阶段锁策略从而避免死锁的出现。只是,实时内存数据库中的实时事务较简单,时间开销也小,通常没有充分的余地在执行实时事务前对实时事务进行复杂的预分析以确定需要的锁及其获取和释放的时机,因而最好在执行实时事务之前无需对其进行复杂的预分析。因此本发明对两阶段锁策略略加定制,实时事务在执行下一个实时访问前须获得需要的锁,直到所有的实时访问全部执行完成之后才释放全部持有的锁。这样就将获取锁和释放锁严格的限制在两个不同的阶段,遵循两阶段锁策略。由于实时事务的时间开销小,不会长时间持有锁。而且典型的实时事务通常访问同类的一批对象的同种属性,因此在实时事务开始执行不久就将获取大部分需要的锁,并且直到实时事务基本执行完成都将持续需要这些锁。因此不会对这些锁无谓占用。
根据上述分析,采用本发明的基于对象类型属性类型锁实现实时事务数据互斥共享的处理流程如图1所示,包括如下步骤:
1)在实时内存数据库中设置对象类型属性类型锁,即在每一种对象类型中每一种属性类型上设置一对排它锁和共享锁;这里的实时内存数据库采用ZL201010198065.3中所述的复杂存储方法的通用实时内存数据库;
2)实时内存数据库中实时事务开始执行时先构建一个空的锁集合,用来存放实时事务获取并持有的锁;
3)判断实时事务的下一个实时访问类型,如果是查询访问,则检查锁集合中是否存在目标排它锁,然后转入步骤4);如果是更新访问,则检查锁集合中是否存在目标排它锁,然后转入步骤6);
4)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
5)如果存在目标共享锁,则转入步骤8);如果不存在目标共享锁,则获取目标共享锁并加入锁集合,然后转入步骤8);
6)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
7)如果存在目标共享锁,则将其升级为对应的目标排它锁,然后转入步骤8);如果不存在目标共享锁,则获取目标排它锁并加入锁集合,然后转入步骤8);
8)执行实时访问,并判断是否正确完成实时访问,如果是,则转入步骤9);如果否,则转入步骤10);
9)判断是否还有其它实时访问,如果是,则转入步骤3),如果否,则转入步骤11);
10)夭折并回滚实时事务,然后转入步骤11);
11)释放锁集合中全部持有的锁,实时访问结束。
传统的领域专用监控系统的实时内存数据库中,实时事务通常具有优先级,优先级的高低通常依据专业语义设定。在采用了复杂存储结构的实时内存数据库中,无法使用领域相关的任何专业语义,但依然可以设定简单的优先级。将包含更新访问的实时事务称为更新事务;将仅包含查询访问的实时事务称为查询事务。也就是说,在更新事务中既可以仅包含更新访问,也可以同时包含更新访问和查询访问;而在查询事务中则不能包含更新访问,只能包含查询访问。表面上看,更新事务的种类较多,但是由于在监控应用中,查询访问量要远远超过更新访问量,因此实际上查询事务量要远超更新事务量。查询事务具有低优先级,更新事务具有高优先级。将两阶段锁策略扩展为高优先级两阶段锁策略,实时事务获取锁时如果因为互斥共享需要等待其它并发实时事务释放锁,那么低优先级或者同等优先级的实时事务需要等待高优先级或者同等优先级的实时事务执行完成并释放锁,而高优先级的实时事务则使低优先级的实时事务夭折并释放锁后重新执行低优先级的实时事务。从宏观上笼统的说,访问同样数据的并发实时事务,并发更新事务依次执行,并发查询事务不用相互等待,后执行的查询事务需要等待先执行的更新事务,而后执行的更新事务会使先执行的查询事务夭折并随后重新执行,这里的先后指的是并发实时事务获取锁的顺序。在监控应用中,与其让查询事务抢在更新事务之前执行而查询到旧数据,倒不如让更新事务打断查询事务并使之随后重新执行从而查询到更新之后的新数据。因此这种策略是合理的。
需要注意的是,优先级是设置在实时事务而非实时访问之上的。举个例子加以说明:三个并发实时事务访问同一个对象的同一个属性,第一个实时事务T 3 是更新事务,但是实时访问是查询访问,因此T 3 首先获得目标共享锁并继续执行。第二个实时事务T 4 是查询事务,实时访问是查询访问,由于共享锁是相容的,因此T 4 随后获得了目标共享锁并继续执行。第三个实时事务T 5 是更新事务,访问是更新访问,但是由于T 3 、T 4 已经持有了目标共享锁,所以T 5 无法获得目标排它锁。T 3 的实时访问虽然是查询访问,但是T 3 是更新事务,它和T 5 具有同等的优先级,因此T 5 必须等待T 3 执行完成并释放目标共享锁。在T 3 执行完成后,它释放了包括目标共享锁在内的它全部持有的锁。此时T 4 还没有执行完成,所以继续持有目标共享锁,由于T 4 是查询事务,它的优先级比作为更新事务的T 5 低,因此T 5 将会使T 4 夭折,由于T 4 是查询事务,其中不包含任何的更新访问,因此无需回滚,夭折即释放包括目标共享锁在内的它全部持有的锁。T 5 因而获得目标排它锁并继续执行。随后T 4 重新执行,但是由于T 5 依然持有目标排它锁,而作为查询事务的T 4 的优先级比作为更新事务的T 5 低,因此T 4 无法获得目标共享锁,必须等待T 5 执行完成并释放目标排它锁。在T 5 执行完成后,它将释放包括目标排它锁在内的它全部持有的锁。T 4 因而获得目标共享锁并继续执行。
采用高优先级两阶段锁策略可以帮助更新事务更及时的将数据更新到最新,但任何事情都是有代价的,为了能够使用高优先级两阶段锁策略,就需要在实时事务执行之前对其进行预分析,从而确定实时事务的类型以设置其优先级。当然这只需要简单的查看其中每一个实时访问的类型,因为不涉及访问的具体数据,因此这种简单的预分析不会对实时事务的时间开销造成显著增加。另一个问题是实时内存数据库中采用高优先级两阶段锁策略可能会出现活锁,即一个查询事务因为具有低优先级,总是因具有高优先级的更新事务而不断夭折并重新执行,导致其无法实时完成。这种情况很少出现,因为实时内存数据库中查询事务量远超更新事务量,但是为了完全避免活锁,这里规定在一个查询事务因为并发更新事务夭折并重新执行k次后,其优先级升高至更新事务的高优先级,其中k为与应用相关的经验参数,例如可以取经验值3。采用这种方式就可以避免活锁。
Claims (10)
1.一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,包括以下步骤:
1)在实时内存数据库中设置对象类型属性类型锁,即在每一种对象类型中每一种属性类型上设置一对排它锁和共享锁;
2)实时内存数据库中实时事务开始执行时先构建一个空的锁集合,用来存放实时事务获取并持有的锁;
3)判断实时事务的下一个实时访问类型,如果是查询访问,则检查锁集合中是否存在目标排它锁,然后转入步骤4);如果是更新访问,则检查锁集合中是否存在目标排它锁,然后转入步骤6);
4)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
5)如果存在目标共享锁,则转入步骤8);如果不存在目标共享锁,则获取目标共享锁并加入锁集合,然后转入步骤8);
6)如果存在目标排它锁,则转入步骤8);如果不存在目标排它锁,则检查锁集合中是否存在目标共享锁,然后转入下一步;
7)如果存在目标共享锁,则将其升级为对应的目标排它锁,然后转入步骤8);如果不存在目标共享锁,则获取目标排它锁并加入锁集合,然后转入步骤8);
8)执行实时访问,并判断是否正确完成实时访问,如果是,则转入步骤9);如果否,则转入步骤10);
9)判断是否还有其它实时访问,如果是,则转入步骤3),如果否,则转入步骤11);
10)夭折并回滚实时事务,然后转入步骤11);
11)释放锁集合中全部持有的锁,实时访问结束。
2.根据权利要求1所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述步骤1)中对象类型属性类型锁是指实时事务访问对象的属性,对对象类型中的属性类型设置锁,这种锁称为对象类型属性类型锁。
3.根据权利要求1所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述步骤2)中,实时事务由一系列不可分割的实时访问顺序组成;所述实时事务包括更新事务和查询事务,将包含更新访问的实时事务定义为更新事务,将仅包含查询访问的实时事务定义为查询事务。
4.根据权利要求3所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述实时访问访问一个对象的一个属性,称该对象为目标对象,该属性为目标属性,在访问之前必须获得目标对象对应的对象类型中目标属性对应的属性类型的锁,称为目标锁。
5.根据权利要求1所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述步骤3)中,所述目标排它锁是指在对目标对象的目标属性执行更新访问前,获得的目标对象对应的对象类型中目标属性对应的属性类型的排它锁;所述获得目标排它锁的情况下对该类对象的该种属性可执行更新访问和查询访问。
6.根据权利要求1所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述步骤4)中,所述目标共享锁是指在对目标对象的目标属性查询访问之前,获得的目标对象对应的对象类型中目标属性对应的属性类型的共享锁;所述获得目标共享锁的情况下对该类对象中的该种属性仅可执行查询访问。
7.根据权利要求5或6所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,对于相同的目标对象对应的对象类型中目标属性对应的属性类型上的目标排它锁和目标共享锁,如果一个实时事务获得并持有目标排它锁,在释放以前,其它并发实时事务既不能获得目标排它锁,也不能获得目标共享锁;而如果一个实时事务获得并持有目标共享锁,那么在释放以前,其它并发实时事务虽然不能获得目标排它锁,但是可以获得目标共享锁。
8.根据权利要求3所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述查询事务具有低优先级,所述更新事务具有高优先级;所述实时事务获取锁时如果因为互斥共享需要等待其它并发实时事务释放锁,那么低优先级或者同等优先级的实时事务需要等待高优先级或者同等优先级的实时事务执行完成并释放锁,而高优先级的实时事务则使低优先级的实时事务夭折并释放锁后重新执行低优先级的实时事务。
9.根据权利要求1所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述步骤2)中,实时事务执行之前需要进行预分析,所述预分析是指查看每一个实时访问的类型。
10.根据权利要求8所述的一种实时内存数据库的对象类型属性类型锁的实现方法,其特征在于,所述一个查询事务因为并发更新事务夭折并重新执行k次后,其优先级升高至更新事务的高优先级,k为与应用相关的经验参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410536272.3A CN104252545B (zh) | 2014-10-11 | 2014-10-11 | 一种实时内存数据库的对象类型属性类型锁的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410536272.3A CN104252545B (zh) | 2014-10-11 | 2014-10-11 | 一种实时内存数据库的对象类型属性类型锁的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104252545A CN104252545A (zh) | 2014-12-31 |
CN104252545B true CN104252545B (zh) | 2017-05-31 |
Family
ID=52187435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410536272.3A Active CN104252545B (zh) | 2014-10-11 | 2014-10-11 | 一种实时内存数据库的对象类型属性类型锁的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104252545B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2016244128B2 (en) * | 2015-04-01 | 2018-08-30 | Ab Inito Technology Llc | Processing database transactions in a distributed computing system |
CN110730958B (zh) | 2017-06-09 | 2022-12-06 | 华为技术有限公司 | 用于管理按优先级排序的数据库事务的方法和系统 |
CN110909012B (zh) * | 2019-12-04 | 2020-09-04 | 上海达梦数据库有限公司 | 数据库对象的封锁方法、装置、设备和存储介质 |
US11763359B2 (en) * | 2021-01-07 | 2023-09-19 | Stripe, Inc. | Invoice numbering |
CN113449107B (zh) * | 2021-06-29 | 2022-03-18 | 金陵科技学院 | 面向地理大数据的分布式自适应访问控制方法 |
CN117112244A (zh) * | 2023-08-22 | 2023-11-24 | 电子科技大学 | 一种面向混合实时性任务集的非对称stm同步方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
US7756827B1 (en) * | 2002-06-28 | 2010-07-13 | Teradata Us, Inc. | Rule-based, event-driven, scalable data collection |
CN103336789A (zh) * | 2013-06-06 | 2013-10-02 | 华为技术有限公司 | 一种数据库系统的锁操作方法及设备 |
CN103473318A (zh) * | 2013-09-12 | 2013-12-25 | 中国科学院软件研究所 | 一种面向内存数据网格的分布式事务保障方法 |
-
2014
- 2014-10-11 CN CN201410536272.3A patent/CN104252545B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7756827B1 (en) * | 2002-06-28 | 2010-07-13 | Teradata Us, Inc. | Rule-based, event-driven, scalable data collection |
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN103336789A (zh) * | 2013-06-06 | 2013-10-02 | 华为技术有限公司 | 一种数据库系统的锁操作方法及设备 |
CN103473318A (zh) * | 2013-09-12 | 2013-12-25 | 中国科学院软件研究所 | 一种面向内存数据网格的分布式事务保障方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104252545A (zh) | 2014-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104252545B (zh) | 一种实时内存数据库的对象类型属性类型锁的实现方法 | |
Huang et al. | Research on architecture and query performance based on distributed graph database Neo4j | |
US9348641B2 (en) | System and method for performing a transaction in a massively parallel processing database | |
US8364909B2 (en) | Determining a conflict in accessing shared resources using a reduced number of cycles | |
US7991822B2 (en) | Propagation of updates for attributes of a storage object from an owner node of the storage object to other nodes | |
US9092474B2 (en) | Incremental conversion of database objects during upgrade of an original system | |
CN104160381A (zh) | 多租户环境中租户特定数据集的管理 | |
US8775622B2 (en) | Computer-based cluster management system and method | |
US20090037366A1 (en) | Online index builds and rebuilds without blocking locks | |
CN104781809A (zh) | 容器数据库 | |
US9679004B2 (en) | Planned cluster node maintenance with low impact on application throughput | |
CN102567096B (zh) | 一种在多任务环境下防止死锁的互斥信号量管理方法 | |
CN107102824A (zh) | 一种基于存储和加速优化的Hadoop异构方法和系统 | |
US20130275984A1 (en) | Multiprocessing transaction recovery manager | |
US20140279960A1 (en) | Row Level Locking For Columnar Data | |
CN104573112B (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN110457313A (zh) | 一种应用配置管理方法、服务器及存储介质 | |
CN104915412A (zh) | 一种动态管理数据库连接的方法及系统 | |
CN106844390A (zh) | 一种部门间数据资源接入方法 | |
CN109408201A (zh) | 基于分布式数据库的事务管理方法 | |
CN115964444B (zh) | 一种云原生分布式多租户数据库实现方法及系统 | |
CN102054009A (zh) | 分布式异构栅格空间数据无缝集成方法 | |
CN114416884B (zh) | 连接分区表的方法和装置 | |
CN110069243A (zh) | 一种java程序线程优化方法 | |
CN110059880B (zh) | 一种服务发现方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 210032 Jiangsu province Nanjing city Pukou high tech Zone Huidalu No. 9 Applicant after: Nanjing Guodian Nanzi 710086 Automation Co. Ltd. Address before: Nanjing City, Jiangsu province 210032 Spark Road, Pukou hi tech Development Zone No. 8 Applicant before: Nanjing Guodian Nanzi Meizhuo Control System Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |