CN103761260A - 处理数据库互斥锁的方法和装置以及分布式系统 - Google Patents
处理数据库互斥锁的方法和装置以及分布式系统 Download PDFInfo
- Publication number
- CN103761260A CN103761260A CN201310750117.7A CN201310750117A CN103761260A CN 103761260 A CN103761260 A CN 103761260A CN 201310750117 A CN201310750117 A CN 201310750117A CN 103761260 A CN103761260 A CN 103761260A
- Authority
- CN
- China
- Prior art keywords
- lock
- mutual exclusion
- statement
- database
- exclusion lock
- 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.)
- Granted
Links
Images
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
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的主要目的是提供一种处理数据库互斥锁的方法和装置,以实现针对多个数据库的操作在并发时的互斥操作;本发明的另一目的是提供一种分布式系统,实现多个节点各自执行上述操作时的互斥操作。本发明的处理数据库互斥锁的方法包括:确定当前操作所针对的多个数据库的类型;对于确定的每个类型的数据库,生成可执行语句,所述可执行语句用于获得适用于该数据库的互斥锁;执行所述可执行语句以使所述当前操作获得所述互斥锁。
Description
技术领域
本发明涉及计算机技术,特别地涉及一种处理数据库互斥锁的方法和装置以及分布式系统。
背景技术
数据库互斥锁的主要作用是保证在当前存在多个操作时数据的完整性。在向数据库的一个数据单元(例如数据库的一行)进行操作时,当前操作获得一个针对该数据单元的锁,使其他操作无法对该数据单元进行操作;在当前操作完成对该数据单元的操作后,该锁被释放,使其他操作可以获得针对该数据单元的锁。
在现实中,复杂的应用系统往往需要由同一操作针对多个数据库进行,例如,从几个数据库中各读取一部分数据。对于这类操作在并发时如何实现互斥操作,现有技术尚未提供相关方案;另外,在分布式系统中,对于多个节点各自执行的上述操作如何实现互斥操作,现有技术也未提供相关方案。
发明内容
有鉴于此,本发明的主要目的是提供一种处理数据库互斥锁的方法和装置,以实现针对多个数据库的操作在并发时的互斥操作;本发明的另一目的是提供一种分布式系统,实现多个节点各自执行上述操作时的互斥操作。本发明的其他目的、特点将结合实施例加以描述。
为实现上述目的,根据本发明的一个方面,提供了一种处理数据库互斥锁的方法。
本发明的处理数据库互斥锁的方法包括:确定当前操作所针对的多个数据库的类型;对于确定的每个类型的数据库,生成可执行语句,所述可执行语句用于获得适用于该数据库的互斥锁;执行所述可执行语句以使所述当前操作获得所述互斥锁。
可选地,确定当前操作所针对的多个数据库的类型的步骤包括:根据数据库连接字符串得出当前操作所针对的多个数据库的类型。
可选地,所述可执行语句包括标注语句和获取锁语句,其中:所述标注语句用于对所述当前操作所针对的数据单元采用所述互斥锁的标识进行标注;所述获取锁语句用于获取互斥锁,该互斥锁的标识标注了当前操作所针对的数据单元。
可选地,在确定当前操作所针对的多个数据库的类型的步骤之前,还包括:为预设的互斥锁集合配置该互斥锁集合中的所有互斥锁可获得的最大数据库连接数;所述可执行语句用于获得所述互斥锁集合中的互斥锁;在执行锁获取语句之前,判断所述互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行所述锁获取语句,否则等待所述数据库连接数不大于预设值然后再执行所述锁获取语句。
可选地,在执行锁获取语句时,监听数据库提供的锁等待超时提示信息,在收到该锁等待超时提示信息的情况下,再次执行锁获取语句。
可选地,在当前操作获得所述互斥锁之后,该方法还包括:查看所述当前操作所获得的互斥锁的状态,在所述互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息。
根据本发明的另一方面,提供了一种处理数据库互斥锁的装置。
本发明的处理数据库互斥锁的装置包括:识别模块,用于确定当前操作所针对的多个数据库的类型;语句模块,用于对于确定的每个类型的数据库,生成可执行语句,所述可执行语句用于获得适用于该数据库的互斥锁;执行模块,用于执行所述可执行语句以使所述当前操作获得所述互斥锁。
可选地,所述识别模块还用于根据数据库连接字符串得出当前操作所针对的多个数据库的类型。
可选地,所述语句模块还用于生成标注语句和获取锁语句,其中:所述标注语句用于对所述当前操作所针对的数据单元采用所述互斥锁的标识进行标注;所述获取锁语句用于获取互斥锁,该互斥锁的标识标注了当前操作所针对的数据单元。
可选地,还包括配置模块,用于为预设的互斥锁集合配置该互斥锁集合中的所有互斥锁可获得的最大数据库连接数;所述语句模块还用于生成用于获得所述互斥锁集合中的互斥锁;所述执行模块还用于在执行锁获取语句之前,判断所述互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行所述锁获取语句,否则等待所述数据库连接数不大于预设值然后再执行所述锁获取语句。
可选地,所述执行模块还用于在执行锁获取语句时,监听数据库提供的锁等待超时提示信息,在收到该锁等待超时提示信息的情况下,再次执行锁获取语句。
可选地,还包括查看模块,用于在当前操作获得所述互斥锁之后,查看所述当前操作所获得的互斥锁的状态,在所述互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息。
根据本发明的又一方面,提供了一种分布式系统。
本发明的分布式系统包括多个节点,各个所述节点中设置有本发明中的处理数据库互斥锁的装置。
根据本发明的技术方案,识别当前操作所针对的数据库的类型,再生成这些数据库中的可执行语句,能够实现针对多个数据库的操作在并发时的互斥操作。利用数据库的锁等待超时的异常提示信息,再次尝试获得锁,有助于避免系统局部死锁。通过设置互斥锁的最大数据库连接数,使互斥锁不至于占用过多的数据库连接资源从而影响业务系统的运行。通过查看已获得的互斥锁的状态并且在该互斥锁被删除的情况下通知其他锁等待对象,便于其他操作及时获取锁。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的处理数据库互斥锁的方法的基本步骤的示意图;
图2是根据本发明实施例的一种处理数据库互斥锁的装置的基本组成部分的示意图;
图3是根据本发明实施例的一种处理数据库互斥锁的系统的示意图;
图4是根据本发明实施例的一种获取互斥锁的优选流程的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本发明实施例中的互斥锁可使用在任何非分布式或分布式项目中,当需要保证某些操作一致性的时候使用。该锁可在各用使用关系型数据库的项目中使用,这里的数据库例如Mysql,SQL Server,Oracle等。为实现该锁,每个锁对象需要持有一个数据库连接。这里的锁具体可以是如下三种不同的锁:表锁,行锁和任务锁。在获得锁或释放锁的过程当中,如果数据库连接出现异常,将一直等待到连接恢复,然后再进行下一步的操作。每一个锁需要有一个唯一的名称,该名称在创建锁的时候传入,并且伴随整个锁的生命周期内。锁通过该名称来区分。不同锁之间不存在竞争动作。该锁的使用至少包含两个动作,获得锁,释放锁。未被释放的锁,不能被其他线程或进程获得。每个锁持有一个数据库连接,该连接在锁释放的时候,随之释放。在同一进程中,所有的锁单元持有的连接数包含一个最大的持有值,当所有锁持有的连接数到达一定阈值的时候,则不能通过新建一个锁来获得锁资源,需要等待其他锁释放之后,即可竞争获得锁。该步骤用于防止锁占用,消耗过多的连接资源。
图1是根据本发明实施例的处理数据库互斥锁的方法的基本步骤的示意图。该方法可以由分布式系统中的节点来执行,如图1所示,主要包括如下的步骤S11至S13。
步骤S11:确定当前操作所针对的多个数据库的类型。可以根据数据库连接字符串(dburl)得出当前操作所针对的多个数据库的类型。
步骤S12:对于确定的每个类型的数据库,生成可执行语句。这里的可执行语句用于获得适用于该数据库的互斥锁。因为已经确定了数据库的类型,因此可根据该类型的数据库的标准语句格式来生成上述的可执行语句。例如针对数据库中的数据单元(例如一条记录)进行操作,可以先对该数据单元用互斥锁的标识例如名称进行标注,然后按标注的标识来尝试获得具有该标识的互斥锁,这样,这里的可执行语句包括用于对当前操作所针对的数据单元采用互斥锁的标识进行标注的语句(以下称作“标注语句”),还包括用于获取互斥锁的语句(以下称作“获取锁语句”),获取的互斥锁的标识标注了当前操作所针对的数据单元。
步骤S13:执行上述可执行语句以使当前操作获得互斥锁。可以看出通过以上步骤的执行,识别当前操作所针对的数据库的类型,再生成这些数据库中的可执行语句,能够实现针对多个数据库的操作在并发时的互斥操作。
对于数据库中的一条记录,若对其进行多个操作,则有多个锁在该记录上等待。在执行锁获取语句时,可以监听数据库提供的锁等待超时提示信息,在收到该提示信息的情况下,再将执行锁获取语句。对于数据库而言,在发生锁等待超时后,数据库会提供一个异常提示信息,因此在本发明实施例中,可以利用该异常提示信息作为提示,再次尝试获得该锁并且忽略处理该异常提示信息本身,此时前一个锁可能已被释放或删除,因此再次尝试就有可能获得该锁,有助于提高锁获取的成功率,并且有助于避免系统局部死锁。
在实际的应用中,锁使用的数据库连接往往与业务系统采用同一个连接,在这种方式下,为了使互斥锁在业务系统中不占用过多的数据库连接资源,可以预先设置一个互斥锁集合,然后设置该互斥锁集合中所有互斥锁可获得的最大数据库连接数。可以通过保存多个锁的标识来设置互斥锁集合,在执行上述的标注语句时,从保存的多个锁的标识中提取一个锁的标识。这样,在执行锁获取语句之前,可以先判断互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行锁获取语句,否则等待数据库连接数不大于预设值然后再执行锁获取语句。在该互斥锁集合中的其他已获取的锁被释放时数据库连接会断开,由于某些异常例如节点故障也会使得数据库连接断开,在例如这些情况下,数据库连接数相应减小。
对于数据库而言,在某一操作与数据库的连接断开后,数据库会删除相应的锁。因此在本发明实施例中,在当前操作获得锁之后,可以间隔地查看当前操作所获得的互斥锁的状态,在该互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息,这样其他锁等待对象可再次尝试获得锁,从而便于其他操作及时获取锁。
以下结合图2对本发明实施例的处理数据库互斥锁的装置的一种基本结构做出说明。图2是根据本发明实施例的一种处理数据库互斥锁的装置的基本组成部分的示意图。图2中的处理数据库互斥锁的装置20可以设置在分布式系统的节点中,主要包括识别模块21、语句模块22、以及执行模块23。
识别模块21用于确定当前操作所针对的多个数据库的类型;语句模块22用于对于确定的每个类型的数据库,生成可执行语句,该可执行语句用于获得适用于该数据库的互斥锁;执行模块23用于执行可执行语句以使当前操作获得该互斥锁。
在分布式系统的各个节点中设置处理数据库互斥锁的装置20,因为数据库自身具有锁等待机制,所以能够实现多个节点对相同的一个或多个数据库中的相同数据单元的互斥操作。可以对各个节点设置上述的互斥锁集合,使各个节点不至于被互斥锁占用过多的数据库连接。
识别模块21还可用于根据数据库连接字符串得出当前操作所针对的多个数据库的类型。
语句模块22还可用于生成标注语句和获取锁语句,其中:标注语句用于对当前操作所针对的数据单元采用互斥锁的标识进行标注;获取锁语句用于获取互斥锁,该互斥锁的标识标注了当前操作所针对的数据单元。
处理数据库互斥锁的装置20还可以包括配置模块(图中未示出),用于为预设的互斥锁集合配置该互斥锁集合中的所有互斥锁可获得的最大数据库连接数;语句模块22还可用于生成用于获得互斥锁集合中的互斥锁;执行模块23还用于在执行锁获取语句之前,判断互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行上述锁获取语句,否则等待数据库连接数不大于预设值然后再执行上述锁获取语句。
执行模块23还可用于在执行锁获取语句时,监听数据库提供的锁等待超时提示信息,在收到该锁等待超时提示信息的情况下,再次执行锁获取语句。
处理数据库互斥锁的装置20还可以包括查看模块(图中未示出),用于在当前操作获得互斥锁之后,查看当前操作所获得的互斥锁的状态,在该互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息。
本发明实施例中的互斥锁能够在锁释放的时候,立刻被等待的单元获得,通知过程由数据库来处理,无需作单独的开发。该锁的实现方式不能造成数据库的死锁问题,需要保证安全性。通过唯一编号,对共享资源进行互斥依赖,锁包含多种方法,可以是其中的一种或者几种方法,方法包括:(1)、获得一个锁,该方法是一个阻塞方法,针对同一个锁,需要等待其他持有锁的单元释放锁。如锁不释放,则一直等待。(2)、释放一个锁,丢弃一个锁的占有,该锁可以被其他单元竞争获得。(3)、尝试获得一个锁,该方法需要一个超时时间,在该时间段内,会尝试去获取一个锁。(4)、判断是否被锁住,该锁是否已经被持有。
以下结合图3和图4对本发明实施例的一种优选方式做出说明。图3是根据本发明实施例的一种处理数据库互斥锁的系统的示意图,图4是根据本发明实施例的一种获取互斥锁的优选流程的示意图,该流程基于图3所示的系统实现。图3中同时示出了各个模块之间的主要交互关系。以下先对图3中各模块的功能加以说明。
资源管理中心用于分配数据库连接,连接数的最大阈值可配置。状态语句准备单元用于判断数据库类型,并且生成相应的可执行语句。命令执行单元用于和数据库交互,执行状态语句单元传入的SQL语句。分析单元用于解析命令执行单元返回的结果,判断是否持有该锁,并且负责下一步命令的执行,失败转移,重试。如果为获得锁的动作,由该单元通知。存储单元用于保存已经存在的锁名称,该条记录持久化于数据库之中,并且作为唯一的区分锁的条件,供所有名称相同的锁使用。名称生成单元用于在不存在某个锁名称的时候,生成一条记录,并通过命令执行单元同步到数据库。资源释放单元用于释放静态资源,连接、状态等,并且通知资源管理中心对连接重新计数。
本申请实施例中,锁使用的数据库连接与业务系统采用同一个连接,当创建的锁对象过多的时候,连接将会被锁资源完全占有,该连接只能在锁释放的时候移除。而锁的使用,需要在业务之前进行锁(Lock)操作,而在业务之后进行释放锁(Unlock)操作,所以在接下来的业务操作中,业务系统将不能够获得再获得数据库连接,并且会一直阻塞在获取连接的过程当中,这样会造成部分数据死锁。为了区分权重与公平性的调度,同时满足灵活的业务适应性,所以设计了一个资源管理中心来有效的分配锁可用的连接。
参阅图3所示,本申请实施例中,系统内设置有用于生成锁唯一标识的存储单元,在数据库新建该表的时候,并不生成该锁的唯一标识行。用户可通过自定义名称,并且在第一次使用锁的时候,生成该唯一标识行。唯一标识行的生成是由名称生成单元通过判断锁名称唯一值在数据库中是否存在,当该名称不存在则返回结果需要生成标识行,在高并发情况下,唯一标识行的同步生成由数据库唯一索引控制。
本申请实施例中,资源管理中心在锁实例构建的时候生成,资源管理中心包含以下属性,所有锁可获得的最大数据库连接数,当前所有锁共持有的数据库连接数。资源管理中心还包含以下方法:初始化数据库连接对象,释放数据库连接对象。在某个操作尝试获得一个锁的时候,会首先进入资源管理中心,从该中心获得一个可用的数据库连接,在获得连接过程中,首先会判断资源管理中心所有锁可获得的最大连接数是否已经到达阈值,如果等于该阈值则等待,直到其他锁释放一个连接之后,并通知该资源管理中心。每获得一个连接,资源管理中心所有锁持有的数据库连接数加一,每释放一个连接,所有锁持有的数据库连接则减一。通过该步骤,能够有效的保障,在业务系统之中,锁不会占用过多的连接资源。可根据具体的初始化连接数,配置最大能够持有的连接阈值。
状态语句准备单元在锁构建的时候生成,该单元可通过不同的数据库类型,按需生成不同的可执行语句,主要包含以下的操作语句:获得一个修改锁的执行语句,和获得一个生成唯一标识行的执行语句。
获得一个修改锁的执行语句主要用于产生一个数据库的互斥行锁。如果在数据库已经有一个或多个锁在该唯一标识行上等待,则线程会在该条语句的执行过程中等待,由于不同的数据库包含一定的锁等待超时时间,如mysql的默认等待时间为50秒。所以,在到达50秒之后,会抛出一个异常。命令执行单元可捕获该异常,并且忽略该异常。当异常发生之后,重新执行该条语句,再一次的尝试获得锁。
获得一个生成唯一标识行的执行语句主要用于向存储单元生成一条由锁名称作为唯一标识的行。因为基于数据库的互斥锁行锁,需要在数据库存储单元中有记录,而锁的唯一标识可自定义,所以在初始化的时候并不生成该存储单元,而由第一次尝试获得锁的过程来生成该单元。通过数据库的唯一索引,可以保证该单元生成数据的唯一性和可靠性。在高并发情况下,多个竞争机制期望生成相同的记录,会抛出异常,由命令执行单元捕获该异常,忽略该异常。
命令执行单元负责执行由状态语句准备单元生成的语句并执行返回结果。分析单元根据调用的方法判断返回结果,及下一步操作动作。在本申请实例中,包含了以下几种可能:
获得一个锁,该步骤是一个阻塞的步骤。必须等待一个对象获得该锁才返回。如果未获得一个锁,或者中途出现异常,则再一次循环,调用获得锁的步骤;尝试获得一个锁,该步骤只执行一次获得锁的步骤,如果能够获得锁则返回真,否则返回假;在一定的时间范围内尝试获得一个锁,该步骤需给定一个时间范围,在该范围内,循环执行获得锁的步骤。如果获得则返回,如果未获得则做下一步判断,如果到达时间设置阈值,跳出循环,返回假;如果未到达时间设置阈值,则再一次执行获得锁的步骤。
锁使用完毕之后需要做相应的状态回收,该步骤由资源释放单元处理。资源释放单元主要用来释放连接,并且修改锁的状态为未锁。锁的状态可通过状态查看单元查看。在锁的状态为未锁的情况下立即通知其他锁等待对象。
以下对图4的流程加以说明。
步骤S401:执行获得锁动作。此时需要给出具体的获取方式,传入一个超时时间。
步骤S402:状态查看单元判断当前锁是否可用,如果不可用则跳到步骤S403。
步骤S403:等待,以重新获得锁资源,在预设时长后返回步骤S401。
步骤S404:资源管理中心初始化连接,并且将该连接交给分析中心,分析中心在锁被释放之前一直持有该连接。
步骤S405:资源管理中心判断可用连接数是否到达阈值,如果到达到阈值,则执行步骤S403继续等待。
步骤S406:分析中心记录获得锁的开始时间,用于判断在每次获得锁的过程中是否超时。
步骤S407:状态语句准备单元生成可执行语句,该语句的生成过程需要结合具体使用的数据库类型。
步骤S408:命令执行单元执行语句。语句生成完成之后,分析中心将该语句交给命令执行单元执行。命令执行单元直接与数据库交互。
步骤S409:分析中心判断是否已生成唯一标识。语句在执行完成之后返回结果给分析中心,结果包含3种类型,已锁,未锁,未生成锁唯一标识存储单元,判断结果如果是未生成锁唯一存储标识单元,则执行步骤S410生成唯一标识单元。
步骤S410:生成一个唯一标识单元,然后返回步骤S409。该唯一标识单元将通过命令执行单元同步到数据库。
步骤S411:判断锁是否成功锁住,如果未成功锁住则跳到步骤S403。
步骤S412:计算从开始到当前时间点所花费的执行时间。
步骤S413:判断是否超时,即该执行时间是否大于传入的超时时间,如果是则认为超时,执行步骤S414,否则进入步骤S415。
步骤S414:跳出流程并返回获得锁失败的结果。
步骤S415:返回获得锁成功结果。
整个锁的获得过程是一个循环,根据不同的条件来判断下一步的动作。并且在获得过程中,随时可能出现各种异常,如数据库突然断网。则不部分异常都需要做相应的处理,如在断网或者连接不可用之后,需要生成新的可用连接。由于锁被释放之后,排队等待获得锁的机制会相互竞争,这里并没有排序的队列,竞争过程均有数据库处理。
根据本发明实施例的技术方案,识别当前操作所针对的数据库的类型,再生成这些数据库中的可执行语句,能够实现针对多个数据库的操作在并发时的互斥操作。利用数据库的锁等待超时的异常提示信息,再次尝试获得锁,有助于避免系统局部死锁。通过设置互斥锁的最大数据库连接数,使互斥锁不至于占用过多的数据库连接资源从而影响业务系统的运行。通过查看已获得的互斥锁的状态并且在该互斥锁被删除的情况下通知其他锁等待对象,便于其他操作及时获取锁。
以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和设备的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来开发出的任何存储介质。
还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (13)
1.一种处理数据库互斥锁的方法,其特征在于,包括:
确定当前操作所针对的多个数据库的类型;
对于确定的每个类型的数据库,生成可执行语句,所述可执行语句用于获得适用于该数据库的互斥锁;
执行所述可执行语句以使所述当前操作获得所述互斥锁。
2.根据权利要求1所述的方法,其特征在于,确定当前操作所针对的多个数据库的类型的步骤包括:根据数据库连接字符串得出当前操作所针对的多个数据库的类型。
3.根据权利要求1或2所述的方法,其特征在于,所述可执行语句包括标注语句和获取锁语句,其中:
所述标注语句用于对所述当前操作所针对的数据单元采用所述互斥锁的标识进行标注;
所述获取锁语句用于获取互斥锁,该互斥锁的标识标注了当前操作所针对的数据单元。
4.根据权利要求1所述的方法,其特征在于,
在确定当前操作所针对的多个数据库的类型的步骤之前,还包括:为预设的互斥锁集合配置该互斥锁集合中的所有互斥锁可获得的最大数据库连接数;
所述可执行语句用于获得所述互斥锁集合中的互斥锁;
在执行锁获取语句之前,判断所述互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行所述锁获取语句,否则等待所述数据库连接数不大于预设值然后再执行所述锁获取语句。
5.根据权利要求1或4所述的方法,其特征在于,在执行锁获取语句时,监听数据库提供的锁等待超时提示信息,在收到该锁等待超时提示信息的情况下,再次执行锁获取语句。
6.根据权利要求1或4所述的方法,其特征在于,在当前操作获得所述互斥锁之后,该方法还包括:
查看所述当前操作所获得的互斥锁的状态,在所述互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息。
7.一种处理数据库互斥锁的装置,其特征在于,包括:
识别模块,用于确定当前操作所针对的多个数据库的类型;
语句模块,用于对于确定的每个类型的数据库,生成可执行语句,所述可执行语句用于获得适用于该数据库的互斥锁;
执行模块,用于执行所述可执行语句以使所述当前操作获得所述互斥锁。
8.根据权利要求7所述的装置,其特征在于,所述识别模块还用于根据数据库连接字符串得出当前操作所针对的多个数据库的类型。
9.根据权利要求7或8所述的装置,其特征在于,所述语句模块还用于生成标注语句和获取锁语句,其中:
所述标注语句用于对所述当前操作所针对的数据单元采用所述互斥锁的标识进行标注;
所述获取锁语句用于获取互斥锁,该互斥锁的标识标注了当前操作所针对的数据单元。
10.根据权利要求7所述的装置,其特征在于,
还包括配置模块,用于为预设的互斥锁集合配置该互斥锁集合中的所有互斥锁可获得的最大数据库连接数;
所述语句模块还用于生成用于获得所述互斥锁集合中的互斥锁;
所述执行模块还用于在执行锁获取语句之前,判断所述互斥锁集合中的所有互斥锁在当前持有的数据库连接数是否不大于预设值,若是,则执行所述锁获取语句,否则等待所述数据库连接数不大于预设值然后再执行所述锁获取语句。
11.根据权利要求7或10所述的装置,其特征在于,所述执行模块还用于在执行锁获取语句时,监听数据库提供的锁等待超时提示信息,在收到该锁等待超时提示信息的情况下,再次执行锁获取语句。
12.根据权利要求7或10所述的装置,其特征在于,还包括查看模块,用于在当前操作获得所述互斥锁之后,查看所述当前操作所获得的互斥锁的状态,在所述互斥锁被数据库删除的情况下,向连接在该数据库上的锁等待对象发送提示信息。
13.一种分布式系统,包括多个节点,其特征在于,各个所述节点中设置有权利要求7至12中任一项所述的处理数据库互斥锁的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750117.7A CN103761260B (zh) | 2013-12-31 | 2013-12-31 | 处理数据库互斥锁的方法和装置以及分布式系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750117.7A CN103761260B (zh) | 2013-12-31 | 2013-12-31 | 处理数据库互斥锁的方法和装置以及分布式系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103761260A true CN103761260A (zh) | 2014-04-30 |
CN103761260B CN103761260B (zh) | 2018-01-23 |
Family
ID=50528497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310750117.7A Active CN103761260B (zh) | 2013-12-31 | 2013-12-31 | 处理数据库互斥锁的方法和装置以及分布式系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103761260B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105447012A (zh) * | 2014-08-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种用于数据库的写入互斥方法及装置 |
WO2016197870A1 (zh) * | 2015-06-11 | 2016-12-15 | 阿里巴巴集团控股有限公司 | 一种处理关系型数据库中ddl语句的方法与设备 |
CN106326014A (zh) * | 2016-08-24 | 2017-01-11 | 杭州费尔斯通科技有限公司 | 一种资源访问方法及装置 |
CN106610865A (zh) * | 2015-10-21 | 2017-05-03 | 阿里巴巴集团控股有限公司 | 一种数据加锁及解锁的方法及装置 |
CN106650501A (zh) * | 2016-12-30 | 2017-05-10 | 迈普通信技术股份有限公司 | 数据库访问控制方法和装置 |
CN110399378A (zh) * | 2018-04-17 | 2019-11-01 | 北京京东尚科信息技术有限公司 | 数据库系统锁操作分析方法及装置 |
CN112256442A (zh) * | 2019-07-22 | 2021-01-22 | 中兴通讯股份有限公司 | 一种数据库死锁检测方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1641639A (zh) * | 2004-01-12 | 2005-07-20 | 英业达股份有限公司 | 查询多种数据库的系统及其方法 |
CN101465877A (zh) * | 2007-12-17 | 2009-06-24 | 诺基亚西门子通信公司 | 分布式数据库系统中的负载分布 |
US20100191884A1 (en) * | 2008-06-12 | 2010-07-29 | Gravic, Inc. | Method for replicating locks in a data replication engine |
CN201601237U (zh) * | 2010-01-25 | 2010-10-06 | 辽宁锦兴电力金具科技股份有限公司 | 焊线式管母线t接阀厅金具 |
US20110029498A1 (en) * | 2009-07-10 | 2011-02-03 | Xkoto, Inc. | System and Method for Subunit Operations in a Database |
US20110238641A1 (en) * | 2010-03-24 | 2011-09-29 | Matrixx Software, Inc. | System with multiple conditional commit databases |
-
2013
- 2013-12-31 CN CN201310750117.7A patent/CN103761260B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1641639A (zh) * | 2004-01-12 | 2005-07-20 | 英业达股份有限公司 | 查询多种数据库的系统及其方法 |
CN101465877A (zh) * | 2007-12-17 | 2009-06-24 | 诺基亚西门子通信公司 | 分布式数据库系统中的负载分布 |
US20100191884A1 (en) * | 2008-06-12 | 2010-07-29 | Gravic, Inc. | Method for replicating locks in a data replication engine |
US20110029498A1 (en) * | 2009-07-10 | 2011-02-03 | Xkoto, Inc. | System and Method for Subunit Operations in a Database |
CN201601237U (zh) * | 2010-01-25 | 2010-10-06 | 辽宁锦兴电力金具科技股份有限公司 | 焊线式管母线t接阀厅金具 |
US20110238641A1 (en) * | 2010-03-24 | 2011-09-29 | Matrixx Software, Inc. | System with multiple conditional commit databases |
Non-Patent Citations (2)
Title |
---|
朱虎平: ""主观编程题实时考评系统的技术研究与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
缪文: "Linux下数据库连接池的实现", 《福建电脑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105447012A (zh) * | 2014-08-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种用于数据库的写入互斥方法及装置 |
CN105447012B (zh) * | 2014-08-15 | 2019-03-15 | 阿里巴巴集团控股有限公司 | 一种用于数据库的写入互斥方法及装置 |
WO2016197870A1 (zh) * | 2015-06-11 | 2016-12-15 | 阿里巴巴集团控股有限公司 | 一种处理关系型数据库中ddl语句的方法与设备 |
CN106610865A (zh) * | 2015-10-21 | 2017-05-03 | 阿里巴巴集团控股有限公司 | 一种数据加锁及解锁的方法及装置 |
CN106326014A (zh) * | 2016-08-24 | 2017-01-11 | 杭州费尔斯通科技有限公司 | 一种资源访问方法及装置 |
CN106650501A (zh) * | 2016-12-30 | 2017-05-10 | 迈普通信技术股份有限公司 | 数据库访问控制方法和装置 |
CN110399378A (zh) * | 2018-04-17 | 2019-11-01 | 北京京东尚科信息技术有限公司 | 数据库系统锁操作分析方法及装置 |
CN112256442A (zh) * | 2019-07-22 | 2021-01-22 | 中兴通讯股份有限公司 | 一种数据库死锁检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103761260B (zh) | 2018-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103761260A (zh) | 处理数据库互斥锁的方法和装置以及分布式系统 | |
CN104702655A (zh) | 云存储资源分配方法及其系统 | |
US9342379B2 (en) | Lock free acquisition and release of a semaphore in a multi-core processor environment | |
CN104317843A (zh) | 一种数据同步etl系统 | |
CN103970603B (zh) | 一种基于多级反馈队列的事件注入引擎的任务调度方法 | |
CN108038005A (zh) | 基于zookeeper的共享资源访问方法、客户端、服务端、系统 | |
CN103761148A (zh) | 集群定时调度任务的控制方法 | |
CN107181789A (zh) | 一种分布式锁实现方法及装置 | |
CN103827864A (zh) | 支持分布式数据网格中的服务器端事件模型的系统和方法 | |
CN112835722B (zh) | 业务处理方法、电子设备及计算机可读存储介质 | |
CN104035786A (zh) | 一种软件定时器的优化方法及系统 | |
CN112905364A (zh) | 微服务的调用方法与电子设备 | |
CN115220891A (zh) | 一种处理高并发批量任务的方法及相关产品 | |
CN102662632B (zh) | 一种利用信号量实现的序列号生成方法和生成器 | |
CN106170013B (zh) | 一种基于Redis的Kafka消息唯一性方法 | |
CN105703941B (zh) | 配置事务的处理方法及装置 | |
CN112000670B (zh) | 一种多线程程序数据统一管理方法、系统及电子设备 | |
CN112667409A (zh) | 一种可重入的分布式排它锁实现方法 | |
CN110162532B (zh) | 交易数据处理方法和设备 | |
CN108733477B (zh) | 数据集群化处理的方法、装置及设备 | |
US7171410B1 (en) | Fault tolerant network element | |
CN111400097A (zh) | 数据的备份方法、装置、系统和计算机可读存储介质 | |
CN111135559B (zh) | 游戏数据处理方法、装置、电子设备及存储介质 | |
CN109144739A (zh) | 一种基于Argus视频监控的多用户竞争控制的方法及系统 | |
CN111274208B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |