数据更新的加锁方法和设备技术

技术编号:10863598 阅读:130 留言:0更新日期:2015-01-02 00:45
本申请涉及一种多线程的数据更新的加锁方法和设备,其中,该方法可以包括:确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功;如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值;如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁;如果所述等待锁数超过预定阈值,则将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中;将相同桶中的加锁失败线程以轮询的方式传送到InnoDB存储引擎以请求加锁。采用本申请,通过利用锁竞争的情况来识别并发更新的热点数据,从而对并发更新热点数据的线程进行调度控制,进而优化了高并发热点数据更新的处理能力。

【技术实现步骤摘要】
【专利摘要】本申请涉及一种多线程的数据更新的加锁方法和设备,其中,该方法可以包括:确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功;如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值;如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁;如果所述等待锁数超过预定阈值,则将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中;将相同桶中的加锁失败线程以轮询的方式传送到InnoDB存储引擎以请求加锁。采用本申请,通过利用锁竞争的情况来识别并发更新的热点数据,从而对并发更新热点数据的线程进行调度控制,进而优化了高并发热点数据更新的处理能力。【专利说明】数据更新的加锁方法和设备
本申请涉及数据处理领域,更具体地涉及一种针对多线程的数据更新进行处理的方法和设备。
技术介绍
在计算领域中,InnoDB存储引擎是MySQL的数据库引擎之一,是其中使用最频繁的一种引擎,InnoDB存储引擎由Innobase Oy公司所开发。InnoDB支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定等功能,已经成为MySQL的默认存储引擎。InnoDB存储引擎作为MySQL的一个可插拔的引擎,其支持事务,并且采用多版本并发控制的方式来提高并发度。MySQL的InnoDB存储引擎是基于行记录锁粒度,在对单条记录并发更新时,并发的线程变为串行化。由于IrmoDB的锁设计问题,导致每个请求的事务在InnoDB存储引擎做创建一个行记录锁。当有大量并发的线程更新记录时,会导致InnoDB存储引擎的锁对象非常多,巨大的锁操作的额外开销导致性能下降非常严重。因此,例如,在高并发的热点行记录变更时,MySQL数据库的InnoDB存储引擎性能非常差。例如,2K并发更新16条记录性能有1k TPS,但是2K并发更新20条记录性能只有250的TPS。 对于这种热点行记录并发更新的场景,通常的做法为: 1.在业务方识别热点行记录加以控制,这要求业务逻辑中对更新的行能够识别。这种做法对业务的侵入较大,并且不通用。另外,在集群环境下,即使业务方做控制,也有可能在某个数据库服务器上的并发访问量非常大。 2.在数据库层识别热点行记录加以控制,这要求数据库本身能识别热点行的功能。类似典型的KV (键值)存储系统,每个操作都带有当前行记录的标记。类似系统能够将并发的行记录访问加以控制,将相同行的记录放在相同的队列中,从而避免热点行记录并发量过大的问题。但是该方法对于非KV存储系统而言是无能为力的。 因此,需要一种针对多线程的数据更新尤其是数据并发更新的加锁方法和设备。通过该加锁方法和设备,能够在InnoDB存储引擎识别并发更新的热点数据并对其线程进行调度控制从而实现改善的加锁过程,提高InnoDB存储引擎的性能。
技术实现思路
因此,本申请的目的在于提供一种针对多线程的数据并发更新的加锁技术,以克服上述缺陷。 根据本申请一个方面的实施例,提供一种多线程的数据更新的加锁方法,其特征在于,包括:确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功;如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值;如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁;如果所述等待锁数超过预定阈值,则将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中;将相同桶中的加锁失败线程以轮询的方式传送到InnoDB存储引擎以请求加锁。 根据本申请的实施例,该方法可以进一步包括:如果所述加锁请求成功,则创建针对成功线程的锁并执行加锁。 根据本申请的实施例,该方法可以进一步包括:在执行加锁并对加锁的线程执行事务后,释放锁。 根据本申请的实施例,该方法可以进一步包括:通过基于所述锁的释放从而等待加锁的加锁失败线程转换成加锁状态,更新等待锁数。 根据本申请的实施例,在该方法中,创建针对所述失败线程的锁并等待加锁的步骤还可以包括:基于创建针对所述失败线程的锁并等待加锁,更新等待锁数。 根据本申请的实施例,在该方法中,将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中的步骤进一步包括:基于所述失败线程的锁信息的哈希值哈希到各个桶中,其中相同记录的失败线程的锁信息的哈希值相同,从而哈希到相同的桶中。 根据本申请的实施例,该方法进一步包括:将不同桶中的加锁失败线程以并行的方式传送到InnoDB存储引擎以请求加锁。 根据本申请另一方面的实施例,提供一种多线程的数据更新的加锁设备,其特征在于,包括:请求确定模块,用于确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功;判断模块,用于如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值;锁创建模块,用于如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁;调度模块,用于如果所述等待锁数超过预定阈值,则将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中;传送模块,用于将不同桶中的加锁失败线程以并行的方式传送到InnoDB存储引擎并且将相同桶中的加锁失败线程以轮询的方式传送到InnoDB存储引擎以请求加锁。 与现有技术相比,根据本申请的技术方案,通过利用锁竞争的情况来识别并发更新的热点数据,从而对并发更新热点数据的线程进行调度控制,进而优化了高并发热点数据更新的处理能力。 【专利附图】【附图说明】 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中: 图1示出了根据本申请实施例的多线程的数据并发更新的加锁方法的流程图;以及 图2示出了根据本申请实施例的多线程的数据并发更新的加锁设备的框图。 【具体实施方式】 为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。 参考图1,图1示出了根据本申请实施例的多线程的数据并发更新的加锁方法的流程图。 在步骤SllO处,确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功。 具体而言,例如,多个线程对于同一数据(例如,同一热点行记录)进行并发更新,则该多个线程进入InnoDB存储引擎,请求加锁。因此,在InnoDB存储引擎中,确定该多个线程进行加锁请求是否成功。 在步骤S120处,如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值。 具体而言,在InnoDB存储引擎中,由于加锁是单行的,假如多个线程对于同一热点行记录进行并发更新,则多个线程中的大部分线程的加锁请求将失败。因此,如果加锁请求失败,则在该方法中,将判断等待锁数是否超过预定阈值。 在步骤S130处,如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁。也即是说,创建该锁,并且等待持有锁的事务完成后授予该所于当前事务。 例如,假设预订阈值为N,本文档来自技高网
...
数据更新的加锁方法和设备

【技术保护点】
一种多线程的数据更新的加锁方法,其特征在于,包括:确定对InnoDB存储引擎中要更新的线程进行加锁的请求是否成功;如果所述加锁请求失败,则判断所述等待锁数是否超过预定阈值;如果所述等待锁数没有超过预定阈值,则创建针对所述失败线程的锁并等待加锁;如果所述等待锁数超过预定阈值,则将所述加锁失败线程调度出InnoDB存储引擎并将其哈希到各个桶中;将相同桶中的加锁失败线程以轮询的方式传送到InnoDB存储引擎以请求加锁。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘辉
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1