一种检索键值数据库中键的共同前缀的方法、设备、介质
技术领域
本发明涉及键值数据库技术领域,尤其涉及一种检索键值数据库中键的共同前缀的方法、设备、介质。
背景技术
键值数据库是一种使用键值对存储检索和管理数据存储的模型。由于其接口简单,性能高而被广泛应用于技术领域。键值数据库的另一个特点是所有的键是有序排列的,以便使用高效的搜索算法检索键值。
对象存储是一种根据对象名称获得对象数据的存储产品,被各大云厂商所采用。键值数据库被用来实现对象元数据的存储,以对象名称为键,以对象元数据为值。对象元数据是指对象的创建时间,对象的读写权限,对象数据的存储路径等信息。对象存储可以根据使用者提供的分隔符和前缀获得该前缀下的所有对象,如果前缀之后的部分还存在分隔符,就需要将这些对象聚合成一个共同前缀发送给用户。由于键值数据库接口简单,无法直接根据分隔符计算出所有的共同前缀。现有技术中,采用遍历所有对象,记录出现的所有共同前缀的方法,但键值数据库存储的键值非常多,尤其在云环境中,一个共同前缀下对象可能会有上万个,而且共同前缀的数目非常大,现有算法以一种O(n)的实现方式,随着键值对的增多,检索效率明显下降。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种检索键值数据库中键的共同前缀的方法,解决了现有技术采用遍历所有对象,记录出现的所有共同前缀的方法造成检索效率低的问题。
本发明提供一种检索键值数据库中键的共同前缀的方法,包括以下步骤:
查找第一条记录,根据用户提供的前缀查找键值数据库中第一条包含或者大于所述用户提供的前缀的记录,记为当前记录;
查找共同前缀,若当前记录的键包含所述用户提供的前缀,则所述当前记录的键由用户提供的前缀、用户提供的分隔符、剩余部分组成,若所述剩余部分中包含所述用户提供的分隔符,则将所述剩余部分中第一个所述用户提供的分隔符的位置至所述当前记录的开始位置的字符记为第一结果,并将所述第一结果添加至键的共同前缀中;
查找新记录和键,查找所述第一结果中最后一个字符的下一个字符,并用查找到的字符替换所述第一结果的最后一个字符,得到第二结果,查找键值数据库中第一条前缀包含或者大于所述第二结果的记录,得到新记录和所述新记录的键,将所述新记录更新为当前记录,并跳转至所述查找共同前缀步骤。
进一步地,在所述查找第一条记录步骤和所述查找共同前缀步骤之间还包括判断当前记录的键步骤,若当前记录的键不包含所述用户提供的前缀,则退出并返回键的共同前缀和所述用户提供的前缀下的对象。
进一步地,所述查找共同前缀步骤中,若所述剩余部分中不包含所述用户提供的分隔符,则将所述当前记录的键添加至所述用户提供的前缀下的对象,获取下一条记录并跳转至所述判断当前记录的键步骤。
进一步地,所述查找新记录和键步骤中,将所述新记录更新为当前记录之后,先跳转至所述判断当前记录的键步骤。
进一步地,所述查找第一条记录步骤中,通过二分查找算法查找键值数据库中第一条包含或者大于所述用户提供的前缀的记录。
进一步地,所述查找新记录和键步骤中,通过二分查找算法查找键值数据库中第一条前缀包含或者大于所述第二结果的记录。
一种电子设备,包括:处理器;
存储器;以及程序,其中所述程序被存储在所述存储器中,并且被配置成由处理器执行,所述程序包括用于执行上述一种检索键值数据库中键的共同前缀的方法。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述一种检索键值数据库中键的共同前缀的方法。
相比现有技术,本发明的有益效果在于:
本发明提供一种检索键值数据库中键的共同前缀的方法,包括以下步骤:查找第一条记录,根据用户提供的前缀查找键值数据库中第一条包含或者大于用户提供的前缀的记录,记为当前记录;查找共同前缀,若当前记录的键包含用户提供的前缀,则当前记录的键由用户提供的前缀、用户提供的分隔符、剩余部分组成,若剩余部分中包含用户提供的分隔符,则将剩余部分中第一个用户提供的分隔符的位置至当前记录的开始位置的字符记为第一结果,并将第一结果添加至键的共同前缀中;查找新记录和键,查找第一结果中最后一个字符的下一个字符,并用查找到的字符替换第一结果的最后一个字符,得到第二结果,查找键值数据库中第一条前缀包含或者大于第二结果的记录,得到新记录和新记录的键,将新记录更新为当前记录,并跳转至查找共同前缀步骤。本发明涉及电子设备与可读存储介质,用于执行一种检索键值数据库中键的共同前缀的方法。本发明根据用户给出的前缀和分隔符在不遍历所有键值对的条件下计算出属于用户给出前缀的键的共同前缀,在千万键值对级别场景下能够有效缩短获取共同前缀的时间。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明的一种检索键值数据库中键的共同前缀的方法流程图;
图2为本发明实施例的一种检索键值数据库中键的共同前缀的方法流程图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
一种检索键值数据库中键的共同前缀的方法,如图1所示,包括以下步骤:
查找第一条记录,根据用户提供的前缀查找键值数据库中第一条包含或者大于用户提供的前缀的记录,记为当前记录;如图2所示,本实施例中,使用Sep表示用户提供的分隔符,使用Prefix表示用户提供的前缀,用CommonPrefix表示需要得到的结果,即键的共同前缀,用Objects表示Prefix下的对象而非共同前缀。优选的,查找第一条记录步骤中,通过二分查找算法查找键值数据库中第一条包含或者大于用户提供的前缀的记录,将记录记为R。由于键值数据库有序,所以使用二分查找算法快速定位记录位置,将R的键记为R.Key。
在一实施例中,优选的,在查找第一条记录步骤和查找共同前缀步骤之间还包括判断当前记录的键步骤,若当前记录的键不包含用户提供的前缀,则退出并返回键的共同前缀和用户提供的前缀下的对象。因为键有序,所以后面不会再有记录包含Prefix。
查找共同前缀,若当前记录的键包含用户提供的前缀,则当前记录的键由用户提供的前缀、用户提供的分隔符、剩余部分组成,图2中,以R.Key=Prefix+Sep+R.Key.Left表示当前记录的键由用户提供的前缀、用户提供的分隔符、剩余部分组成,其中,R.Key.Left为剩余部分,若剩余部分中包含用户提供的分隔符,则将剩余部分中第一个用户提供的分隔符的位置至当前记录的开始位置的字符记为第一结果,图2中以CP表示第一结果,并将第一结果添加至键的共s同前缀中,也就是找到了一个共同前缀。
查找共同前缀步骤中,若剩余部分中不包含用户提供的分隔符,则将当前记录的键添加至用户提供的前缀下的对象,获取下一条记录并跳转至判断当前记录的键步骤。
查找新记录和键,查找第一结果中最后一个字符的下一个字符,并用查找到的字符替换第一结果的最后一个字符,得到第二结果,图2中以CP’表示第二结果(不包括最后的Sep),查找键值数据库中第一条前缀包含或者大于第二结果的记录,得到新记录和新记录的键,图2中以R表示新记录,以R.Key表示新记录的键,将新记录更新为当前记录,并跳转至查找共同前缀步骤。优选的,查找新记录和键步骤中,通过二分查找算法查找键值数据库中第一条前缀包含或者大于第二结果的记录。优选的,查找新记录和键步骤中,将新记录更新为当前记录之后,先跳转至判断当前记录的键步骤。查找新记录和键步骤利用键值数据库中键是有序的特点,将共同前缀最后字符替换为比它大1的字符,快速跳过该前缀下的所有对象,达到快速查找所有共同前缀的目的。
在一实施例中,键值数据库中有如下键:
/dir/dir1/file1
/dir/dir1/file2
…
/dir/dir1/fileN
/dir/dir2/file1
/dir/dir2/file2
…
/dir/dir2/fileN
…
/dir/dirN/file1
/dir/dirN/file2
…
/dir/dirN/fileN
该键值数据库共有N*N个键,用户提供的前缀Prefix为/dir,用户提供的分隔符Sep为/,根据Prefix为/dir,查找出第一个符合条件的记录为/dir/dir1/file1,根据查找共同前缀步骤,得到CP为/dir/dir1/。根据查找新记录和键步骤,由于在ASCII表中1的下一个字符为2,得到CP’为/dir/dir2。在上述键值中存在/dir/dir2,所以计算得出R为/dir/dir2/file1,又进入判断当前记录的键步骤,上述方法直接跳过了/dir/dir1/file2到/dir/dir1/fileN的遍历。假设/dir/dir2/file1到/dir/dir2/fileN在这个数据库中不存在,那么根据CP’(/dir/dir2)计算出的R应该是/dir/dir3/file1,因为大于/dir/dir2而且存在的第一条记录是/dir/dir3/file1,通过上述步骤还是能正确处理。
一种电子设备,包括:处理器;
存储器;以及程序,其中程序被存储在存储器中,并且被配置成由处理器执行,程序包括用于执行上述一种检索键值数据库中键的共同前缀的方法。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行上述一种检索键值数据库中键的共同前缀的方法。
本发明提供一种检索键值数据库中键的共同前缀的方法,包括以下步骤:查找第一条记录,根据用户提供的前缀查找键值数据库中第一条包含或者大于用户提供的前缀的记录,记为当前记录;查找共同前缀,若当前记录的键包含用户提供的前缀,则当前记录的键由用户提供的前缀、用户提供的分隔符、剩余部分组成,若剩余部分中包含用户提供的分隔符,则将剩余部分中第一个用户提供的分隔符的位置至当前记录的开始位置的字符记为第一结果,并将第一结果添加至键的共同前缀中;查找新记录和键,查找第一结果中最后一个字符的下一个字符,并用查找到的字符替换第一结果的最后一个字符,得到第二结果,查找键值数据库中第一条前缀包含或者大于第二结果的记录,得到新记录和新记录的键,将新记录更新为当前记录,并跳转至查找共同前缀步骤。本发明涉及电子设备与可读存储介质,用于执行一种检索键值数据库中键的共同前缀的方法。本发明根据用户给出的前缀和分隔符在不遍历所有键值对的条件下计算出属于用户给出前缀的键的共同前缀,在千万键值对级别场景下能够有效缩短获取共同前缀的时间。
以上,仅为本发明的较佳实施例而已,并非对本发明作任何形式上的限制;凡本行业的普通技术人员均可按说明书附图所示和以上而顺畅地实施本发明;但是,凡熟悉本专业的技术人员在不脱离本发明技术方案范围内,利用以上所揭示的技术内容而做出的些许更动、修饰与演变的等同变化,均为本发明的等效实施例;同时,凡依据本发明的实质技术对以上实施例所作的任何等同变化的更动、修饰与演变等,均仍属于本发明的技术方案的保护范围之内。