CN110825734B - 平衡树的并发更新方法及读写系统 - Google Patents
平衡树的并发更新方法及读写系统 Download PDFInfo
- Publication number
- CN110825734B CN110825734B CN201910954300.6A CN201910954300A CN110825734B CN 110825734 B CN110825734 B CN 110825734B CN 201910954300 A CN201910954300 A CN 201910954300A CN 110825734 B CN110825734 B CN 110825734B
- Authority
- CN
- China
- Prior art keywords
- updating
- tree
- nodes
- node
- balance
- 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
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/2315—Optimistic concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种平衡树的并发更新方法及读写系统,包括:在定位阶段将更新平衡树的请求在叶子节点进行缓存,再将平衡树的结构调整推迟到平衡阶段将任务划分给不同工作线程执行。本发明可以减少冗余的耗时操作和请求以节省CPU资源,充分利用任务并行和数据并行以提升更新平衡树的性能,提升在并发更新情况下平衡树更新的性能和读写并发情况下的平衡树查询性能。
Description
技术领域
本发明涉及数据处理领域,具体地,涉及一种平衡树的并发更新方法及读写系统。
背景技术
平衡树是一种应用广泛的数据结构,它具有每一个节点的子树节点数目大致相同的特性,因此可以充分利用树状图的结构,使得对于节点的访问达到对数级别的复杂度。常见的平衡树有AVL树、红黑树、B树、B+树等。这些树在文件系统索引(如Btrfs)、操作系统(如Linux内核)、数据库索引(如MySQL)等。
由于对于每个更新请求(包括插入键值对、更新对某一键值对的值、删除键值对等),平衡树可能会触发耗时的自平衡操作(如旋转、分裂、合并等)导致平衡树下“写-写并发”和“读-写并发”的并发控制非常复杂。因此,在更新密集的场景下,平衡树的读写性能都会大幅下降。因此现有的系统中,对于需要并发更新场景下的平衡树技术,并发控制方式是其中的重要技术之一。
目前,对于平衡树的并发控制,有两种常见的并发控制方式:基于锁的并发控制和基于批量处理的并发控制。
基于锁的并发控制可以分为粗粒度锁和细粒度锁两种。加上粗粒度锁的平衡树,需要在遍历到的节点上加上相应的读写锁,在逻辑上与单线程平衡树差异不大,也不需要增加过多额外的数据结构。然而,其并发性能很差。在插入密集的情况下,甚至会出现并发更新比单线程更新性能更差的情况,只读操作也会被写操作打扰。与之相比,细粒度的锁需要仔细考虑不同情况下是否需要加锁,减少不必要的加锁,因此其性能要比粗粒度的锁好很多。然而,其实现逻辑复杂、需要增加许多额外的数据结构。
基于批量处理的并发控制,对于平衡树的更新不是立即进行,而是把读写请求进行缓存,等到缓存到一定的数量之后或者超过一定时间后,批量地在平衡树上进行平衡操作。其优点在于,能够在集中处理缓存区中的请求之前,对缓存的请求进行一些预处理(如按照键的大小进行排序),减少冗余操作。从而达到集中处理总时间小于单独处理各个请求的时间总和的效果,也能够减少重复请求的数量(如插入之后删除)。然而,对于平衡树的更新需要在更新树的每一层的时候加上屏障,导致每一层之间会存在阻塞,不能完全并行。此外,对于单个的读写请求而言,其请求时延也会提升。例如专利文献CN 106959928B。
因此,如何充分利用数据并行和任务并行设计一个支持高并发读写的平衡树以大幅提升其读写性能已成为成为平衡树技术中的一个重要问题。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种平衡树的并发更新方法及读写系统。
根据本发明提供的一种平衡树的并发更新方法,包括:在定位阶段将更新平衡树的请求在叶子节点进行缓存,再将平衡树的结构调整推迟到平衡阶段将任务划分给不同工作线程执行。
优选地,所述平衡树的并发更新方法具体包括步骤:
步骤1:在服务端接受客户端发送更新平衡树的请求后进入所述定位阶段;
步骤2:根据所述请求的键定位所述请求应施加的叶子节点,增加中间节点上的请求数目,并将所述请求插入对应的叶子节点的缓存区中;
步骤3:判断距上一次平衡之后,请求数目或者时间是否超过预设的阈值,如果超过阈值,则进入平衡阶段;如果均不超过,则结束本次更新流程;
步骤4:将平衡树从其中一层开始,划分为不相交的子树给每个工作线程负责平衡;
步骤5:每个工作线程从各自负责的子树的最小的叶子节点开始遍历,将叶子节点缓存区中的键值对按照键的大小批量施加在叶子节点上;
步骤6:判断是否有节点需要增加或删除并且未达到子树的最高层,如果有,将需要增删的节点插入工作线程维护的局部缓存区,则执行步骤7;如果没有,则执行步骤8;
步骤7:将工作线程的局部缓存区中的节点更新到对应的父节点进行结构调整,执行步骤6;
步骤8:所有工作线程完成子树平衡后,单线程完成剩余节点的更新操作。
优选地,步骤1中更新平衡树的请求会被转换为一个记录操作类型、键和值的三元组;
操作类型包括插入键值对,更新某一个键的值和删除某一个键值对。
优选地,步骤2中叶子节点的缓存区不需要对键的大小进行排序,并且在定位所经过的中间节点上的计数器加1表示这个中间节点的子树中增加了一个新的更新请求,所述计数器是原子的以避免工作线程竞争;叶子节点的缓存区是无锁并发队列,步骤2允许各个工作线程并发执行。
优选地,步骤3中进入平衡阶段的条件根据用户的使用模式进行设定。
优选地,步骤4中划分的方式包括:根据这一层节点的个数进行平均划分,或在步骤2中统计每颗子树中插入键值对的数目,使用贪心算法进行划分,使得每个工作线程下插入的键值对数目的差值在预设范围内。
优选地,步骤5中在叶子节点中施加请求时,先给请求按照键的大小进行排序,并且更新时满足平衡树本身的约束条件进行结构调整。
优选地,步骤6中每个工作线程会维护各自的缓存区以避免线程之间的竞争,所述缓存区中记录会引发结构调整的节点、所述节点的父节点以及能够表示所述节点的键;
插入缓存区时,不需要按照键的大小进行排序;与叶子节点不同,不需要每个中间节点维护缓存区,只需要每个线程维护一个缓存区。
优选地,步骤7中在调整父节点之前给缓存区中的节点按照键的大小进行排序,以便给同一个父节点批量地进行一次调整。
根据本发明提供的一种读写系统,采用上述的平衡树的并发更新方法进行数据读写。
与现有技术相比,本发明具有如下的有益效果:
1、采用批量更新,与单独更新相比,能够减少平衡过程中的冗余操作和冗余请求,以节省CPU资源。
2、采用二阶段平衡,充分利用平衡树插入的任务并行(第一阶段)和数据并行(第二阶段),减少并发更新时的“写-写冲突”,增加并发性、提升并行更新平衡树的性能。
3、平衡树的结构仍旧保持不变,和普通平衡树相比,只读操作的性能能够基本保持不变。并且可以减少“读-写冲突”,在读写并发的情况下,可以提升查询平衡树的性能。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明的流程图;
图2为本发明实施例的示例图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
如图1所示,为本发明适用于平衡树的并发更新方法的具体流程,完成请求键值对的定位和树的平衡。如图2所示,是以四个工作线程和B+树为例的示意图。以下结合图1对平衡树的更新步骤进行详细描述:
在步骤S1中,服务端接收对平衡树更新的请求。平衡树的更新请求将会转换成一个三元组,三元组的元素分别表示更新类型(插入键值对、更新键值对、删除键值对)、对应的键和值(删除时不需要值),如本示例中的(I,70,v16),(U,210,v27)和(D,110,-),同时将经过路径上的节点的原子计数器加1,表示这个节点的子树中增加了请求。然后执行步骤S2;
在步骤S2中,将请求根据键的大小定位对应的叶子节点,再将请求三元组插入该叶子节点的缓存区中,如本示例中将(I,70,v16),(U,210,v27)和(D,110,-)分别插入到对应区间为(40,80],(150,220]和(80,150]的叶子节点中。该叶子缓存区使用无锁并发队列实现,而且不需要将请求按照键的大小进行排序,然后执行步骤S3;
在步骤S3中,判断是否达到平衡树进入平衡阶段的条件,如果达到,则将会进入平衡阶段,否则结束本次请求。本示例中,进入平衡阶段的条件是距离上一次平衡的时间间隔超过30毫秒,如果时间间隔超过30毫秒,则执行步骤S4,否则结束此次流程;
在步骤S4中,层1开始根据每个中间节点的子树请求的数量,使用贪心算法进行划分子树,子树的数目和工作线程数相等,为4个。划分的子树为小于265子树为子树1,(265,435]为子树2,(435,500]为子树3,大于500为子树4,分别分配给4个工作线程,然后执行步骤S5;
在步骤S5中,每个工作线程首先定位到自己管理的子树中最小的叶子节点,本示例中的工作线程1将会定位到小于40的叶子节点,然后通过叶子节点之间的链表遍历叶子节点,将叶子节点缓存区中的请求按照键大小的顺序排序,然后施加在叶子节点上,此时可能会有新的节点由于平衡树的分裂而产生,然后执行步骤S6;
在步骤S6中,判断是否有新的需要调整产生并且未到达了子树的顶层,如果此条件成立,则执行步骤S7,如果此条件不成立(即没有新的节点产生或者已经达到了子树的顶层),则执行步骤S9;
在步骤S7中,将需要调整的节点(将叶子节点或中间节点统称为节点)和这个节点对应的键,插入每个工作线程维护的缓存区中。如本示例中,将会产生新的叶子节点,将这些叶子节点和叶子中的最大键插入线程缓存区中,然后执行步骤S8;
在步骤S8中,将线程缓存区中所有的节点插入对应的父节点中,如本示例中(40,80]这个叶子节点会因为插入新的值而分裂出新的叶子,插入小于265的中间节点。同时,可能因为中间节点的插入导致上一层节点会分裂出新的节点。然后执行步骤S6;
在步骤S9中,等所有工作线程完成子树的平衡之后,单线程收集所有线程缓存区中还剩余的节点并且继续平衡剩余的层,本示例中会有单线程对层0进行更新、分裂以及增加新的层。
本发明还提供的一种读写系统,采用上述的平衡树的并发更新方法进行数据读写。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (9)
1.一种平衡树的并发更新方法,其特征在于,包括:在定位阶段将更新平衡树的请求在叶子节点进行缓存,再将平衡树的结构调整推迟到平衡阶段将任务划分给不同工作线程执行;
所述平衡树的并发更新方法具体包括步骤:
步骤1:在服务端接受客户端发送更新平衡树的请求后进入所述定位阶段;
步骤2:根据所述请求的键定位所述请求应施加的叶子节点,增加中间节点上的请求数目,并将所述请求插入对应的叶子节点的缓存区中;
步骤3:判断距上一次平衡之后,请求数目或者时间是否超过预设的阈值,如果超过阈值,则进入平衡阶段;如果均不超过,则结束本次更新流程;
步骤4:将平衡树从其中一层开始,划分为不相交的子树给每个工作线程负责平衡;
步骤5:每个工作线程从各自负责的子树的最小的叶子节点开始遍历,将叶子节点缓存区中的键值对按照键的大小批量施加在叶子节点上;
步骤6:判断是否有节点需要增加或删除并且未达到子树的最高层,如果有,将需要增删的节点插入工作线程维护的局部缓存区,则执行步骤7;如果没有,则执行步骤8;
步骤7:将工作线程的局部缓存区中的节点更新到对应的父节点进行结构调整,执行步骤6;
步骤8:所有工作线程完成子树平衡后,单线程完成剩余节点的更新操作。
2.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤1中更新平衡树的请求会被转换为一个记录操作类型、键和值的三元组;
操作类型包括插入键值对,更新某一个键的值和删除某一个键值对。
3.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤2中叶子节点的缓存区不需要对键的大小进行排序,并且在定位所经过的中间节点上的计数器加1表示这个中间节点的子树中增加了一个新的更新请求,所述计数器是原子的以避免工作线程竞争;叶子节点的缓存区是无锁并发队列,步骤2允许各个工作线程并发执行。
4.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤3中进入平衡阶段的条件根据用户的使用模式进行设定。
5.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤4中划分的方式包括:根据这一层节点的个数进行平均划分,或在步骤2中统计每颗子树中插入键值对的数目,使用贪心算法进行划分,使得每个工作线程下插入的键值对数目的差值在预设范围内。
6.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤5中在叶子节点中施加请求时,先给请求按照键的大小进行排序,并且更新时满足平衡树本身的约束条件进行结构调整。
7.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤6中每个工作线程会维护各自的缓存区以避免线程之间的竞争,所述缓存区中记录会引发结构调整的节点、所述节点的父节点以及能够表示所述节点的键;
插入缓存区时,不需要按照键的大小进行排序;与叶子节点不同,不需要每个中间节点维护缓存区,只需要每个线程维护一个缓存区。
8.根据权利要求1所述的平衡树的并发更新方法,其特征在于,步骤7中在调整父节点之前给缓存区中的节点按照键的大小进行排序,以便给同一个父节点批量地进行一次调整。
9.一种读写系统,其特征在于,采用权利要求1至8任意一项所述的平衡树的并发更新方法进行数据读写。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910954300.6A CN110825734B (zh) | 2019-10-09 | 2019-10-09 | 平衡树的并发更新方法及读写系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910954300.6A CN110825734B (zh) | 2019-10-09 | 2019-10-09 | 平衡树的并发更新方法及读写系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110825734A CN110825734A (zh) | 2020-02-21 |
CN110825734B true CN110825734B (zh) | 2023-04-28 |
Family
ID=69548814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910954300.6A Active CN110825734B (zh) | 2019-10-09 | 2019-10-09 | 平衡树的并发更新方法及读写系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110825734B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111881140A (zh) * | 2020-07-29 | 2020-11-03 | 苏州浪潮智能科技有限公司 | 一种数据结构树校验方法、装置、设备及存储介质 |
CN112764783B (zh) * | 2021-02-02 | 2022-04-29 | 杭州雅观科技有限公司 | 一种智慧家居设备的升级方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408900A (zh) * | 2008-11-24 | 2009-04-15 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
CN107766478A (zh) * | 2017-10-11 | 2018-03-06 | 复旦大学 | 一种面向高竞争情景的并发索引结构的设计方法 |
CN108572865A (zh) * | 2018-04-04 | 2018-09-25 | 国家计算机网络与信息安全管理中心 | 一种任务队列处理方法和装置 |
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
CN109582678A (zh) * | 2018-12-03 | 2019-04-05 | 东北大学 | 基于叶子节点的多粒度分布式读写锁的r树索引优化方法 |
-
2019
- 2019-10-09 CN CN201910954300.6A patent/CN110825734B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408900A (zh) * | 2008-11-24 | 2009-04-15 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
CN107766478A (zh) * | 2017-10-11 | 2018-03-06 | 复旦大学 | 一种面向高竞争情景的并发索引结构的设计方法 |
CN108572865A (zh) * | 2018-04-04 | 2018-09-25 | 国家计算机网络与信息安全管理中心 | 一种任务队列处理方法和装置 |
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
CN109582678A (zh) * | 2018-12-03 | 2019-04-05 | 东北大学 | 基于叶子节点的多粒度分布式读写锁的r树索引优化方法 |
Non-Patent Citations (3)
Title |
---|
吴建宇等.面向多线程应用的片上多核处理器私有LLC优化.《计算机工程》.2015,全文. * |
杨良怀等.一种大数据流内存B+树构建方法.《计算机科学》.2018,全文. * |
陈榕等.基于图查询系统的图计算引擎.《大数据》.2019,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110825734A (zh) | 2020-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Faleiro et al. | Rethinking serializable multiversion concurrency control | |
Yu et al. | Tictoc: Time traveling optimistic concurrency control | |
US8250047B2 (en) | Hybrid multi-threaded access to data structures using hazard pointers for reads and locks for updates | |
US9619430B2 (en) | Active non-volatile memory post-processing | |
US4716528A (en) | Method for managing lock escalation in a multiprocessing, multiprogramming environment | |
US8776077B2 (en) | Method for multithreading an application using partitioning to allocate work to threads | |
US20200293532A1 (en) | Database engine | |
Qadah et al. | Quecc: A queue-oriented, control-free concurrency architecture | |
US20070226431A1 (en) | Read-copy-update (RCU) operations with reduced memory barrier usage | |
Bernstein et al. | Optimizing optimistic concurrency control for tree-structured, log-structured databases | |
US20170293530A1 (en) | Providing snapshot isolation to a database management system | |
AU2016244128A1 (en) | Processing database transactions in a distributed computing system | |
US7293011B1 (en) | TQ distribution that increases parallism by distributing one slave to a particular data block | |
JP6188607B2 (ja) | インデクスツリーの探索方法及び計算機 | |
CN110825734B (zh) | 平衡树的并发更新方法及读写系统 | |
CN112306699B (zh) | 访问临界资源的方法及装置、计算机设备及可读存储介质 | |
CN108459913B (zh) | 数据并行处理方法、装置及服务器 | |
Ren et al. | VLL: a lock manager redesign for main memory database systems | |
CN110609807B (zh) | 用于删除快照数据的方法、设备和计算机可读存储介质 | |
CN113010533B (zh) | 基于加锁限制的数据库访问方法、系统、终端及存储介质 | |
Guo et al. | Adaptive optimistic concurrency control for heterogeneous workloads | |
CN110377614B (zh) | 一种分布式环境下的订单处理锁系统 | |
US7412465B2 (en) | Method for append mode insertion of rows into tables in database management systems | |
CN110546609A (zh) | 硬件事务内存(htm)辅助数据库事务 | |
CN115629822B (zh) | 一种基于多核处理器的并发事务处理方法及其系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |