一种基于avl树的数据写入方法及装置的制造方法

文档序号:9631588阅读:558来源:国知局
一种基于avl树的数据写入方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种基于AVL树的数据写入方法及装置。
【背景技术】
[0002]AVL树又称为平衡二叉树(Balanced Binary Tree),具有以下性质:是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。因为其特殊的结构,在单线程数据的索引和存放方面,相比线性数据结构具有更好的性能;但是多线程访问时由于并发保护引入的锁机制不够完善,导致其具有性能瓶颈。
[0003]红黑树(Red Black Tree)是一种自平衡二叉查找树,红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的,其可以在0(log η)时间内做查找、插入和删除操作。
[0004]Linux内核中目前并发控制的机制主要包括:自旋锁、信号量、原子操作,还有基于自旋锁设计的读写锁。自旋锁是使用忙等待锁来确保互斥锁的一种特别方法,针对的是临界区;信号量包括一个变量及对它进行的两个原语操作,此变量就称之为信号量,针对的是临界区;原子锁是原子操作不可能被其他的任务给调开,针对的是单个变量;读写锁是自旋锁的一个变种,与一般的自旋锁相比,自旋锁一次只能有一个进程进入临界区,而对读写锁而言,如果进程是读的话,那就可以有多个进程同时进入临界区,而如果是写的话,则只有一个可以。显然,读写锁相比其它三种机制,在读多写少的场景下优势明显。
[0005]—个存储有所需数据的红黑树,当同一时刻只有一个写请求到达时,只需要按照二叉搜索树的搜索策略定位到需要修改的节点即可,此时不需要并发控制。当同一时刻有多个写请求到达红黑树的树根时,简单的处理就是对红黑树的根节点加锁,然后依次下发请求,就能保证临界资源的完整性。但是这种处理方式在两个请求要修改节点的搜索路径并不冲突的情况下,也就说本来可以同时将搜索路径不冲突的请求下发,却必须要等待前一请求完成后才能下发,这个等待过程所消耗的时间带来了额外的性能开销,而且可能不是两个请求,而是更多的请求,那么性能开销就更大。

【发明内容】

[0006]本发明的目的是提供一种基于AVL树的数据写入方法及装置,目的在于对AVL树中局部未冲突的写操作允许并行处理,从而提高数据写入的性能。
[0007]为解决上述技术问题,本发明提供一种基于AVL树的数据写入方法,采用读写锁对数据写入进行并发控制,包括:
[0008]接收数据的写入请求;
[0009]根据写入节点值的大小以及AVL树的特性确定搜索路径;
[0010]判断所述搜索路径中各节点是否处于锁状态;其中,锁状态为在当前并发的写操作中第一节点为发生局部调整子树的根节点时,将所述第一节点设置为锁住的状态;
[0011]若所述搜索路径中没有节点处于锁状态,则进行写操作;若所述搜索路径中有节点处于锁状态,则将写操作阻塞至锁住的节点上,直至所述锁住的节点的锁状态取消。
[0012]可选地,在当前并发的写操作中第一节点为发生局部调整子树的根节点时,将所述第一节点设置为锁住的状态包括:
[0013]根据当前并发的写操作的数据写入节点值的大小以及AVL树的特性确定搜索路径,并定位到实际写入的第二节点的位置;
[0014]计算所述第二节点的父节点的平衡因子,并向上递归计算其他节点的平衡因子,直至计算出平衡因子的值为2或者-2的第一节点为止;
[0015]开启所述第一节点的锁状态,并根据所述平衡因子的值进行相应的调整;
[0016]写操作完成后释放所述第一节点的锁状态。
[0017]可选地,所述开启所述第一节点的锁状态,并根据所述平衡因子的值进行相应的调整包括:
[0018]当所述平衡因子的值为2时:若旋转根的左孩子的平衡因子的值为1,则进行LL型旋转;若旋转根的左孩子的平衡因子的值为-1,则进行LR型旋转;
[0019]当所述平衡因子的值为-2时:若旋转根的右孩子的平衡因子的值为1,则进行RL型旋转;若旋转根的右孩子的平衡因子的值为-1,则进行RR型旋转。
[0020]可选地,所述AVL树为红黑树。
[0021]本发明还提供了一种基于AVL树的数据写入装置,采用读写锁对数据写入进行并发控制,包括:
[0022]接收模块,用于接收数据的写入请求;
[0023]确定模块,用于根据写入节点值的大小以及AVL树的特性确定搜索路径;
[0024]判断模块,用于判断所述搜索路径中各节点是否处于锁状态;其中,锁状态为在当前并发的写操作中第一节点为发生局部调整子树的根节点时,将所述第一节点设置为锁住的状态;
[0025]写入模块,用于当所述搜索路径中没有节点处于锁状态时,则进行写操作;当所述搜索路径中有节点处于锁状态时,则将写操作阻塞至锁住的节点上,直至所述锁住的节点的锁状态取消。
[0026]可选地,所述判断模块还包括:
[0027]定位单元,用于根据当前并发的写操作的数据写入节点值的大小以及AVL树的特性确定搜索路径,并定位到实际写入的第二节点的位置;
[0028]计算单元,用于计算所述第二节点的父节点的平衡因子,并向上递归计算其他节点的平衡因子,直至计算出平衡因子的值为2或者-2的第一节点为止;
[0029]开启单元,用于开启所述第一节点的锁状态,并根据所述平衡因子的值进行相应的调整;
[0030]释放单元,用于在写操作完成后释放所述第一节点的锁状态。
[0031]可选地,所述开启单元具体用于:
[0032]当所述平衡因子的值为2时:若旋转根的左孩子的平衡因子的值为1,则进行LL型旋转;若旋转根的左孩子的平衡因子的值为-1,则进行LR型旋转;
[0033]当所述平衡因子的值为-2时:若旋转根的右孩子的平衡因子的值为1,则进行RL型旋转;若旋转根的右孩子的平衡因子的值为-1,则进行RR型旋转。
[0034]可选地,所述AVL树为红黑树。
[0035]本发明所提供的基于AVL树的数据写入方法及装置,采用读写锁对数据写入进行并发控制,接收数据的写入请求之后;根据写入节点值的大小以及AVL树的特性确定搜索路径;判断搜索路径中各节点是否处于锁状态;若搜索路径中没有节点处于锁状态,则进行写操作;若搜索路径中有节点处于锁状态,则将写操作阻塞至锁住的节点上,直至锁住的节点的锁状态取消。可见,本发明所提供的基于AVL树的数据写入方法及装置,对AVL树中局部未冲突的写操作允许并行处理,从而提高数据写入的性能。
【附图说明】
[0036]图1为本发明所提供的基于AVL树的数据写入方法的一种【具体实施方式】的流程图;
[0037]图2为本发明所提供的基于AVL树的数据写入装置的一种【具体实施方式】的结构框图。
【具体实施方式】
[0038]本发明的核心是提供一种基于AVL树的数据写入方法及装置,采用读写锁对数据写入进行并发控制。读写锁相比其它几种并发控制机制的优势在于,对于读请求较多的场景,由于读请求并不修改临界资源,因此没有锁机制的保护,也就没有了锁的开销和等待。因此在红黑树中引入读写锁的优势在于,不用考虑并发读的性能瓶颈,只需重点关注并发写的保护策略。
[0039]为了使本技术领域的人员更好地理解本发明方案,下面结合附图和【具体实施方式】对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0040]本发明所提供的基于AVL树的数据写入方法的一种【具体实施方式】的流程图如图1所示,该方法采用读写锁对数据写入进行并发控制,具体包括:
[0041]步骤S101:接收数据的写入请求;
[0042]步骤S102:根据写入节点值的大小以及AVL树的特性确定搜索路径;
[0043]步骤S103:判断所述搜索路径中各节点是否处于锁状态;其中,锁状态为在当前并发的写操作中第一节点为发生局部调整子树的根节点时,将所述第一节点设置为锁住的状态;
[0044]步骤S104:若所述搜索路径中没有节点处于锁状态,则进行写操作;若所述搜索路径中有节点处于锁状态,则将写操作阻塞至锁住的节点上,直至所述锁住的节点的锁状态取消。
[0045]本发明所提供的基于AVL树的数据写入方法,采用读写锁对数据写入进行并发控制,接收数据的写入请求之后;根据写入节点值的大小以及AVL树的特性确定搜索路径;判断搜索路径中各节点是否处于锁状态;若搜索路径中没有节点处于锁状态,则进行写操作;若搜索路径中有节点处于锁状态,则将写操作阻塞至锁住的节点上,直至锁住的节点的锁状态取消。可见,本发明所提供的基于AVL树的数据写入方法,对AVL树中局部未冲突的写操作允许并行处理,从而提高数据写入的性能。
[0046]具体地,在当前并发的写操作中第一节点为发生局部调整子树的根节点时,将所述第一节点设置为锁住的状态包括:
[0047]根据当前并发的写操作的数据写入节点值的大小以及AVL树的特性确定搜索路径,并定位到实际写入的第二节点的位置;
[0048]计算所述第二节点的父节点的平衡因子,并向上递归计算其他节点的平衡因子,直至计算出平衡因子的值为2或者-2的第一节点为止;
[0049]开启所述第一节点的锁状态,并根据所述平衡因子的值进行相应的调整;
[0050]写操作完成后释放所述第一节点的锁状态。
[0051]在本实施例中,所述开启所述第一节点的锁状态,并根据所述平衡因子的值进行相应的调整包括:
[0052]当所述平衡因子的值为2时:若旋转根的左孩子的平衡因子的值为1,则进行LL型旋转;若旋转根的左孩子的平衡因子的值为-1,则进行LR型旋转;
[0053]当所述平衡因子的值为-2时:若旋转根的右孩子的平衡因子的值为1,则进行RL型旋转;若旋转根的右孩子的平衡因子的值为-1,则进行RR型旋转。
[0054]红黑树是AVL树的变种,且内核中使用较多,许多文件系统中都使用到该数据结构,本实施例中使用该数据结构作为说明对象,对其具体实施过程进行进一步说明。
[0055]写入和擦除数据相对应红黑树的操作就是节点的插入和删除。初始的红黑树已经按照其定义调整好自己的平衡状态。在插入和删除节点的过程中,红黑树的平衡状态
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1