买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】基于叶子节点的多粒度分布式读写锁的R树索引优化方法_东北大学_201811463096.X 

申请/专利权人:东北大学

申请日:2018-12-03

公开(公告)日:2021-05-04

公开(公告)号:CN109582678B

主分类号:G06F16/22(20190101)

分类号:G06F16/22(20190101)

优先权:

专利状态码:有效-授权

法律状态:2021.05.04#授权;2019.04.30#实质审查的生效;2019.04.05#公开

摘要:本发明提供一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法。在叶子节点加锁后,锁等待队列的队首元素获得锁,进行更新操作导致R树索引结构变化时,锁等待队列中的其他元素就不能在叶子节点继续获得锁,将这些锁的节点临时删除,使其从根节点重新执行一遍查询操作,保证了结果的正确性。在叶子节点建立了读写锁,降低了锁的粒度,支持较高的并行度,提高了查询和更新等操作的执行效率。

主权项:1.一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法,其特征在于,包括如下步骤第一步,基于HBase的R树索引通过execute函数取得具体请求信息,根据请求信息获得要操作的具体网格ID,找到网格所在的R树叶子节点;基于HBase的R树索引结构,首先将整个空间区域进行规则划分,划分成大小相同的网格,将移动对象存储到网格的索引项里,建立起一个底层的网格索引;然后,用R树索引网格,R树的叶子节点存储网格的ID;第二步,对该叶子节点加锁,加锁过程中设置节点数据包括:MBR和节点容量,保存其请求操作的具体信息;加锁操是采用Zookeeper分布式读写锁在R树节点进行加锁,Zookeeper的节点类型是znode,一个znode表示一个锁,加锁就是通过创建znode的方式实现;这个节点也叫做Zookeeper的锁队列节点;创建znode节点时设置顺序标识,znode节点名称后会附加一个值,顺序号是一个单调递增的计数器;znode节点组成,Zookeeper的锁队列,按顺序号依次等待执行;第三步,Zookeeper锁队列中的序号最小的znode节点获得锁,并进行相关更新请求操作,更新请求操作过程中,同时会有其他并发的请求操作在等待锁;第四步,对并发操作的处理,遍历Zookeeper锁队列中的等待进程,先获取znode节点中的数据信息,然后释放等待锁,让其从操作请求代码的入口重新执行一遍具体的操作请求;第五步,释放叶子节点的锁。

全文数据:基于叶子节点的多粒度分布式读写锁的R树索引优化方法技术领域本发明涉及数据库索引领域,具体的涉及一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法。背景技术基于位置服务LocationBasedService,LBS为代表的移动应用已经步入移动大数据时代,成为人们日常生活的重要组成部分,滴滴打车、高德地图,日益方便着人们的生活,提高了人们的生活质量。随着移动应用规模的扩大,移动服务中的查询也呈现鲜明的流式特征。现有的系统无法有效地处理在扩展性、实时性、可靠性及性能方面所面临的挑战。移动大数据时代的数据处理不仅需要存储与处理能力更强更灵活的计算平台,还需要依托于计算平台的相关移动服务的处理与优化技术。在计算平台的处理与优化技术中,空间移动对象数据库起着重要的作用,它的核心功能旨在提供高效的查询与更新处理,与高性能的索引结构密切相关,因此,移动对象的查询处理和索引技术是移动对象数据库设计的核心部分。在多连续范围查询系统中,针对网格索引中空网格也要访问造成额外开销的问题,提出了基于HBase的支持频繁更新的节点重组R树的索引结构。将空间区域映射在平面上,进而划分为网格,然后将包含有移动对象的网格插入到R树中。针对这种双层索引结构,在移动对象位置更新时,会出现性能以及读写锁之间、写锁和写锁之间的冲突问题。为了解决读写锁之间、写锁和写锁之间的冲突问题,采用Zookeeper分布式读写锁在R树root节点加锁来解决多个进程对共享资源的访问。但是出现锁的阻塞等待和并发度低的问题,尤其是在查询和更新比较频繁、以及R树层级比较高的情况下。因为在使用R树索引时,是对R树root节点加锁,独占整个R树,导致很多不受更新影响的节点也不可以并发访问,降低了并行性,造成了很大的资源浪费。如图1所示,如果有一个查询是对20号网格内的数据,有一个更新是对63号网格内的数据,两个区域并不相交,在进行查询操作时,更新操作等待root锁,由此会造成资源利用率低下。发明内容本发明为了解决现有技术的不足,提供一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法。在叶子节点加锁后,锁等待队列的队首元素获得锁,进行更新操作导致R树索引结构变化时,锁等待队列中的其他元素就不能在叶子节点继续获得锁,将这些锁的节点临时删除,使其从root节点重新执行一遍查询操作,保证了结果的正确性。本发明采用的技术方案:基于叶子节点的多粒度分布式读写锁的R树索引优化方法,包括如下步骤:第一步,基于HBase的R树索引通过execute函数取得具体请求信息,根据请求信息获得要操作的具体网格ID,找到网格所在的R树叶子节点;基于HBase的R树索引结构如图2所示,首先将整个空间区域进行规则划分,划分成大小相同的网格,将移动对象存储到网格的索引项里,建立起一个底层的网格索引;然后,用R树索引网格,R树的叶子节点存储网格的ID。这样,就建立起了一个底层为网格索引,上层为R树索引的双层索引结构。第二步,对该叶子节点加锁,加锁过程中设置节点数据包括:MBR和节点容量,保存其请求操作的具体信息;Zookeeper实现的分布式读写锁如图4图5所示。所述的加锁操是采用Zookeeper分布式读写锁在R树节点进行加锁,Zookeeper的节点类型是znode,一个znode表示一个锁,加锁就是通过创建znode的方式实现;这个节点也叫做Zookeeper的锁队列节点;创建znode节点时设置顺序标识,znode节点名称后会附加一个值,顺序号是一个单调递增的计数器;znode节点组成,Zookeeper的锁队列,按顺序号依次等待执行。第三步,Zookeeper锁队列中的序号最小的znode节点获得锁,并进行相关更新请求操作,更新请求操作过程中,同时会有其他并发的请求操作在等待锁。第四步,对并发操作的处理,遍历Zookeeper锁队列中的等待进程,先获取znode节点中的数据信息,然后释放等待锁,让其从操作请求代码的入口重新执行一遍具体的操作请求;第五步,释放叶子节点的锁。上述的R树是一种与B树类似的空间高度平衡树。这种空间索引是动态的,不需要定期重建。基于其高效的特性,很多空间问题都可以使用R树索引来解决,大大提高了效率。R树运用了空间分割的思想,使用一种称为MBR最小边界矩形的方法,从叶子结点开始,用矩形将空间框起来,逐层向上,框住的空间依次增大,以此对空间进行分割R树的非叶子节点包含指向子节点的指针,称之为child-pointer,其MBR表示能框住其子节点的最小N维矩形;R树的叶子节点包含指向空间对象的条目,称之为tuple-identifier,其MBR表示能框住其tuple所对应的空间对象的最小N维矩形。如图3所示。上述HBase即HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase是非关系型数据库,其设计目标是用来解决关系数据库在处理海量数据时的局限性。HBase支持高并发的高速读写访问。因为数据是被水平切分并分布到多台服务器上,所以在大量用户访问时,访问负载也被均衡的分配到了不同的服务器上,虽然每个服务器的服务能力有限,但是大规模集群可以提供极高的性能。HBase集群通过Zookeeper来协调主节点和从节点。上述Zookeeper是一个分布式协调服务,可以为用户的分布式应用程序提供协调服务。在分布式系统中,可以使用顺序号为所有的事件进行全局排序,那么客户端就可以通过顺序号推断事件的执行顺序。如上所述,把Zookeeper上的每一个znode节点看作是一个锁,获得锁就是通过创建znode的方式来实现。Zookeeper的数据结构是一棵节点树,存储了整棵树的内容,包括所有的节点数据、节点路径及其ACL信息等,Zookeeper会定时将这个数据刷新存储到磁盘上。上述请求操作是移动对象发起的利用R树索引对HBase数据库的操作,包括移动对象的移动、查询移动对象、插入移动对象、删除移动对象。本发明一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法,在叶子节点建立了读写锁,降低了锁的粒度,支持较高的并行度,提高了查询和更新等操作的执行效率。此外,随着查询范围的增大,以及移动对象密度的增大,查询的索引节点数目增多,也会导致查询效率的降低。但整体效果优于R树root节点的分布式读写锁。附图说明图1是树root节点分布式锁示意图。图2是索引结构示意图。图3是MBR示意图。图4是Zookeeper写锁示意图。图5是Zookeeper读锁示意图。图6本发明的R树叶子节点分布式锁示意图。具体实施方式为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实例,对本发明做进一步详细说明。这些实例仅仅是说明性的,而并非对本发明的限制。面向R树叶子节点分布式读写锁的具体的实施步骤:步骤一:先是在基于HBase的R树索引中进行操作取得具体的请求信息,根据信息获得要操作的具体网格id,找到网格所在的R树叶子节点。输入范围查询和更新的信息,包括id和左下、右上坐标信息。然后获取移动对象的ID和经纬度然后根据移动对象的经纬度计算所在网格cellID;步骤二:如图6所示,虚线椭圆形内是对叶子节点加锁,右上角方框内是Zookeeper锁队列。都在请求等待叶子节点的锁,且保留着例如‘p1移动至51’,‘查询p1’,‘插入p2’等具体操作信息。步骤三:如图6所示,序号最小的znode获得锁,执行位置更新操作。更新过程中,同时会有其他并发的操作在等待锁。移动对象p1由原来所在的64号网格移动到54号网格,由此会引起叶子节点、上层父节点甚至root节点的分裂,在此过程中,其他操作不能继续等待叶子节点的锁,比如锁队列中第二个操作时‘查询移动对象p1’,那么它这时候是查不到的。因为它保存的R树索引节点指向的还是之前54号网格的,而不是最新的54号网格。步骤四:遍历Zookeeper锁队列中的这些等待进程,先获取znode节点中的数据信息,然后释放等待锁,让其从操作请求代码的入口重新执行一遍具体的操作请求。如图6所示,从2号等待节点中获取请求数据信息,然后让其从R树root节点重新向下执行查询,就可以得到正确的p1结果。同理,锁等待队列中的3号节点是插入移动对象p2,由于3号操作此前执行的也并不是最新的索引结构,此时插入,会引起R树孩子和叶子节点结构的错乱,所以还是应该从root节点向下遍历最新的索引结构,然后再执行操作。步骤五:释放叶子节点上的锁。通过本发明,既降低了节点频繁存储更新造成的磁盘访问的代价,也减少了锁的等待时间。同时基于Zookeeper节点数据存储特性,节点锁保存了具体信息,保证了操作结果的正确性。通过测试,本发明和之前的方法相比,具有广泛的使用价值和较高的稳定性。

权利要求:1.一种基于叶子节点的多粒度分布式读写锁的R树索引优化方法,其特征在于,包括如下步骤第一步,基于HBase的R树索引通过execute函数取得具体请求信息,根据请求信息获得要操作的具体网格ID,找到网格所在的R树叶子节点;基于HBase的R树索引结构,首先将整个空间区域进行规则划分,划分成大小相同的网格,将移动对象存储到网格的索引项里,建立起一个底层的网格索引;然后,用R树索引网格,R树的叶子节点存储网格的ID;第二步,对该叶子节点加锁,加锁过程中设置节点数据包括:MBR和节点容量,保存其请求操作的具体信息;所述的加锁操是采用Zookeeper分布式读写锁在R树节点进行加锁,Zookeeper的节点类型是znode,一个znode表示一个锁,加锁就是通过创建znode的方式实现;这个节点也叫做Zookeeper的锁队列节点;创建znode节点时设置顺序标识,znode节点名称后会附加一个值,顺序号是一个单调递增的计数器;znode节点组成,Zookeeper的锁队列,按顺序号依次等待执行;第三步,Zookeeper锁队列中的序号最小的znode节点获得锁,并进行相关更新请求操作,更新请求操作过程中,同时会有其他并发的请求操作在等待锁;第四步,对并发操作的处理,遍历Zookeeper锁队列中的等待进程,先获取znode节点中的数据信息,然后释放等待锁,让其从操作请求代码的入口重新执行一遍具体的操作请求;第五步,释放叶子节点的锁。2.根据权利要求1所述的基于叶子节点的多粒度分布式读写锁的R树索引优化方法,其特征在于,R树的非叶子节点包含指向子节点的指针,称之为child-pointer,其MBR表示能框住其子节点的最小N维矩形;R树的叶子节点包含指向空间对象的条目,称之为tuple-identifier,其MBR表示能框住其tuple所对应的空间对象的最小N维矩形。3.根据权利要求1所述的基于叶子节点的多粒度分布式读写锁的R树索引优化方法,其特征在于,所述请求操作是移动对象发起的利用R树索引对HBase数据库的操作,包括移动对象的移动、查询移动对象、插入移动对象、删除移动对象。

百度查询: 东北大学 基于叶子节点的多粒度分布式读写锁的R树索引优化方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。