分布式存储系统的数据更新方法及服务器的制造方法

文档序号:7790390阅读:239来源:国知局
分布式存储系统的数据更新方法及服务器的制造方法
【专利摘要】本发明实施例提供分布式键值对Key-Value存储系统的数据更新方法,通过将需要更新的节点、父节点、上级节点、根节点复制至Key-Value存储系统的缓冲层中,并修改需要更新的节点、父节点和上级节点的键值及内容,修改根节点的内容,使得这些节点有别于存储层中原来的节点。本发明方法先将需要更新的节点、父节点、上级节点存储到存储层中,再将根节点存储到键值对系统。由于缓冲层中的需更新的节点先于缓冲层中的根节点存储到存储层,因此,在需更新的节点在存储过程中发生的读操作将无法读取到需更新的节点,从而避免读取到脏数据。本发明还提供了相应的读取索引节点的方法及服务器。
【专利说明】分布式存储系统的数据更新方法及服务器
【技术领域】
[0001]本发明涉及数据处理领域,特别是涉及处理索引节点的方法及服务器。
【背景技术】
[0002]随着电子通信技术的发展,电子数据的存储量不断增大,用户对于数据存储系统的容量要求也不断提高。作为具有具备高可用性、高可扩展性以及大容量特点的分布式键值对Key-Value存储系统受到广大用户的欢迎。
[0003]分布式键值对Key-Value存储系统是以键值对Key-Value作为数据的组织方式,按照一定的哈希算法,将这些Key-Value分配在海量的节点上的存储系统。对于分布式Key-Value存储系统中的节点数据的处理,可以通过基于分布式Key-Value存储系统之上的分布式简单数据库系统SimpleDB实施查询及增加、修改、删除等操作。在对节点数据实施查询及增加、修改、删除等操作过程中,需要通过分布式索引来查找分布式Key-Value存储系统中的节点数据,该分布式索引是由大量的Key-Value构成,通常呈树状结构,存在一个根节点,对应于分布式索引中的节点上的数据存储在分布式Key-Value系统中。当通过分布式索引进行处理节点数据时,存在同时进行写和读请求的情况,这将导致读取的数据可能是脏数据,而非所要读取的修改前或修改后的数据。
[0004]为了避免读取到脏数据,目前主要是采用分布式锁控制并发的方法进行读和写操作。具体的,当实施读请求时,需要获取一个分布式的共享锁,对目标节点加共享锁,使得在读操作时,对该目标节点的写请求被阻塞;当实施写请求时,需要获取一个分布式的排他锁,对目标节点加排他锁,使得在写操作时,对该目标节点的读请求被阻塞。因此,采用分布式锁控制并发的方法进行读和写操作,可以防止节点数据在修改的过程中被读取,确保读取到完整的节点数据。然而,上述方法虽然能够避免读取脏数据,但是并发性差,不能够同时进行读和写操作,这削弱了分布式Key-Value存储系统的可用性。例如,在通过分布式索引进行写操作时,该写操作可能耗时数秒,甚至数分钟,这导致读操作被大幅延迟,严重影响了分布式Key-Value存储系统的可用性。

【发明内容】

[0005]本发明提供了一种分布式键值对Key-Value存储系统的数据更新方法以及相应的服务器。使用本发明方法,不仅可以避免读取到脏数据,而且实现了读写并发。
[0006]本发明第一方面提供一种新增索引节点的方法,包括:
[0007]所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0008]获取第一数据更新请求,其中,所述第一数据更新请求包括需要在所述第一存储树中增加第一节点的键值和内容;
[0009]复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;
[0010]确定所述第一节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;
[0011]依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;
[0012]在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0013]将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;
[0014]将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0015]结合第一方面,在第一种可能的实现方式中,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0016]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还包括:
[0017]为复制的第一根节点分配新的版本号;
[0018]则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0019]本发明第二方面提供一种分布式键值对Key-Value存储系统的数据更新方法,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0020]获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容;
[0021]复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;
[0022]复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同;
[0023]确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;
[0024]依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;
[0025]在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;[0026]将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;
[0027]将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0028]结合本发明的第二方面,在本发明第二方面的第一种可能的实现方式中,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的
唯一键值。
[0029]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还包括:
[0030]为所述复制的第一根节点分配新的版本号;
[0031]则,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0032]本发明第三方面提供一种分布式键值对Key-Value存储系统的数据更新方法,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0033]获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节占.[0034]复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;
[0035]确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;
[0036]依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;
[0037]在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0038]将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;
[0039]将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0040]结合本发明的第三方面,在本发明第三方面的第一种可能的实现方式中,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0041]结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还包括:
[0042]为所述复制的第一根节点分配新的版本号;则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0043]本发明的第四方面提供一种读索引节点的方法,包括:
[0044]读取索引中的根节点;
[0045]获取与当前读取的根节点的版本号对应的共享锁;
[0046]在获取所述共享锁之后,重新读取所述根节点;
[0047]验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共享锁;
[0048]在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
[0049]结合第四方面,在第一种可能的方式中,所述读索引节点的方法还包括:若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,返回所述获取与当前读取的根节点的版本号相对应的共享锁的步骤。
[0050]本发明第五方面提供一种服务器,包括:
[0051]获取单元,用于获取第一数据更新请求,其中,所述第一数据更新请求包括需要在分布式Key-Value存储系统中的存储层中的第一存储树中增加第一节点的键值和内容,所述第一存储树包括第一根节点;
[0052]处理单元,用于复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第一节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0053]存储单元,用于将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;以及用于在将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述存储层之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0054]结合本发明第五方面,在本发明第五方面的第一种可能的实现方式中,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0055]结合本发明第五方面的第二种可能的实现方式,在本发明第五方面的第二种可能的实现方式中,所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0056]本发明第六方面提供一种服务器,包括:
[0057]获取单元,用于获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容;
[0058]处理单元,用于复制分布式Key-Value存储系统的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同;还用于确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0059]存储单元,用于将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述存储层中之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0060]结合本发明的第六方面,在本发明第六方面的第一种可能的实现方式中,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的
唯一键值。
[0061]结合第六方面的第一可能的实现方式,在第二种可能的实现方式中,所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0062]本发明第七方面提供一种服务器,包括:
[0063]获取单元,用于获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点;
[0064]处理单元,用于复制分布式Key-Value存储系统中的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0065]存储单元,用于将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中之后,将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0066]结合本发明的第七方面,在本发明第七方面的第一种可能的实现方式中,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0067]结合第七方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0068]本发明的第八方面提供一种服务器,包括:
[0069]第一读取单元,用于读取索引中的根节点;
[0070]获取单元,用于获取与当前读取的根节点的版本号对应的共享锁;
[0071]第二读取单元,用于在获取所述共享锁之后,重新读取所述根节点;
[0072]验证单元,用于验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共享锁;
[0073]读操作单元,用于在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
[0074]结合第八方面,在第一可能的方式中,所述验证单元还用于若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,使得所述获取单元获取与当前读取的根节点的版本号相对应的共享锁。
[0075]本发明的第九方面提供一种服务器,包括处理器、存储器、总线和通信接口 ;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述服务器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,并通过所述通信接口与所述服务器部的设备进行通信,以使所述服务器执行如上第一方面、第二方面、第三方面及各种可能方式所述的分布式键值对Key-Value存储系统的数据更新方法。
[0076]本发明的第十方面提供一种计算机可读介质,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行如上第一方面、第二方面、第三方面及各种可能方式所述的分布式键值对Key-Value存储系统的数据更新方法。
[0077]在本发明第一方面提供的一种分布式键值对Key-Value存储系统的数据更新方法中,在缓冲层中的第一根节点存储到所述存储层之前,所述Key-Value系统的存储层中没有能够用于查找所述第一节点的根节点,无法读取到所述Key-Value系统中的所述第一节点。当缓冲层中的第一根节点存储到所述存储层之后,所述第一节点也已经存储到所述存储层中,此时所述第一节点的数据已经确定,从而避免从所述第一节点中读取到脏数据。
[0078]在本发明第二方面提供的一种分布式键值对Key-Value存储系统的数据更新方法中,在Key-Value存储系统的缓冲层中的根节点存储到存储层前,只能够根据存储层中的根节点,查找到未更新的第二节点,而不能在存储层中读取到更新后的第二节点的数据。在所述缓冲层中的根节点存储到所述存储层后,由于更新后的第二节点也已经存储到所述存储层,而且可以根据新存储的根节点查找到更新后的第二节点,从而避免从所述第二节点中读取到脏数据。因此,在所述缓冲层中的第一根节点存储到所述存储层之前,以及在将第二节点存储到所述存储层的过程中,可以进行读操作,该读操作可以读取到存储于所述存储层中的未更新的第二节点,而不会读取到脏数据。
[0079]在本发明第三方面提供的一种分布式键值对Key-Value存储系统的数据更新方法中,在将缓冲层的第一根节点存储到所述存储层之前,可以根据存储层中的第一根节点查找到所述存储层中的第三节点,可以对其进行读操作,而且可以读取到完整的第三节点的数据,从而实现节点删除和读操作的并发,同时又避免读取到脏数据。当缓冲层的第一根节点存储到所述存储层之后,则无法根据新存储到所述存储层中的第一根节点查找到第三节点。
[0080]在本发明提供的读索引节点的方法中,当获取的与当前读取的共享锁对应的版本号与重新读取后的根节点的版本号一致,则说明根节点未改变,可以对该根节点下的目标节点加所述共享锁,再执行读操作。当获取的共享锁对应的版本号与重新读取后的根节点的版本号不一致,则说明在获取到共享锁后,根节点的版本号有所改变,该获取的共享锁失效,需要重新获取与该重新读取后的根节点的版本号对应的共享锁。因此,应用本发明提供的读索引节点的方法可以确保验证通过的共享锁能够对目标节点成功加锁。
【专利附图】

【附图说明】
[0081]图1是一种海量存储的系统架构示意图;
[0082]图2是本发明实施例1提供的一种分布式键值对Key-Value存储系统的数据更新方法的流程示意图;
[0083]图3是本发明实施例1提供的节点分布示意图;
[0084]图4是本发明实施例2提供的一种分布式键值对Key-Value存储系统的数据更新方法的流程示意图;
[0085]图5是本发明实施例2提供的节点分布示意图;
[0086]图6是本发明实施例3提供的一种分布式键值对Key-Value存储系统的数据更新方法的流程示意图;
[0087]图7是本发明实施例3提供的节点分布示意图;[0088]图8是本发明实施例4提供的读取索引节点的方法的流程示意图;
[0089]图9是本发明实施例5提供的一种服务器结构框图;
[0090]图10是本发明实施例6提供的一种服务器结构框图;
[0091]图11是本发明实施例7提供的一种服务器结构框图;
[0092]图12是本发明实施例8提供的一种服务器结构框图;
[0093]图13是本发明提供的一种服务器的总线连接结构示意图;
[0094]图14是本发明提供的又一种服务器的总线连接结构示意图。
【具体实施方式】
[0095]本发明实施例提供了一种分布式键值对Key-Value存储系统的数据更新方法。以下先介绍本发明实施例可以应用的场景。如图1所示。图1展示了可以实施本发明实施例的系统架构,该系统架构包括简单数据库SDB的客户端101、网络层Web layerl02、缓冲层Cache layerl03和存储层Store layerl04,其中,存储层104为Key-Value存储系统,缓冲层103主要提供许可服务LC(License Client) Server。在本发明实施例中,对分布式索引的操作(如新增索引节点、修改索引节点等)是在缓冲层执行,将需要存储的节点数据持久化存储于存储层中。以下对本发明实施例进行详细介绍。
[0096]如图2所示,实施例1提供了一种分布式键值对Key-Value存储系统的数据更新方法,本实施例以增加索引节点为例,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0097]201、获取第一数据更新请求,其中,所述第一数据更新请求包括需要在所述第一存储树中增加第一节点的键值和内容。
[0098]202、复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中。
[0099]203、确定所述第一节点在所述第一存储树中的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向。其中,所述父节点的新键值与所述父节点的原始键值不同。
[0100]在所述缓冲层中,对所述第一存储树中的父节点的键值和内容进行修改,使得修改后的父节点的新键值不同于原始键值,而且其内容增加了对所述第一节点的指向。
[0101]204、依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向。其中,所述每个上级节点的新键值与其对应的原始键值不同。
[0102]在本步骤中,在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向包括了最接近所述父节点的上级节点的内容中也增加了对分配了新键值的父节点的指向。
[0103]205、在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向。其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点。
[0104]例如,可以将所述第一根节点的内容中的对分配新键值前的所述上级节点的第一级节点的指向修改为对分配新键值后的所述上级节点的第一级节点的指向。[0105]206、将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中。
[0106]此时,由于缓冲层中的第一根节点还未存储到存储层中,而存储层中原有的第一根节点、父节点和上级节点的内容中并没有对第一节点的指向,因此,若在所述第一节点在存储过程中发生读操作,根据存储层中的第一根节点将无法查找到第一节点,自然不会读到第一节点的脏数据。
[0107]207、将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0108]当缓冲层中的第一根节点存储到存储层后,第一节点已经完成存储,此时若发生读操作,则可以根据新存储到存储层中的第一根节点读取到完整的第一节点的数据。
[0109]如图3所示,左侧的节点301、302和306组成持久存储在存储层的第一存储树,R表示第一根节点301,B表示第一父节点302,需要在第一父节点302下增加新的叶子节点。右侧的存储树表示在缓冲层新建的第二存储树,Rl表示第二根节点303,BI表示第二父节点304,A表示新增的叶子节点305,这里的第二根节点303根据第一根节点R复制得到,保证其键值不变,但内容有所修改,即增加对第二父节点304的指向,第二父节点304根据第一父节点302复制得到,并为第二父节点304分配了新键值,该新的键值与第二父节点304的原始键值不同,第二父节点304的内容需要进行修改,以增加对新叶子节点305的指向,新增的叶子节点305即为第一节点。
[0110]在所述第二存储树建立之后,将所述第二存储树持久化存储到分布式Key-Value存储系统中的存储层,即先将第二父节点304和新增的叶子节点305存储到所述分布式Key-Value存储系统中的存储层中,再将第二根节点303存储到所述分布式Key-Value存储系统中的存储层中。
[0111]在第二根节点存储到所述Key-Value系统的存储层之后,由于所述第二根节点与第一根节点键值相同,所述第一根节点将被第二根节点覆盖,在所述存储层中,所述第一存储树将被更新,新增的叶子节点305被存储到存储层中,即完成数据更新。
[0112]在所述第二根节点303存储到所述存储层之前,由于所述Key-Value系统还不存在第二根节点303,而所述Key-Value系统中的第一根节点301的指向和内容都不会有改变,此时进行数据查询,读操作不可能读取到相关正在更新的叶子节点的脏数据。第二根节点303在第二父节点304和新增的叶子节点305之后才存储到存储层中,这样即使新增的所述叶子节点305已经存储到所述存储层中,仍然不能在所述存储层中读取到所述叶子节点305。由此可见,在所述叶子节点305新增过程中,读操作不能够读取到所述叶子节点305的脏数据。当所述叶子节点305相关的第二存储树完全建立完毕之后,才把所述第二根节点303存储到所述存储层,这样,由于第二根节点303覆盖了第一根节点301,第二根节点303指向的是第二父节点304,因此,能够根据索引查找到所述第二父节点304,并根据第二父节点304查询到新增的叶子节点305,保证了数据的唯一性并避免读取到脏数据。同时,本发明实施例的存储方法保证读写数据可以同时进行,提高了系统的处理效率。
[0113]在上述实施例1提供的方法中,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值,以避免与所述第一存储树中的节点的键值重复。
[0114]在上述实施例1提供的方法中,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还可以包括:
[0115]为复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0116]例如,所述第一存储树中的第一根节点的原分配的版本号为第一版本号,复制的第一根节点分配的新的版本号为第二版本号,所述第一版本号与所述第二版本号不同,所述第二版本号可以大于或小于所述第一版本号。如所述第一版本号为,所述第二版本号为*****V2。需要说明的是,上述新增索引节点的方法中的版本号并不局限于某一种形式,例如,所述第一版本号为所述第二版本号为
[0117]由于可能需要在一个父节点下多次增加叶子节点,为了避免版本号重复,优选的,所述第二版本号比所述第一版本号大I。即在原版本号的基础上加1,使得版本号数量不受限制且不重复。
[0118]上述键值+版本号的分配方法,可以保证键值在分布式存储系统中的唯一性。
[0119]如图4所示,本发明实施例2提供了一种分布式键值对Key-Value存储系统的数据更新方法,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0120]401、获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容。
[0121]402、复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中。
[0122]403、复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容。其中,所述第二节点的新键值与所述第二节点的原始键值不同。
[0123]404、确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向。其中,所述父节点的新键值与所述父节点的原始键值不同。
[0124]405、依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向。其中,所述每个上级节点的新键值与其对应的原始键值不同。
[0125]在本步骤中,在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向包括了最接近所述父节点的上级节点的内容中也增加了对分配了新键值的父节点的指向。
[0126]406、在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点。
[0127]例如,将所述第一根节点的内容中的对分配新键值前的所述上级节点的第一级节点的指向修改为对分配新键值后的所述上级节点的第一级节点的指向。
[0128]407、将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中。
[0129]此时,由于缓冲层中的第一根节点还未存储到存储层中,而存储层中原有的第一根节点、父节点和上级节点的内容中并没有对更新后的第二节点的指向,因此,若在更新后的第二节点存储过程中发生读操作,根据存储层中的第一根节点将无法查找到第一节点,自然不会读到第二节点的脏数据。
[0130]408、将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0131]当缓冲层中的第一根节点存储到存储层后,更新后的第二节点已经完成存储,此时若发生读操作,则可以根据新存储到存储层中的第一根节点读取到完整的更新后的第二节点的数据。
[0132]如图5所示,左侧的节点501、502、506和507组成持久存储在存储层的第一存储树,R表示第一根节点501,B表示第一父节点502,A表示第一叶子节点506,需要修改第一叶子节点。右侧的存储树表示在缓冲层新建的第二存储树,Rl表示第二根节点503,BI表示第二父节点504,Al表示第二叶子节点505。这里的第二根节点503根据第一根节点R复制得到,保证其键值不变,但内容有所修改,即增加对第二父节点504的指向,第二父节点504根据第一父节点502复制得到,并为第二父节点504分配了新键值,该新的键值与第二父节点504的原始键值不同,第二父节点504的内容需要进行修改,以增加对第二叶子节点505的指向。第二叶子节点505根据第一叶子节点506复制得到,并为第二叶子节点505分配了新键值,该新的键值与第二叶子节点505的原始键值不同,以及将第二叶子节点505的原始内容更新为第二叶子节点505的新内容。
[0133]在所述第二存储树建立之后,将所述第二存储树持久化存储到分布式Key-Value存储系统中的存储层,其中,先将第二父节点504和第二叶子节点505存储到所述分布式Key-Value存储系统中的存储层中,再将第二根节点503存储到所述分布式Key-Value存储系统中的存储层中。
[0134]在第二根节点503存储到所述Key-Value系统的存储层之后,由于所述第二根节点503与第一根节点501键值相同,所述第一根节点501将被第二根节点503覆盖,在所述存储层中,所述第一存储树将被更新,第二叶子节点505被存储到存储层中,即完成数据更新。
[0135]在所述第二根节点503存储到所述存储层之前,由于所述Key-Value系统还不存在第二根节点503,而所述Key-Value系统中的第一根节点501的指向和内容都不会有改变,此时进行数据查询,读操作不可能读取到相关正在更新的叶子节点的脏数据。第二根节点503在第二父节点504和第二叶子节点505之后才存储到存储层中,这样即使所述第二叶子节点505已经存储到所述存储层中,仍然不能根据第一存储树在所述存储层中读取到第二叶子节点505。由此可见,在叶子节点的更新过程中,读操作不能够读取到所需更新的叶子节点的脏数据。当第二叶子节点505相关的第二存储树完全建立完毕之后,才把所述第二根节点503存储到所述存储层,这样,由于第二根节点503覆盖了第一根节点501,第二根节点503指向的是第二父节点504,因此,能够根据索引查找到所述第二父节点504,并根据第二父节点504查询到第二叶子节点505,保证了数据的唯一性并避免读取到脏数据。同时,本发明实施例的存储方法保证读写数据可以同时进行,提高了系统的处理效率。[0136]在上述实施例2提供的方法中,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值,以避免与所述第一存储树中的节点的键值重复。
[0137]在上述实施例2提供的方法中,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还可以包括:
[0138]为所述复制的第一根节点分配新的版本号,则所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0139]例如,所述第一存储树中的第一根节点的原分配的版本号为第一版本号,复制的第一根节点分配的新的版本号为第二版本号。所述第一版本号与所述第二版本号不同,所述第二版本号可以大于或小于所述第一版本号。如所述第一版本号为,所述第二版本号为*****V2。需要说明的是,上述方法中的版本号并不局限于某一种形式,例如,所述第一版本号为林林*vA,所述第二版本号为*林林vB。
[0140]由于可能需要在一个父节点下多次修改叶子节点,为了避免版本号重复,优选的,所述第二版本号比所述第一版本号大I。即在原版本号的基础上加1,使得版本号数量不受限制且不重复。
[0141]上述键值+版本号的分配方法,可以保证键值在分布式存储系统中的唯一性。
[0142]在实施例2提供的方法中,当将所述第二节点的键值中的第一版本号修改为不同于所述第一版本号的第二版本号时,为了删除冗余数据,在将所述第二根节点存储到所述Key-Value系统的存储层中之后,读取所述第一版本号;申请与所述第一版本号对应的排他锁;在申请到所述排他锁之后,对所述第一版本号加排他锁;在对所述第一版本号加排他锁之后,从所述Key-Value系统的存储层中删除所述第一存储树中原有的第二节点、父节点、上级节点和第一根节点。由于原有的第二节点、父节点、上级节点和第一根节点的键值中都包含有所述第一版本号,因此,在对所述第一版本号加排他锁后,就不能对上述这些节点进行读操作,从而可以将它们删除。
[0143]如图6所示,本发明实施例3提供了一种分布式键值对Key-Value存储系统的数据更新方法,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括:
[0144]601、获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点。
[0145]602、复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中。
[0146]603、确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向。其中,所述父节点的新键值与所述父节点的原始键值不同。
[0147]604、依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向。其中,所述每个上级节点的新键值与其对应的原始键值不同。
[0148]在本步骤中,在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向包括了最接近所述父节点的上级节点的内容中也增加了对分配了新键值的父节点的指向。
[0149]605、在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点。
[0150]例如,可以将所述第一根节点的内容中的对分配新键值前的所述上级节点的第一级节点的指向修改为对分配新键值后的所述上级节点的第一级节点的指向。
[0151]606、将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中。
[0152]此时,由于缓冲层中的第一根节点还未存储到存储层中,而存储层中原有的第三节点仍然存在,因此,若在缓冲层中的第一根节点存储到存储层之前发生读操作,根据存储层中的第一根节点将读到原有的第三节点的完整数据。
[0153]607、将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0154]当缓冲层中的第一根节点存储到存储层后,根据新存储到存储层中的第一根节点将无法查找到第三节点,自然无法读取到第三节点的数据。
[0155]如图7所示,左侧的节点701、702、705和706组成持久存储在存储层的第一存储树,R表示第一根节点701,B表示第一父节点702,A表示需删除的叶子节点705。右侧的存储树表示在缓冲层新建的第二存储树,Rl表示第二根节点703,BI表示第二父节点704。这里的第二根节点703根据第一根节点R复制得到,保证其键值不变,但内容有所修改,即增加对第二父节点704的指向,第二父节点704根据第一父节点702复制得到,并为第二父节点704分配了新键值,该新的键值与第二父节点304的原始键值不同,删除第二父节点704的内容中对需删除的所述叶子节点705的指向。
[0156]在所述第二存储树建立之后,将所述第二存储树持久化存储到分布式Key-Value存储系统中的存储层,即先将第二父节点704存储到所述分布式Key-Value存储系统中的存储层中,再将第二根节点703存储到所述分布式Key-Value存储系统中的存储层中。
[0157]在第二根节点存储到所述Key-Value系统的存储层之后,由于所述第二根节点与第一根节点键值相同,所述第一根节点将被第二根节点覆盖,在所述存储层中,所述第一存储树将被更新,第二存储树中将不再包含所述叶子节点705,即完成数据更新。
[0158]在所述第二根节点703存储到所述存储层之前,由于所述Key-Value系统还不存在第二根节点703,而所述Key-Value系统中的第一根节点701的指向和内容都不会有改变,此时进行数据查询,读操作不可能读取到相关正在更新的叶子节点的脏数据。第二根节点703在第二父节点704之后才存储到存储层中,这样即使第二父节点704已经存储到所述存储层中,仍然不能在所述存储层中读取到所述叶子节点705。由此可见,在删除所述叶子节点705的过程中,读操作不能够读取到所述叶子节点705的脏数据。当所述第二存储树完全建立完毕之后,才把所述第二根节点703存储到所述存储层,这样,由于第二根节点703覆盖了第一根节点701,第二根节点703指向的是第二父节点704,但第二父节点704并不指向所述叶子节点705,不能够根据第二父节点704查询到所述叶子节点705,保证了数据的唯一性并避免读取到脏数据。同时,本发明实施例的存储方法保证读写数据可以同时进行,提闻了系统的处理效率。
[0159]在上述实施例3提供的方法中,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值,以避免与所述第一存储树中的节点的键
值重复。
[0160]在上述实施例3提供的方法中,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,所述方法还可以包括:
[0161]为所述复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0162]例如,所述第一存储树中的第一根节点的原分配的版本号为第一版本号,复制的第一根节点分配的新的版本号为第二版本号,所述第一版本号与所述第二版本号不同,所述第二版本号可以大于或小于所述第一版本号。如所述第一版本号为所述第二版本号为*****V2。需要说明的是,上述方法中的版本号并不局限于某一种形式,例如,所述第一版本号为林林*vA,所述第二版本号为*林林vB。
[0163]由于可能需要在一个父节点下删除多个叶子节点,为了避免版本号重复,优选的,所述第二版本号比所述第一版本号大I。即在原版本号的基础上加1,使得版本号数量不受限制且不重复。
[0164]上述键值+版本号的分配方法,可以保证键值在分布式存储系统中的唯一性。
[0165]在实施例3提供的方法中,当将所述第一父节点的键值中的第一版本号修改为不同于所述第一版本号的第二版本号,为了删除冗余数据,在将所述第二根节点持久化存储到所述Key-Value系统中的存储层之后,读取所述第一版本号;申请与所述第一版本号对应的排他锁;在申请到所述排他锁之后,对所述第一版本号加排他锁;在对所述第一版本号加排他锁之后,从所述Key-Value系统中的存储层中删除所述第一存储树中原有的第三节点、父节点、上级节点和第一根节点。由于原有的第三节点、父节点、上级节点和第一根节点都包含有所述第一版本号,因此,在对所述第一版本号加排他锁后,就不能对上述这些节点进行读操作,从而可以将它们删除。
[0166]为了在实施上述新增、修改、删除索引节点过程中进行读操作,如图8所示,实施例4提供了一种读索引节点的方法,包括:
[0167]801、读取索引中的根节点。
[0168]802、获取与当前读取的根节点的版本号对应的共享锁。
[0169]803、在获取所述共享锁之后,重新读取所述根节点。
[0170]804、验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致。
[0171]若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则执行步骤805:对所述重新读取后的根节点加所述共享锁。
[0172]若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,返回所述获取与当前读取的根节点的版本号相对应的共享锁的步骤,即返回步骤802。[0173]806、在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
[0174]由于获取所述共享锁需要一定等待时间,在这段等待时间中,所述根节点有可能发生修改,其版本号可能发生变化,因此,在获取所述共享锁之后,还需要验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若一致,则表明根节点未发生改变,该所述共享锁有效,可以对其加所述共享锁。在对所述根节点加共享锁后,可以避免在读操作过程中,所述根节点下的目标节点中的数据被删除。若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则表明所述根节点发生变化,所述共享锁对所述根节点失效,此时,需要重新获取与所述根节点的版本号对应的共享锁,重新进行验证。
[0175]在获取与所述根节点的版本号对应的共享锁时,获取所述共享锁的请求采用立即超时的方式,即当第一时间获取不到所述共享锁时,立即抛出超时异常。
[0176]本发明实施例还提供了应用上述方法的服务器,该服务器可以为简单数据库Simple DB服务器。
[0177]对应于实施例1中的一种分布式键值对Key-Value存储系统的数据更新方法,如图9所示,实施例5提供了一种服务器,其包括:
[0178]获取单元901,用于获取第一数据更新请求,其中,所述第一数据更新请求包括需要在分布式Key-Value存储系统中的存储层中的第一存储树中增加第一节点的键值和内容,所述第一存储树包括第一根节点;
[0179]处理单元902,用于复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第一节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0180]存储单元903,用于将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;以及用于在将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述存储层之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0181]在实施例5提供的服务器中,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0182]优选的,所述处理单元902还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。[0183]对应于实施例2中的一种分布式键值对Key-Value存储系统的数据更新方法,如图10所示,实施例6提供了一种服务器,其包括:
[0184]获取单元1001,用于获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容;
[0185]处理单元1002,用于复制分布式Key-Value存储系统的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同;还用于确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0186]存储单元1003,用于将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述存储层中之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0187]在实施例6提供的服务器中,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0188]优选的,所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0189]对应于实施例3中的一种分布式键值对Key-Value存储系统的数据更新方法,如图11所示,实施例7提供了一种服务器,其包括:
[0190]获取单元1101,用于获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点;
[0191]处理单元1102,用于复制分布式Key-Value存储系统中的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;
[0192]存储单元1103,用于将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中之后,将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0193]在实施例7提供的服务器中,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0194]优选的,所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0195]对应于实施例4中的读取索引节点的方法,如图12所示,实施例8提供了一种服务器,其包括:
[0196]第一读取单元1201,用于读取索引中的根节点;
[0197]获取单元1202,用于获取与当前读取的根节点的版本号对应的共享锁;
[0198]第二读取单元1203,用于在获取所述共享锁之后,重新读取所述根节点;
[0199]验证单元1204,用于验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共享锁;
[0200]读操作单元1205,用于在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
[0201]所述验证单元1204还用于若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,使得所述获取单元获取与当前读取的根节点的版本号相对应的共享锁。
[0202]对应于实施例1中的一种分布式键值对Key-Value存储系统的数据更新方法,如图13所示,实施例9提供了一种服务器,其包括:输入装置1301、输出装置1302、缓冲存储器1303和处理器1304(该服务器中的处理器1304的数量可以为一个或者多个,图13以一个处理器为例)。本实施例中输入装置1301、输出装置1302、缓冲存储器1303和处理器1304可以通过总线或其他方式连接,其中,图13以总线连接方式为例。
[0203]在本实施例中,所述输入装置1301用于获取第一数据更新请求,其中,所述第一数据更新请求包括需要在分布式Key-Value存储系统中的存储层中的第一存储树中增加第一节点的键值和内容,所述第一存储树包括第一根节点;
[0204]所述处理器1304用于执行如下步骤:用于复制所述第一根节点到所述缓冲存储器1303中;还用于确定所述第一节点的父节点,复制所述父节点到所述缓冲存储器1303中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述缓冲存储器1303中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;还用于将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;以及用于在将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述存储层之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0205]在实施例9提供的服务器中,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0206]优选的,所述处理器还用于在复制所述第一根节点到所述缓冲存储器1303之后,为复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0207]对应于实施例2中的一种分布式键值对Key-Value存储系统的数据更新方法,如图13所示,实施例10提供了一种服务器,其包括:其包括:输入装置1301、输出装置1302、缓冲存储器1303和处理器1304(该服务器中的处理器1304的数量可以为一个或者多个,图13以一个处理器为例)。本实施例中输入装置1301、输出装置1302、缓冲存储器1303和处理器1304可以通过总线或其他方式连接,其中,图13以总线连接方式为例。
[0208]在本实施例中,所述输入装置1301用于获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容。
[0209]所述处理器1304用于执行如下步骤:用于复制分布式Key-Value存储系统的存储层中的第一存储树中的第一根节点到所述缓冲存储器1303中;还用于复制所述第二节点的原始键值和原始内容到所述缓冲存储器1303中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同;还用于确定所述第二节点的父节点,复制所述父节点到所述缓冲存储器1303中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述缓冲存储器1303中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;还用于将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述存储层中之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
[0210]在实施例10提供的服务器中,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0211]优选的,所述处理器1304还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0212]对应于实施例3中的一种分布式键值对Key-Value存储系统的数据更新方法,如图13所示,实施例11提供了一种服务器,其包括:其包括:输入装置1301、输出装置1302、缓冲存储器1303和处理器1304(该服务器中的处理器1304的数量可以为一个或者多个,图13以一个处理器为例)。本实施例中输入装置1301、输出装置1302、缓冲存储器1303和处理器1304可以通过总线或其他方式连接,其中,图13以总线连接方式为例。
[0213]在本实施例中,所述输入装置1301用于获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点。
[0214]所述处理器1304用于执行如下步骤:用于复制分布式Key-Value存储系统中的存储层中的第一存储树中的第一根节点到所述缓冲存储器1303中;还用于确定所述第三节点的父节点,复制所述父节点到所述缓冲存储器1303中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述缓冲存储器1303中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点;还用于将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中之后,将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
[0215]在实施例11提供的一种服务器中,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
[0216]优选的,所述处理器1304还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
[0217]对应于实施例4中的读取索引节点的方法,如图13所示,实施例12提供了一种服务器,其包括:其包括:输入装置1301、输出装置1302、缓冲存储器1303和处理器1304(该服务器中的处理器1304的数量可以为一个或者多个,图13以一个处理器为例)。本实施例中输入装置1301、输出装置1302、缓冲存储器1303和处理器1304可以通过总线或其他方式连接,其中,图13以总线连接方式为例。
[0218]在本实施例中,所述处理器1304用于执行如下步骤:读取索引中的根节点到所述缓冲存储器1303 ;
[0219]获取与当前读取的根节点的版本号对应的共享锁;
[0220]在获取所述共享锁之后,重新读取所述根节点;
[0221]验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共享锁;
[0222]在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
[0223]优选的,所述处理器1304还用于执行:若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,返回所述获取与当前读取的根节点的版本号相对应的共享锁的步骤。
[0224]图14为本发明的服务器的又一实施例的结构组成示意图。如图14可知,具体实现中,本发明实施例的服务器1405还可由处理器1401、存储器1402、总线1403和通信接口1404等物理模块构成,其中,所述存储器1402用于存储计算机执行指令,所述处理器1401与所述存储器1402通过所述总线连接,当所述服务器1405运行时,所述处理器1401执行所述存储器1402存储的所述计算机执行指令,并通过所述通信接口 1404与所述集群管理设备外部的设备进行通信,以使所述服务器执行本发明各实施例所述的数据更新方法。
[0225]具体实现中,本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,给程序执行时可包括本发明提供的基于虚拟组网的交换机配置方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory, RAM)等。
[0226]以上对本发明实施例所提供的一种分布式键值对Key-Value存储系统的数据更新方法、一种读取索引节点的方法,以及相应的服务器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种分布式键值对Key-Value存储系统的数据更新方法,其特征在于,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括: 获取第一数据更新请求,其中,所述第一数据更新请求包括需要在所述第一存储树中增加第一节点的键值和内容; 复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中; 确定所述第一节点在所述第一存储树中的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同; 依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同; 在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中; 将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
2.如权利要求1所述的方法,其特征在于,所述父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
3.如权利要求2所述的方法,其特征在于,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,还包括: 为复制的第一根节点分配新的版本号; 贝U,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
4.一种分布式键值对Key-Value存储系统的数据更新方法,其特征在于,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括: 获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容; 复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中; 复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同; 确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同; 依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同; 在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中; 将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
5.如权利要求4所述的方法,其特征在于,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
6.如权利要求5所述的方法,其特征在于,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,还包括: 为所述复制的第一根节点分配新的版本号; 贝U,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
7.一种分布式键值对Key -Value存储系统的数据更新方法,其特征在于,所述分布式Key-Value存储系统中的存储层包括第一存储树,所述第一存储树包括第一根节点,所述方法包括: 获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点; 复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中; 确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同; 依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同; 在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中; 将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
8.如权利要求7所述的方法,其特征在于,所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
9.如权利要求8所述的方法,其特征在于,在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,还包括: 为所述复制的第一根节点分配新的版本号; 贝U,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
10.一种读索引节点的方法,其特征在于,包括: 读取索引中的根节点; 获取与当前读取的根节点的版本号对应的共享锁; 在获取所述共享锁之后,重新读取所述根节点; 验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共孚锁; 在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
11.根据权利要求10所述的读索引节点的方法,其特征在于,还包括:若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,返回所述获取与当前读取的根节点的版本号相对应的共享锁的步骤。
12.一种服务器,其特征在于,包括: 获取单元,用于获取第一数据更新请求,其中,所述第一数据更新请求包括需要在分布式Key-Value存储系统中的存储层中的第一存储树中增加第一节点的键值和内容,所述第一存储树包括第一根节点; 处理单元,用于复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第一节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,在所述父节点的内容中增加对所述第一节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中,所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 存储单元,用于将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;以及用于在将所述第一节点、所述第一节点的父节点以及所述父节点的上级节点存储到所述存储层之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
13.根据权利要求12所述的服务器,其特征在于,所述父节点新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
14.根据权利要求13所述的服务器,其特征在于, 所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为复制的第一根节点分配新的版本号,则所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
15.—种服务器,其特征在于,包括: 获取单元,用于获取第二数据更新请求,其中,所述第二数据更新请求包括需要更新的第二节点的新内容; 处理单元,用于复制分布式Key-Value存储系统的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于复制所述第二节点的原始键值和原始内容到所述分布式Key-Value存储系统的缓冲层中,为所述第二节点分配新的键值,并将所述第二节点的原始内容更新为所述第二节点的新内容,其中,所述第二节点的新键值与所述第二节点的原始键值不同;还用于确定所述第二节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,将所述父节点的内容中对具有原始键值的第二节点的指向修改为具有新键值的第二节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一`级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 存储单元,用于将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第二节点、所述第二节点的父节点以及所述父节点的上级节点存储到所述存储层中之后,将所述第一根节点存储到所述存储层中的所述第一存储树中。
16.根据权利要求15所述的服务器,其特征在于,所述第二节点的新键值、父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
17.根据权利要求16所述的服务器,其特征在于, 所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述第二节点的新键值为将所述第二节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。
18.一种服务器,其特征在于,包括: 获取单元,用于获取第三数据更新请求,其中,所述第三数据更新请求包括需要删除的第三节点; 处理单元,用于复制分布式Key-Value存储系统中的存储层中的第一存储树中的第一根节点到所述分布式Key-Value存储系统的缓冲层中;还用于确定所述第三节点的父节点,复制所述父节点到所述分布式Key-Value存储系统的缓冲层中,为所述父节点分配新键值,删除所述父节点的内容中对所述第三节点的指向,其中,所述父节点的新键值与所述父节点的原始键值不同;还用于依次复制所述父节点到所述第一根节点的分支上的其它上级节点到所述分布式Key-Value存储系统的缓冲层中,直到到达所述根节点,并为每个上级节点分配新键值,以及在所述每个上级节点的内容中分别增加对分配新键值的下一级节点的指向,其中,所述每个上级节点的新键值与其对应的原始键值不同;还用于在所述第一根节点的内容中增加对所述上级节点的第一级节点的指向,其中所述第一级节点为所述父节点到所述第一根节点的分支上距离所述根节点最近的节点; 存储单元,用于将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层中;还用于在将所述第三节点的父节点以及所述父节点的上级节点存储到所述分布式Key-Value存储系统中的存储层之后,将所述第一根节点存储到所述分布式Key-Value存储系统中的存储层中的所述第一存储树中。
19.根据权利要求18所述的服务器,其特征在于, 所述第三节点的父节点的新键值和每个所述上级节点的新键值都是所述第一存储树中的唯一键值。
20.根据权利要求19所述的服务器,其特征在于, 所述处理单元还用于在复制所述第一根节点到所述分布式Key-Value存储系统的缓冲层中之后,为所述复制的第一根节点分配新的版本号;则,所述父节点的新的键值为将所述父节点的原始键值中的版本号更换为所述新的版本号后得到的键值,所述每个上级节点的新的键值为将所述每个上级节点对应的原始键值中的版本号更换为所述新的版本号后得到的键值。`
21.一种服务器,其特征在于,包括: 第一读取单元,用于读取索引中的根节点; 获取单元,用于获取与当前读取的根节点的版本号对应的共享锁; 第二读取单元,用于在获取所述共享锁之后,重新读取所述根节点; 验证单元,用于验证所述共享锁对应的版本号与重新读取后的根节点的版本号是否一致,若所述共享锁对应的版本号与重新读取后的根节点的版本号一致,则对所述重新读取后的根节点加所述共享锁; 读操作单元,用于在对所述重新读取后的根节点加所述共享锁之后,执行从键值对Key-Value系统的存储层中读取所述根节点下的目标节点的操作。
22.根据权利要求21所述的服务器,其特征在于,所述验证单元还用于若所述共享锁对应的版本号与重新读取后的根节点的版本号不一致,则将所述重新读取后的根节点的版本号作为当前读取的根节点的版本号,使得所述获取单元获取与当前读取的根节点的版本号相对应的共享锁。
23.一种服务器,其特征在于,包括处理器、存储器、总线和通信接口 ;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述服务器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,并通过所述通信接口与所述服务器部的设备进行通信,以使所述服务器执行如权利要求1-9中任一所述的分布式键值对Key-Value存储系统的数据更新方法。
24.一种计算机可读介质,其特征在于,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行如权利要求1-9中任一所述的分布式键值对Key-Value存储系统的数据更新方法。
【文档编号】H04L29/08GK103518364SQ201380000766
【公开日】2014年1月15日 申请日期:2013年3月19日 优先权日:2013年3月19日
【发明者】娄东风, 周训淼 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1