数据存储系统以及用于提供数据存储系统的方法技术方案

技术编号:24597266 阅读:55 留言:0更新日期:2020-06-21 03:46
本发明专利技术提供一种数据存储系统(100),具有数据存储器(104)和数据控制器(101),用于实现具有多个节点(201、203、205)的前缀树(200),其中,所述数据控制器(101)用于为每个内部节点(203)提供共同节点前缀,所述共同节点前缀(300)包括共同前缀(301)、前缀长度(302)和节点深度(303);其中,所述节点深度(303)是从键起始到所述共同前缀(301)起始的绝对偏移量。

Data storage system and method for providing data storage system

【技术实现步骤摘要】
【国外来华专利技术】数据存储系统以及用于提供数据存储系统的方法
本专利技术涉及一种数据存储系统、一种用于提供数据存储系统的方法以及一种具有程序代码的计算机程序。具体地,本专利技术涉及用于数据查找的数据结构,更具体地,涉及一种前缀树数据结构,用于利用提供读取时的线性可扩展性的写入器与阅读器之间的新同步方法,定位存储在数据库中的数据。
技术介绍
数十年来,人们已经了解不同的基于树的索引数据结构。尽管它们的设计不同,但其中许多都具有某些共同的特征,例如单个根节点、相互连接形成树的内部节点以及最后一层节点(称为叶)。通常,有效负载数据保存在树叶内,内部节点存储一些在遍历查找期间进行选择的不同属性值。在输入键或搜索键后,遍历树。搜索根据存储在节点中的属性值与键之间的匹配遍历整个树。搜索从根节点(即,父节点)开始并分支遍及子节点,子节点各自从属一个父节点。基数树是基于树的索引数据结构的特殊情况。并非将属性值保存在内部节点内部,而是将该信息保存在节点互连内。因此,在基数树遍历期间,不需要逐一查看子节点并比较搜索的属性值,只需在存在时选择与属性值索引对应的子节点即可。尽管这类基数树明显比较简单且遍历算法简洁,但由于内存开销很大,因此并没有广泛用于通用数据库或存储系统索引结构。实际上,每个基数树节点都需要保存整个范围的可能属性值,即使实际上只有很少的这类子节点存在。上文暗示了内存消耗呈指数增长。近年来,基数树准备用于一般用途。最重要的修改在于提供了可变大小的节点。这意味着,内部节点的容量不同。存在几种预先设定的容量,在树修改期间根据需要选择不同的容量。这种方法通常称为水平压缩。另一个有价值的改进在于跳过了所有仅具有单个子节点的内部节点,从而需要将共同属性保存在中间节点内部,并将搜索属性存储在相应的叶子内。这种方法通常称为垂直压缩或键序跳过。这两种改进都直接带来了更精确、更适度的内存消耗。特别地,只有16个子节点的有限容量的内部节点具有共同前缀,可减少至少三个各自只有一个子节点的中间节点。另外,相应的叶子节点包含其余的搜索属性。基数树的另一个已知问题在于并发访问或同步方法。传统上,同步技术利用锁使阅读器等待直到修改完成,或者检测是否有更改,然后重启阅读器。这类解决方案简单,但很难扩展。更先进的技术允许访问隐藏未决修改的节点并且无等待操作。然而,它们需要复杂的数据结构,而且通常更消耗内存且实现起来更复杂。可以考虑的另一种选择是使用硬件事务内存。然而,目前在适当的硬件支持方面仍然存在某些阻碍。原始基数树设计意味着需要大量内存,因此这类树的使用非常有限。一种针对内存使用率优化的新方法称为自适应基数树(AdaptiveRadixTree,ART)。ART综合了已知的树压缩技术。内部节点上可以有多个称为共同节点前缀的符号,而不仅仅有一个符号,这种方法称为垂直压缩,用于减少树层次数量。除了这种垂直压缩之外,一种经过充分证明的附加方法是所谓的键序跳过,当存储在叶子节点键中的其余部分是唯一时,应用该键序跳过以减少内部节点的数量。据观察,单次修改最多影响基数树的两个节点:修改的节点本身和其父节点。因此,有几种已知的并发访问同步机制,利用这种观察来有效应用于一般的基数树。锁耦合是一种用于同步B树的标准方法,也可以轻易地应用于基数树。其思想是在树遍历期间每次最多保持两个锁。从根节点开始,每一步向下一层,都会对相应子节点获取锁且必须释放父锁。锁耦合算法的问题在于树的第一层上争用高。每个参与者从根节点开始获取锁。因此,争用一定高且下一层次上也有很大概率争用。更先进的技术称为乐观锁耦合,它是前述方法的增强版本,性能更好。并非在每个步骤都获取锁来防止对节点的修改,而是参与者都假设在遍历树期间没有发生并发修改。使用版本计数器之后检测修改且如果需要重启操作。所述乐观锁耦合显示出更好的性能,因为锁是按需获取的,树节点中的总争用不高。然而,它的主要问题在于锁的粗粒度性质。几个树节点在其父锁期间被锁定,但没有针对它们的修改。例如,一个参与者获取树节点锁,这意味着其他参与者在释放该锁之前由于锁耦合不能锁定该节点的子节点。读优化写入排除(Read-OptimizedWriteExclusion,ROWEX)方法显示出甚至更好的性能。对内部节点扩展了层字段,该层字段只在创建节点时设置一次,指示在该节点层键序列的总长度。层字段在后续步骤中不会更改。假设对共同前缀进行原子修改,并且进行节点参照更新;则阅读器可以在无锁或重试的情况下无等待操作。然而,写入器需要执行额外的操作,使基数树对阅读器来说处于完整和正确的状态。对于写入器而言,ROWEX使用与乐观锁耦合类似的锁定方法。每个写入器保持两个排他锁:一个针对待修改的节点,另一个针对父节点。主要的区别在于,写入器执行额外的动作以使阅读器在没有锁的情况下工作。这些额外动作大多是对树节点字段的原子更新,这些原子更新对于阅读器正确读取树很重要。写时复制(CopyonWrite,COW)方法通常应用于无锁算法。主要思想是创建所修改节点的隐藏副本,然后对该副本引入所有更改,并使其可见。传统的锁定、比较和交换操作以及版本计数器都可以用于实现COW。COW方法对于面向读的工作负载是有益的,例如,工作负载中95%的读操作和5%的写操作。写入器在准备树节点复制期间检测更改,并重启操作,以重做副本。这些额外的内存复制和分配也会导致写性能不佳。另一方面,COW可以与锁一起使用,以避免重启。在这种情况下,写操作的可扩展性相当低。另外,对于写入速度较慢但读取速度接近DRAM的非易失性存储器,额外复制需要更多的时间。硬件事务内存(HardwareTransactionalMemory,HTM)是一种硬件机制,用于检测冲突并撤消对共享数据的任何更改。这种硬件的目标是通过强制实现原子性、一致性和隔离来透明地支持标记为事务的代码区域。在此场景中,所有参与者始终观察到树节点的一致状态,因为修改只在事务内执行,因此只有在成功提交之后,才对所有参与者可见。当提交操作失败时,由于节点已经被同时更改,因此需要重启修改。HTM是一种非常特殊的硬件,尚还没有得到很好的支持,如今在生产中使用它的机会不多。软件事务内存(SoftwareTransactionalMemory,STM)是在没有HTM支持的情况下在机器上对HTM的模拟。然而,最佳地实现STM需要将比较和交换(DCAS)指令支持加倍,否则这种方法的实现是复杂且异常缓慢的。不幸的是,DCAS操作仅由最新型处理器支持,并不广泛可用。此外,在实践中,与基于细粒度锁的系统相比,STM系统的性能也受到了影响,这主要归因于与维护日志相关的开销和提交事务所花费的时间。为了正确地遍历树,节点和互连的阅读器与写入器之间的同步是必不可少的。通常,阅读器在没有正在进行的修改对其可见时访问节点。因此,节点表示完整和正确的树状态。传统上,前缀树或基数树的同步技术利用锁使阅读器等待直到完成修改,或者检测是否存在更改并重启。这类解决方案简单,但扩展效率较低。先进的技术允许读取隐藏未决修改的节点并且本文档来自技高网...

【技术保护点】
1.一种数据存储系统(100),其特征在于,具有数据存储器(104)和数据控制器(101),用于实现具有多个节点(201、203、205)的前缀树(200),其中/n所述数据控制器(101)用于为每个内部节点(203)提供共同节点前缀(300),其中,所述共同节点前缀(300)包括共同前缀(301)、前缀长度(302)和节点深度(303);其中,所述节点深度(303)为从键起始到所述共同前缀(301)起始的绝对偏移量。/n

【技术特征摘要】
【国外来华专利技术】1.一种数据存储系统(100),其特征在于,具有数据存储器(104)和数据控制器(101),用于实现具有多个节点(201、203、205)的前缀树(200),其中
所述数据控制器(101)用于为每个内部节点(203)提供共同节点前缀(300),其中,所述共同节点前缀(300)包括共同前缀(301)、前缀长度(302)和节点深度(303);其中,所述节点深度(303)为从键起始到所述共同前缀(301)起始的绝对偏移量。


2.根据权利要求1所述的数据存储系统(100),其特征在于,
所述数据控制器(101)用于在所述前缀树(200)中发起写操作,从而为写操作下的内部节点(203)设置节点深度(303);用于发起包括所述写操作下的内部节点(203)的并发读操作,从而使用所述设置的节点深度(303)、所述共同前缀(301)和所述前缀长度(302)进行树遍历。


3.根据权利要求1或2所述的数据存储系统(100),其特征在于,
所述数据控制器(101)用于:发起对内部节点(203)的写操作,以为所述写操作下的内部节点(203)提供辅助数据结构(409);为所述辅助数据结构(409)提供共同节点前缀(300),其中,所述共同节点前缀(300)反映所述写操作的变化。


4.根据权利要求3所述的数据存储系统(100),其特征在于,
所述数据控制器(101)用于发起读操作,其中,所述读操作与所述写操作并发且包括所述写操作下的内部节点(203),使得所述读操作读取所述写操作下的内部节点(203)和所述辅助数据结构(409)。


5.根据权利要求3或4所述的数据存储系统(100),其特征在于,
所述数据控制器(101)用于在完成所述写操作之后,替换所述辅助数据结构(409),其中,所述共同节点前缀(300)反映所述写操作下的内部节点(203)的所述写操作的变化。


6.根据权利要求3至5中任一项所述的数据存储系统(100),其特征在于,
所述数据控制器(101)用于设置所述辅助数据结构(409)的所述节点深度(303)和/或所述前缀长度(302),使得所述辅助数据结构(409)的所述节点深度(303)和所述前缀长度(302)之和等于所述写操作下的内部节点(203)的所述辅助数据结构(409)的所述节点深度(303)与所述前缀长度(302)之和。


7.根据...

【专利技术属性】
技术研发人员:阿莱克桑德·亚历山大罗维奇·西马克谢尔盖·罗曼诺维奇·巴希罗夫张学仓
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

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

1