[发明专利]平衡树的并发更新方法及读写系统有效
申请号: | 201910954300.6 | 申请日: | 2019-10-09 |
公开(公告)号: | CN110825734B | 公开(公告)日: | 2023-04-28 |
发明(设计)人: | 陈榕;沈斯杰;陈海波;臧斌宇 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23;G06F9/50 |
代理公司: | 上海汉声知识产权代理有限公司 31236 | 代理人: | 胡晶 |
地址: | 200240 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 平衡 并发 更新 方法 读写 系统 | ||
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任意一项所述的平衡树的并发更新方法进行数据读写。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910954300.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:牛磺酸精品母液的净化方法
- 下一篇:一种家庭用便于使用及收纳的血压仪