CN108694209A - 基于对象的分布式索引方法和客户端 - Google Patents
基于对象的分布式索引方法和客户端 Download PDFInfo
- Publication number
- CN108694209A CN108694209A CN201710233466.XA CN201710233466A CN108694209A CN 108694209 A CN108694209 A CN 108694209A CN 201710233466 A CN201710233466 A CN 201710233466A CN 108694209 A CN108694209 A CN 108694209A
- Authority
- CN
- China
- Prior art keywords
- key
- osd
- node
- pointer
- interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000010606 normalization Methods 0.000 claims abstract description 142
- 238000003860 storage Methods 0.000 claims abstract description 67
- 230000008859 change Effects 0.000 claims description 15
- 235000013399 edible fruits Nutrition 0.000 claims description 9
- 238000000151 deposition Methods 0.000 claims description 2
- 238000012423 maintenance Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 17
- 101100121776 Arabidopsis thaliana GIG1 gene Proteins 0.000 description 8
- 101100267551 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) YME1 gene Proteins 0.000 description 8
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 239000004744 fabric Substances 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开一种基于对象的分布式索引方法和客户端,该方法包括:客户端获取待存储对象的内容和名称;客户端对待存储对象的名称进行归一化处理以获取第一归一化结果;客户端通过接口获取OSD集群中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;客户端通过接口查询分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点;客户端在新节点构造指针,将新节点的指针设置为后节点的key,将前节点的指针设置为新节点的key。通过指针将对象的key打散在分布式索引中,通过查询分布式索引定位对象,可降低部署和维护的难度。
Description
技术领域
本申请涉及信息技术领域,特别涉及一种基于对象的分布式索引方法和客户端。
背景技术
对象存储技术在现阶段得到广泛应用,在对象存储技术中,存储***设置OSD(Object-based Storage Device,对象存储设备)集群,OSD集群包括多个OSD,每一OSD设置有固定的存储空间,对象存储于OSD集群的OSD中,每一OSD对应有一个key(键),客户端通过key可找到对应的OSD,并从OSD从读取对象。
在现有技术的存储***中,存储***还设置MDS(Metadata Server,元数据服务器),MDS存储了key与key对应的OSD的网络地址之间的关系,OSD集群设置有接口,客户端在获取key之后,通过接口向MDS查询key对应的OSD的网络地址,从而可以根据网络地址访问OSD中的对象。
在现有技术中,由于OSD的存储空间固定,因此在待存储的对象为所需空间大于OSD的存储空间的较大对象时,OSD将不能存储该对象,为了解决该技术问题,现有技术将根据对象的大小设置对应数量的OSD,将对象分为多个部分分别存储在对应数量的OSD中。
因此,现有技术的存储***需进一步设置针对对象的MDS,针对对象的MDS存储对象名称与对应OSD的key之间的对应关系,客户端需要读取对象时,还需根据对象名称在针对对象的进行查询,从而获得该对象存储在哪些OSD中,并分别从该写OSD读取对象。
然而,在现有技术中,客户端既需要向MDS进行查询以获取key对应的OSD的网络地址,又需要向针对对象的MDS进行查询以获取对象的多个OSD的key,当针对对象的出现故障时,客户端不能访问对象,因此针对对象的MDS的存在会增加部署和维护的难度。
发明内容
为解决现有技术的问题,本发明实施例提供一种基于对象的分布式索引方法和客户端,由于通过指针将对象的key打散在分布式索引中,通过查询分布式索引即可定位对象,可降低部署和维护的难度。
第一方面,本发明实施例提供一种基于对象的分布式索引方法,该方法应用于客户端,客户端通过接口与OSD(Object-based Storage Device,对象存储设备)集***互,OSD集群包括多个OSD,客户端通过接口选择OSD作为节点以构造分布式索引,在分布式索引的每一节点中,存储有自身的名称和归一化结果、自身在OSD集群的key(集群)以及指针,归一化结果根据名称产生,指针存储有在分布式索引中的下一节点的key,该方法包括:
客户端获取待存储对象的内容和名称;
客户端对待存储对象的名称进行归一化处理以获取第一归一化结果;
客户端通过接口获取OSD集群中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;
客户端通过接口查询分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点;
客户端通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
综上,在本发明实施例中,客户端通过接口从OSD集群申请OSD,由于通过指针将对象的key打散在分布式索引中,通过查询分布式索引即可定位对象,可降低部署和维护的难度。
在本发明实施例的一种实现方式中,分布式索引包括入口节点,入口节点的指针存储有分布式索引中归一化结果为最小值的节点的key,客户端通过接口查询分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点的步骤具体包括:
客户端通过接口从入口节点开始根据分布式索引中每一节点存储的指针查询分布式索引中的节点存储的归一化结果,直至查询到分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
在本发明实施例的另一种实现方式中,客户端通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key的步骤具体包括:
客户端通过接口在新节点构造指针,将新节点的指针设置为后节点的key;
客户端通过接口在前节点构造日志,将新节点的key存储于日志;
客户端通过接口在将前节点的指针设置为新节点存储的key失败时,从前节点的日志读取新节点的key,将前节点的指针设置为读取到的新节点的key;
客户端通过接口将日志置零。
在本发明实施例的另一种实现方式中,客户端通过接口获取OSD集群中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点具体包括:
客户端在判断到待存储对象的大小大于OSD的存储空间时,将待存储对象分成预定数目的部分,通过接口获取OSD集群中预定数目的空闲OSD的key,将待存储对象的各部分分别存储在空闲OSD以及预定数目的空闲OSD中;
从预定数目的空闲OSD选取任一OSD作为新节点,通过接口将第一归一化结果、名称、内容以及预定数目的空闲OSD的key存储于新节点。
在本发明实施例的另一种实现方式中,分布式索引为跳表,指针包括多个指针,每一指针指向跳表的不同层。
在本发明实施例的另一种实现方式中,该方法还包括:
客户端获取待删除对象的名称;
客户端对名称进行归一化处理以获取第四归一化结果;
客户端通过接口查询分布式索引中存储有第四归一化结果的待删除节点;
客户端通过接口将待删除节点的前节点的指针设置为待删除节点的后节点的key;
客户端通过接口通知OSD集群将待删除节点设置为空闲OSD。
在本发明实施例的另一种实现方式中,客户端通过接口将待删除节点的前节点的指针设置为待删除节点的后节点的key的步骤具体包括:
客户端通过接口在前节点构造日志,将待删除节点存储的key存储于日志;
客户端在通过接口将前节点的指针设置为后节点的key失败时,从前节点的日志读取待删除节点的key,根据待删除节点的key通过接口读取待删除节点的指针存储的后节点的key,将前节点的指针设置为读取到的后节点的key;
客户端通过接口将日志置零。
第二方面,本发明实施例进一步提供一种客户端,客户端通过接口与OSD集***互,OSD集群包括多个OSD,客户端通过接口选择OSD作为节点以构造分布式索引,在分布式索引的每一节点中,存储有自身的名称和归一化结果、自身在OSD集群的key以及指针,归一化结果根据名称产生,指针存储有在分布式索引中的下一节点的key,客户端包括:
待存储对象获取模块,用于获取待存储对象的内容和名称;
归一化模块,用于对待存储对象的名称进行归一化处理以获取第一归一化结果;
新节点生成模块,用于通过接口获取OSD集群中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;
查询模块,用于通过接口查询分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点;
指针修改模块,用于通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
在本发明实施例的另一种实现方式中,分布式索引包括入口节点,入口节点的指针存储有分布式索引中归一化结果为最小值的节点的key,客户端还包括入口记录模块,入口记录模块用于记录入口节点的key,
查询模块,具体用于通过接口从入口节点开始根据分布式索引中每一节点存储的指针查询链表中的节点存储的归一化结果,直至查询到分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
在本发明实施例的另一种实现方式中,指针修改模块,具体用于:
通过接口在新节点构造指针,将新节点的指针设置为后节点的key;
通过接口在前节点构造日志,将新节点的key存储于日志;
通过接口在将前节点的指针设置为新节点存储的key失败时,从前节点的日志读取新节点的key,将前节点的指针设置为读取到的新节点的key;
通过接口将日志置零。
在本发明实施例的另一种实现方式中,新节点生成模块,具体用于:
在判断到待存储对象的大小大于OSD的存储空间时,将待存储对象分成预定数目的部分,通过接口获取OSD集群中预定数目的空闲OSD的key,将待存储对象的各部分分别存储在空闲OSD以及预定数目的空闲OSD中;
从预定数目的空闲OSD选取任一OSD作为新节点,通过接口将第一归一化结果、名称、内容以及预定数目的空闲OSD的key存储于新节点。
在本发明实施例的另一种实现方式中,分布式索引为跳表,指针包括多个指针,每一指针指向跳表的不同层。
在本发明实施例的另一种实现方式中,客户端还包括通知模块,
名称获取模块,还用于获取待删除对象的名称;
归一化模块,还用于对名称进行归一化处理以获取第一归四化结果;
查询模块,还用于通过接口查询分布式索引中存储有第四归一化结果的待删除节点;
指针修改模块,还用于将待删除节点的前节点的指针设置为待删除节点的后节点的key;
通知模块,用于通过接口通知OSD集群将待删除节点设置为空闲OSD。
在本发明实施例的另一种实现方式中,指针修改模块具体用于:
通过接口在前节点构造日志,将待删除节点存储的key存储于日志;
通过接口在将前节点的指针设置为后节点的key失败时,从前节点的日志读取待删除节点的key,根据待删除节点的key通过接口读取待删除节点的指针存储的后节点的key,将前节点的指针设置为读取到的后节点的key;
通过接口将日志置零。
第三方面,本发明实施例提供一种客户端,包括处理器、存储器以及总线,处理器、存储器分别与总线连接,存储器存储有程序指令,其中:
处理器执行第一程序指令以执行步骤:获取待存储对象的内容和名称;
处理器执行第二程序指令以执行步骤:对待存储对象的名称进行归一化处理以获取第一归一化结果;
处理器执行第三程序指令以执行步骤:通过接口获取OSD集群中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;
处理器执行第四程序指令以执行步骤:通过接口查询分布式索引中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果的第三归一化结果的前节点;
处理器执行第五程序指令以执行步骤:通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的存储***的结构示意图;
图2是根据本发明实施例的基于对象的分布式索引方法的流程图;
图3是根据本发明实施例的分布式索引的示意图;
图4是根据本发明实施例的分布式索引的另一示意图;
图5是根据本发明实施例的存储***的另一示意图;
图6是根据本发明实施例的基于对象的分布式索引方法的流程图;
图7是根据本发明实施例的分布式索引的另一示意图;
图8是根据本发明实施例的分布式索引的另一示意图;
图9是根据本发明实施例的客户端的装置结构示意图;
图10是根据本发明实施例的客户端的另一装置结构示意图。
具体实施方式
首先请参见图1,图1是根据本发明实施例的存储***的结构示意图,如图1所示,本发明实施例的存储***包括客户端和OSD集群。
举例而言,客户端的数量可以是多个,如图1所示,客户端包括客户端101、102……n,在另一些示例中,客户端的数量也可是1个,本发明实施例对此不作限定。
OSD集群20包括接口(未绘示)和多个OSD,每一个OSD均对应于物理磁盘的一个固定大小的存储空间,OSD集群20将物理磁盘的存储空间划分为多个OSD,以存储数据。
OSD集群20包括MDS,OSD每一OSD均对应分配有一key,MDS记录了key与存储空间之间的对应关系,举例而言,通过key可在MDS查询到key对应的OSD位于特定网络地址上的物理主机挂载的特定物理磁盘的特定存储空间。
客户端101、102……n通过分布式索引201访问OSD集群20,分布式索引201设置在问OSD集群20的OSD中。
值得注意的是,在本发明实施例中,OSD集群20提供接口,客户端只需以key作为输入参数访问接口,即可从接口访问到key对应的OSD。
具体而言,客户端以key和读取命令作为输入参数访问接口,即可从接口直接读取到OSD内存储的数据;客户端以key、写入命令和待存储对象作为输入参数访问接口,可将待存储对象写入至key对应的存储空间中;进一步,客户端可通过接口向OSD集群20申请空闲的OSD,举例而言,客户端向接口输入申请OSD命令,即可从接口获取空闲的OSD的key;并且客户端可通过接口通知OSD集群20将已存储了待存储对象的OSD回收,举例而言,客户端向接口输入key和撤销OSD命令之后,OSD集群20回收OSD,在后续客户端向接口输入该key以试图对key对应的OSD进行访问时,将接收到接口发送的访问失败通知。
因此,OSD集群20对客户端屏蔽了内部的工作过程,客户端只需通过接口向OSD集群20申请OSD,在接口获取key,并根据key在接口对OSD进行访问即可。
请继续参见图1,在图1中,假设客户端101从OSD集群20申请OSD2、OSD9、OSD3、OSD5、OSD7、OSD1和OSD8,其中上述每一OSD均存储了对应数据,分布式索引201包括OSD2、OSD9、OSD3、OSD5、OSD7、OSD1和OSD8,在上述每一OSD中,存储有自身的名称和归一化结果,自身在OSD集群20的key以及指针,归一化结果根据名称产生,指针存储有在分布式索引201中的下一节点的key,举例而言,OSD2存储有自身名称、根据名称产生的归一化结果以及指针,其中OSD2的指针存储了OSD9的key,因此,客户端101在根据OSD2的key访问OSD2之后,可进一步根据OSD2的指针存储的key通过接口访问OSD9,并通过OSD9存储的指针访问OSD3……,客户端101通过在OSD中设置指针,使得OSD形成分布式索引201,因此客户端101只需记录作为分布式索引201的入口的节点的key,举例而言如OSD2的key,通过分布式索引201从分布式索引201入口可查询所分布式索引201中所有节点。
在本发明实施例中,客户端101通过接口从OSD集群20申请OSD,并将申请到的OSD以分布式索引201的形式进行管理,从而可以避免设置二层MDS,可降低部署和运维的复杂度。
为了进一步清楚说明,以下请参见图2,图2是根据本发明实施例的对象分布式索引201方法的流程图,如图2所示,对象分布式索引201方法包括以下步骤:
步骤S301:客户端101获取待存储对象的内容和名称。
其中,上述的对象包括文件和裸数据。
举例而言,客户端101可通过提供网页以供用户访问,用户在网页上传待存储对象,使得客户端101可获取待存储对象的内容和名称。
在本步骤中,假设待存储对象的名称为“小明”。
步骤S302:客户端101对待存储对象的名称进行归一化处理以获取第一归一化结果。
在本发明实施例中,归一化处理是指将待存储对象的名称转化为可以比较的归一化结果。
举例而言,客户端101可计算名称对应的ASCII(American Standard Code forInformation Interchange,美国信息交换标准代码)码,将名称换算为可以比较的归一化结果,以实现归一化处理。
在另外一些示例中,客户端101也可以对名称进行哈希运算以获取归一化结果,从而实现归一化处理。
假设对“小明”进行归一化处理之后,获得的第一归一化结果为10。
步骤S303:客户端101通过接口获取OSD集群20中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点。
在本步骤中,客户端101可判断待存储对象的大小是否大于OSD的存储空间,且在判断到待存储对象的大小大于OSD的存储空间时,将待存储对象分成预定数目的部分,通过接口获取OSD集群20中预定数目的空闲OSD的key,将待存储对象的各部分分别存储在空闲OSD以及预定数目的空闲OSD中;从预定数目的空闲OSD选取任一OSD作为新节点,通过接口将第一归一化结果、名称、内容以及预定数目的空闲OSD的key存储于新节点。
因此,通过以上方式,本发明实施例可将较大的对象存储于OSD中,从而实现扩容。
在另一些示例中,在客户端101判断到待存储对象的大小小于或等于OSD的存储空间时,无需将待存储对象分割,只需直接将待存储对象存储于所获取的空闲的OSD中即可。
步骤S304:客户端101通过接口查询分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
具体可参见图3,图3是根据本发明实施例的分布式索引201的示意图,图3示出的分布式索引201为单分布式索引201,在该分布式索引201中,包括7个节点,分别为OSD2、OSD9、OSD3、OSD5、OSD7、OSD1和OSD8。
OSD2为分布式索引201的入口节点,其存储有指针、归一化结果和其他数据,指针存储有OSD9的key,归一化结果为负无穷,
OSD8为分布式索引201的结束节点,其存储有指针、归一化结果和其他数据,指针存储有OSD9的key,归一化结果为正无穷。
其他节点分别存储有指针、归一化结果和其他数据,且指针存储的key如图3所示为下一节点的key,其中,其他数据包括对象内容、对象名称、对象长度等。
在本步骤中,客户端101通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
具体而言,客户端101首先访问入口节点OSD2,根据OSD2的指针访问OSD9,获知OSD9的归一化结果为5,由于10大于5,因此客户端101进一步访问OSD9的指针指向的OSD5,获知OSD5的归一化结果为9,由于10大于9,因此客户端101进一步访问OSD5的指针指向的OSD11,由于10小于53,因此客户端101查询到分布式索引201中存储有大于第一归一化结果(10)的第二归一化结果(53)的后节点OSD11和存储有小于第一归一化结果归一化结果(10)的第三归一化结果(9)的前节点OSD5。
步骤S305:客户端101通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
举例而言,可参见图4,图4是根据本发明实施例的分布式索引201的另一示意图,客户端101在OSD9中构造指针,使得OSD9的指针存储OSD7的key,修改OSD7的指针,使得OSD7的指针存储OSD11的key,从而使得OSD7可***到单分布式索引201中。
值得注意的是,在本步骤中,由于上述步骤S303中产生新节点和本步骤修改前节点的指针是两个独立的步骤,无法保证原子性,若本步骤对前节点OSD5的指针修改失败会导致客户端101丢失新节点OSD7的记录,因此在本步骤中,需要在前节点OSD5进一步构造日志,将新节点OSD7的key存储于日志中,在客户端101通过接口在将前节点OSD5的指针设置为新节点OSD7的key失败时,客户端101可从前节点OSD7的日志读取新节点的key,将前节点OSD5的指针设置为读取到的新节点OSD7的key,在设置成功之后,客户端101通过接口将日志置零。
因此,在经过以上步骤之后,客户端101在OSD集群20形成新的分布式索引201,具体如图5所示,图5是根据本发明实施例的存储***的另一示意图,在图5中,OSD2、OSD9、OSD3、OSD5、OSD11、OSD7、OSD1和OSD8形成分布式索引201,其中,OSD11通过上述方法***至图1所示的分布式索引201中。
因此,在本发明实施例中,客户端101通过接口从OSD集群20申请OSD,并将申请到的OSD***分布式索引201,从而可以避免设置二层MDS,可降低部署和运维的复杂度。
以下将对在分布式索引201中删除节点的实施例进行介绍,请参见图6,图6是根据本发明实施例的对象分布式索引201方法的流程图,如图6所示,对象分布式索引201方法包括以下步骤:
步骤S401:客户端101获取待删除对象的名称。
举例而言,客户端101可通过提供网页以供用户访问,用户在网页输入待删除对象的名称,使得客户端101可获取待删除对象的名称。
在本步骤中,假设待删除对象的名称为“小明”。
步骤S402:客户端101对名称进行归一化处理以获取第四归一化结果。
在本发明实施例中,归一化处理是指将待存储对象的名称转化为可以比较的归一化结果。
举例而言,客户端101可计算名称对应的ASCII(American Standard Code forInformation Interchange,美国信息交换标准代码)码,将名称换算为可以比较的归一化结果,以实现归一化处理。
在另外一些示例中,客户端101也可以对名称进行哈希运算以获取归一化结果,从而实现归一化处理。
在另外一些示例中,客户端101也可以对名称进行字典排序来实现归一化处理。
假设对“小明”进行归一化处理之后,获得的第四归一化结果为10。
步骤S403:客户端101通过接口查询分布式索引201中存储有第四归一化结果的待删除节点。
具体而言,分布式索引201包括入口节点,入口节点存储有负无穷归一化结果,客户端101通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有第一归一化结果的节点。
根据以上描述,OSD2为入口节点,客户端101首先访问OSD2,获知OSD2的归一化结果为负无穷,根据OSD2的指针访问OSD9,获知OSD9的归一化结果为5,由于10大于5,因此客户端101进一步访问OSD9的指针指向的OSD5,获知OSD5的归一化结果为9,由于10大于9,因此客户端101进一步访问OSD5的指针指向的OSD7,OSD7的归一化结果是10,因此客户端101将节点OSD7作为待删除节点。
步骤S404:客户端101通过接口将待删除节点的前节点的指针设置为待删除节点的后节点的key。
在本步骤中,客户端101通过接口将OSD7的前节点OSD5的指针设置为OSD1的key。
步骤S405:客户端101通过接口通知OSD集群20将待删除节点设置为空闲OSD。
在本步骤中,客户端101通过以上方式通知OSD集群20回收待删除节点,可有效回收OSD资源,不会造成空闲OSD被占用。
进一步,在本步骤中,客户端101可查询待删除节点是否还存储有如步骤S303所述的用于存储较大对象的OSD的key,如果是,客户端101进一步通过接口通知OSD集群20将用于存储较大对象的OSD设置为空闲OSD。
值得注意的是,由于本步骤与上一步骤步骤S404修改前节点的指针是两个独立的步骤,无法保证原子性,即若步骤S404执行失败时,客户端101会丢失待删除节点的key,从而导致步骤S404与步骤S405执行失败。
为此,在步骤S404中,客户端101通过接口在前节点构造日志,将待删除节点存储的key存储于日志,且在客户端101在通过接口将前节点的指针设置为后节点的key失败时,从前节点的日志读取待删除节点节点的key,根据待删除节点的key通过接口读取新节点的指针存储的后节点的key,将前节点的指针设置为读取到的后节点的key,从而保证修改前节点的指针失败时,不会丢失待删除节点的key,值得注意的是,在修改前节点的指针成功后,前节点的日志无需记录待删除节点的key,此时客户端101可通过接口将日志置零。
综上,在本发明实施例中,客户端101通过接口从OSD集群20申请OSD,并将申请到的OSD从分布式索引201删除,从而可以避免设置二层MDS,可降低部署和运维的复杂度。
以上介绍的分布式索引201为单分布式索引201,值得注意的是,在本发明的可选实施例中,分布式索引201还可为跳表和二叉树,其中跳表尤其适合于在所存储的对象数量较大的情况。
具体可结合图7和图8进行参考,其中图7是根据本发明实施例的分布式索引201的另一示意图,图7所示分布式索引201为跳表,指针包括多个指针,每一指针指向跳表的不同层。
举例而言,OSD2存储了第1层指针、第2层指针、第3层指针以及第4层指针,每一指针存储各层对应的节点,当客户端101要在图7所示的跳表中找到OSD7(归一化结果10)时,先查找入口节点OSD2最高层指向的同一层的节点,即第4层指针指向的OSD8,由于OSD8的归一化结果为正无穷,因此查找次高层(第3层)指向的同一层的节点OSD1,其归一化结果为78与10不一致,因此查找第2层指针指向的OSD3,OSD3的归一化结果为5,小于10,于是查找OSD3的第2层指向的OSD1,由于OSD1的归一化结果为53,大于10,因此查找OSD3的第1层指向的OSD5,在查询到OSD5的归一化结果9小于10时,进一步查找OSD5的第1层指向的OSD7,由于OSD7的归一化结果是10,因此确认OSD7是所要查询的节点。
指针的层数越多,则查找速度越快,具体可参见图8,图8是根据本发明实施例的分布式索引201的另一示意图,与图7不同的是,在图8中,OSD7存储了4层指针,因此,当客户端101要在图8所示的跳表中找到OSD7(归一化结果10)时,先查找入口节点OSD2最高层指向的同一层的节点,即第4层指针指向的OSD7,由于OSD87的归一化结果为10,因此确认OSD7是所要查询的节点。
值得注意的是,每个节点都设置有多层指针的话,会严重影响分布式索引201查找速度,因此需限制每个节点的层数,具体可参照现有的“抛硬币”算法来确定每一节点的层数,举例而言,针对OSD2而言,通过“抛硬币”算法来确定是否增加第2层指针,若抛得硬币是正面,则增加第2层指针,若抛到硬币是反面,则只保留第1层指针,且在增加第2层指针之后,进一步通过抛硬币来确定是否增加第3层指针……,在***新节点时,均用以上方式处理,从而使得多层指针分布均匀,不会影响分布式索引201查找速度。
进一步,客户端101也可以对已查询到的节点进行缓存,当所要查询的归一化结果在缓存中存在时,无需到分布式索引201查询,在本地读取缓存即可。
在每个客户端101内部缓存自己访问频繁的节点,从而天然形成热节点的多个副本分担热点,同时由于业务节点在访问热节点时直接从内部缓存访问,也降低了对OSD的压力。
举例而言,缓存采用LRU(Least recently used,最近最少使用)的方式组织,由于节点是全局共享的,那么缓存会涉及到一致性的问题,所以此缓存可用于在定位节点时使用,在缓存中找到了相关节点后,需要再直接访问OSD对此节点的存储的内容进行确认,Key不一致或者节点不存在那么删除缓存,如果其他内容不一致那么更新缓存。并且,缓存只能缓存普通节点,处于添加删除节点事务中的节点不能缓存,以免引起更加复杂的一致性问题。
举例而言,本发明实施例涉及对OSD内数据更改可采用CAS(Compare and swap,比较与交换)操作,一般地,CAS操作要求传入旧值,如:
bool compare_and_set(osd_key_t key,void*old_value,void*new_value);
其中key是元数据,表示OSD中对象位置,如写入的位置offset,写入数据长度length等,old_value,旧值,即写入发生前此OSD对象内的数据;new_value,待写入的数据。
本发明方案对CAS操作做如下改进,使用但不限于checksum(校验值)、版本号等替代旧值:
1、使用checksum值替代旧值,比如使用HASH32(哈希32算法)或MD5(Message-Digest Algorithm 5,信息-摘要算法5)等,更改时先计算当前内容的checksum值,如果与传入相同则进行更改。
2、使用版本标识替代旧值,即在要更改的数据结构内增加一个版本号标识,每次变更成功则更新版本标识(比如一个自增的归一化结果,每次变更成功+1),更改时传入旧的版本标识,当前内容版本标识与传入的一致时进行更改。
通过以上方式,可有效降低所需传输的数据量。
本发明实施例进一步提供一种客户端101,客户端101通过接口与OSD集群20交互,OSD集群20包括多个OSD,客户端101通过接口选择OSD作为节点以构造分布式索引201,在分布式索引201的每一节点中,存储有自身的名称和归一化结果、自身在OSD集群20的key以及指针,归一化结果根据名称产生,指针存储有在分布式索引201中的下一节点的key,具体请参见图9,图9是根据本发明实施例的客户端的装置结构示意图,如图9所示,客户端101包括:
待存储对象获取模块501,用于获取待存储对象的内容和名称;
归一化模块502,用于对待存储对象的名称进行归一化处理以获取第一归一化结果;
新节点生成模块503,用于通过接口获取OSD集群20中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;
查询模块504,用于通过接口查询分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点;
指针修改模块505,用于通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
可选地,分布式索引201包括入口节点,入口节点存储有负无穷归一化结果,客户端101还包括入口记录模块,入口记录模块用于记录入口节点的key,
查询模块504,具体用于通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
可选地,指针修改模块505,具体用于:
通过接口在新节点构造指针,将新节点的指针设置为后节点的key;通过接口在前节点构造日志,将新节点的key存储于日志;通过接口在将前节点的指针设置为新节点存储的key失败时,从前节点的日志读取新节点的key,将前节点的指针设置为读取到的新节点的key;通过接口将日志置零。
可选地,新节点生成模块503,具体用于:
在判断到待存储对象的大小大于OSD的存储空间时,将待存储对象分成预定数目的部分,通过接口获取OSD集群20中预定数目的空闲OSD的key,将待存储对象的各部分分别存储在空闲OSD以及预定数目的空闲OSD中;从预定数目的空闲OSD选取任一OSD作为新节点,通过接口将第一归一化结果、名称、内容以及预定数目的空闲OSD的key存储于新节点。
可选地,分布式索引201为跳表,指针包括多个指针,每一指针指向跳表的不同层。
可选地,本发明实施例的客户端101进一步包括通知模块505,其中:
名称获取模块501,还用于获取待删除对象的名称;
归一化模块502,用于对名称进行归一化处理以获取第一归一化结果;
查询模块503,用于通过接口查询分布式索引201中存储有第一归一化结果的待删除节点;
指针修改模块504,用于将待删除节点的前节点的指针设置为待删除节点的后节点的key;
通知模块505,用于通过接口通知OSD集群20将待删除节点设置为空闲OSD。
可选地,分布式索引201包括入口节点,入口节点的指针存储有分布式索引201中归一化结果为最小值的节点,客户端101还包括入口记录模块,入口记录模块用于记录入口节点的key,查询模块603具体用于:
通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有第一归一化结果的节点。
可选地,指针修改模块604具体用于:
通过接口在前节点构造日志,将新节点存储的key存储于日志;
通过接口在将前节点的指针设置为后节点的key失败时,从前节点的日志读取新节点的key,根据新节点的key通过接口读取新节点的指针存储的后节点的key,将前节点的指针设置为读取到的后节点的key。
可选地,指针修改模块604还用于通过接口将日志置零。
可选地,分布式索引201为跳表,指针包括多个指针,每一指针指向跳表的不同层。
以下请参见图9,图9是根据本发明实施例的客户端的另一装置结构示意图,如图9所示,客户端101包括处理器701、存储器702以及总线703,处理器701、存储器702分别与总线703连接,存储器702存储有程序指令,处理器701执行程序指令以完成以上实施例介绍的客户端101的功能,其中:
处理器701执行第一程序指令以执行步骤S301:获取待存储对象的内容和名称;
处理器701执行第二程序指令以执行步骤S302:对待存储对象的名称进行归一化处理以获取第一归一化结果;
处理器701执行第三程序指令以执行步骤S303:通过接口获取OSD集群20中空闲OSD的key,通过接口将第一归一化结果、名称、内容以及空闲OSD的key存储于空闲的OSD,从而产生新节点;
处理器701执行第四程序指令以执行步骤S304:通过接口查询分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点;
处理器701执行第五程序指令以执行步骤S305:通过接口在新节点构造指针,将新节点的指针设置为后节点的key,并将前节点的指针设置为新节点的key。
可选地,分布式索引201包括入口节点,入口节点存储的指针存储有分布式索引201中归一化结果为最小值的节点,存储器702记录入口节点的key,处理器701执行第四程序指令以通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有大于第一归一化结果的第二归一化结果的后节点和存储有小于第一归一化结果归一化结果的第三归一化结果的前节点。
可选地,处理器701执行第五程序指令以通过接口在新节点构造指针,将新节点的指针设置为后节点的key;通过接口在前节点构造日志,将新节点的key存储于日志;通过接口在将前节点的指针设置为新节点存储的key失败时,从前节点的日志读取新节点的key,将前节点的指针设置为读取到的新节点的key;通过接口将日志置零。
可选地,处理器701执行第三程序指令以在判断到待存储对象的大小大于OSD的存储空间时,将待存储对象分成预定数目的部分,通过接口获取OSD集群20中预定数目的空闲OSD的key,将待存储对象的各部分分别存储在空闲OSD以及预定数目的空闲OSD中;从预定数目的空闲OSD选取任一OSD作为新节点,通过接口将第一归一化结果、名称、内容以及预定数目的空闲OSD的key存储于新节点。
可选地,分布式索引201为跳表,指针包括多个指针,每一指针指向跳表的不同层。
以下请参见10,图10是根据本发明实施例的客户端的另一装置结构示意图,如图10所示,客户端101包括处理器801、存储器802以及总线803,处理器801、存储器802分别与总线803连接,存储器802存储有程序指令,处理器801执行程序指令以完成以上实施例介绍的客户端101的功能,其中:
处理器801执行第一程序指令以执行步骤S401:获取待删除对象的名称;
处理器801执行第二程序指令以执行步骤S402:对名称进行归一化处理以获取第四归一化结果;
处理器801执行第三程序指令以执行步骤S403:通过接口查询分布式索引201中存储有第一归一化结果的待删除节点;
处理器801执行第四程序指令以执行步骤S404:通过接口将待删除节点的前节点的指针设置为待删除节点的后节点的key;
处理器801执行第五程序指令以执行步骤S405:通过接口通知OSD集群20将待删除节点设置为空闲OSD。
可选地,分布式索引201包括入口节点,入口节点存储有负无穷归一化结果,存储器802还用于记录入口节点的key,处理器801执行第三程序指令以通过接口从入口节点开始根据分布式索引201中每一节点存储的指针查询分布式索引201中的节点存储的归一化结果,直至查询到分布式索引201中存储有第一归一化结果的节点。
可选地,处理器801执行第四程序指令以通过接口在前节点构造日志,将新节点存储的key存储于日志;通过接口在将前节点的指针设置为后节点的key失败时,从前节点的日志读取新节点的key,根据新节点的key通过接口读取新节点的指针存储的后节点的key,将前节点的指针设置为读取到的后节点的key。
可选地,处理器801执行第四程序指令以通过接口将日志置零。
可选地,分布式索引201为跳表,指针包括多个指针,每一指针指向跳表的不同层。
综上,在本发明实施例中,客户端101通过接口从OSD集群20申请OSD,并将申请到的OSD以分布式索引201的形式进行管理,从而可以避免设置二层MDS,可降低部署和运维的复杂度。
需说明的是,以上描述的任意装置实施例都仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部进程来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,进程之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
所属领域的技术人员可以清楚地了解到,上述描述的***、装置或单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (15)
1.一种基于对象的分布式索引方法,其特征在于,所述方法应用于客户端,所述客户端通过接口与OSD(Object-based Storage Device,对象存储设备)集***互,所述OSD集群包括多个OSD,所述客户端通过所述接口选择OSD作为节点以构造分布式索引,在所述分布式索引的每一所述节点中,存储有自身的名称和归一化结果、自身在所述OSD集群的key(集群)以及指针,所述归一化结果根据所述名称产生,所述指针存储有在所述分布式索引中的下一节点的key,所述方法包括:
所述客户端获取待存储对象的内容和名称;
所述客户端对所述待存储对象的名称进行归一化处理以获取第一归一化结果;
所述客户端通过所述接口获取所述OSD集群中空闲OSD的key,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述空闲OSD的key存储于所述空闲的OSD,从而产生新节点;
所述客户端通过所述接口查询所述分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果归一化结果的第三归一化结果的前节点;
所述客户端通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key,并将所述前节点的指针设置为所述新节点的key。
2.根据权利要求1所述的方法,其特征在于,所述分布式索引包括入口节点,所述入口节点的指针存储有所述分布式索引中归一化结果为最小值的节点的key,所述客户端通过所述接口查询所述分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果归一化结果的第三归一化结果的前节点的步骤具体包括:
所述客户端通过所述接口从所述入口节点开始根据所述分布式索引中每一节点存储的指针查询所述分布式索引中的节点存储的归一化结果,直至查询到所述分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果归一化结果的第三归一化结果的前节点。
3.根据权利要求1所述的方法,其特征在于,所述客户端通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key,并将所述前节点的指针设置为所述新节点的key的步骤具体包括:
所述客户端通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key;
所述客户端通过所述接口在所述前节点构造日志,将所述新节点的key存储于所述日志;
所述客户端通过所述接口在将所述前节点的指针设置为所述新节点存储的key失败时,从所述前节点的日志读取所述新节点的key,将所述前节点的指针设置为读取到的所述新节点的key;
所述客户端通过所述接口将所述日志置零。
4.根据权利要求3所述的方法,其特征在于,所述客户端通过所述接口获取所述OSD集群中空闲OSD的key,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述空闲OSD的key存储于所述空闲的OSD,从而产生新节点具体包括:
所述客户端在判断到所述待存储对象的大小大于所述OSD的存储空间时,将所述待存储对象分成预定数目的部分,通过所述接口获取所述OSD集群中所述预定数目的空闲OSD的key,将所述待存储对象的各部分分别存储在所述空闲OSD以及所述预定数目的空闲OSD中;
从所述预定数目的空闲OSD选取任一OSD作为所述新节点,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述预定数目的空闲OSD的key存储于所述新节点。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述分布式索引为跳表,所述指针包括多个指针,每一所述指针指向所述跳表的不同层。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述客户端获取待删除对象的名称;
所述客户端对所述名称进行归一化处理以获取第四归一化结果;
所述客户端通过所述接口查询所述分布式索引中存储有所述第四归一化结果的待删除节点;
所述客户端通过所述接口将所述待删除节点的前节点的指针设置为所述待删除节点的后节点的key;
所述客户端通过所述接口通知所述OSD集群将所述待删除节点设置为空闲OSD。
7.根据权利要求6所述的方法,其特征在于,所述客户端通过所述接口将所述待删除节点的前节点的指针设置为所述待删除节点的后节点的key的步骤具体包括:
所述客户端通过所述接口在所述前节点构造日志,将所述待删除节点存储的key存储于所述日志;
所述客户端在通过所述接口将所述前节点的指针设置为所述后节点的key失败时,从所述前节点的日志读取所述待删除节点的key,根据所述待删除节点的key通过所述接口读取所述待删除节点的指针存储的后节点的key,将所述前节点的指针设置为读取到的所述后节点的key;
所述客户端通过所述接口将所述日志置零。
8.一种客户端,其特征在于,所述客户端通过接口与OSD集***互,所述OSD集群包括多个OSD,所述客户端通过所述接口选择OSD作为节点以构造分布式索引,在所述分布式索引的每一所述节点中,存储有自身的名称和归一化结果、自身在所述OSD集群的key以及指针,所述归一化结果根据所述名称产生,所述指针存储有在所述分布式索引中的下一节点的key,所述客户端包括:
待存储对象获取模块,用于获取待存储对象的内容和名称;
归一化模块,用于对所述待存储对象的名称进行归一化处理以获取第一归一化结果;
新节点生成模块,用于通过所述接口获取所述OSD集群中空闲OSD的key,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述空闲OSD的key存储于所述空闲的OSD,从而产生新节点;
查询模块,用于通过所述接口查询所述分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果归一化结果的第三归一化结果的前节点;
指针修改模块,用于通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key,并将所述前节点的指针设置为所述新节点的key。
9.根据权利要求8所述的客户端,其特征在于,所述分布式索引包括入口节点,所述入口节点的指针存储有所述分布式索引中归一化结果为最小值的节点的key,所述客户端还包括入口记录模块,所述入口记录模块用于记录所述入口节点的key,
所述查询模块,具体用于通过所述接口从所述入口节点开始根据所述分布式索引中每一节点存储的指针查询所述链表中的节点存储的归一化结果,直至查询到所述分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果归一化结果的第三归一化结果的前节点。
10.根据权利要求8所述的客户端,其特征在于,所述指针修改模块,具体用于:
通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key;
通过所述接口在所述前节点构造日志,将所述新节点的key存储于所述日志;
通过所述接口在将所述前节点的指针设置为所述新节点存储的key失败时,从所述前节点的日志读取所述新节点的key,将所述前节点的指针设置为读取到的所述新节点的key;
通过所述接口将所述日志置零。
11.根据权利要求10所述的客户端,其特征在于,新节点生成模块,具体用于:
在判断到所述待存储对象的大小大于所述OSD的存储空间时,将所述待存储对象分成预定数目的部分,通过所述接口获取所述OSD集群中所述预定数目的空闲OSD的key,将所述待存储对象的各部分分别存储在所述空闲OSD以及所述预定数目的空闲OSD中;
从所述预定数目的空闲OSD选取任一OSD作为所述新节点,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述预定数目的空闲OSD的key存储于所述新节点。
12.根据权利要求8至11任一项所述的客户端,其特征在于,所述分布式索引为跳表,所述指针包括多个指针,每一所述指针指向所述跳表的不同层。
13.根据权利要求8所述的客户端,其特征在于,所述客户端还包括通知模块,
所述名称获取模块,还用于获取待删除对象的名称;
所述归一化模块,还用于对所述名称进行归一化处理以获取第一归四化结果;
所述查询模块,还用于通过所述接口查询所述分布式索引中存储有所述第四归一化结果的待删除节点;
所述指针修改模块,还用于将所述待删除节点的前节点的指针设置为所述待删除节点的后节点的key;
所述通知模块,用于通过所述接口通知所述OSD集群将所述待删除节点设置为空闲OSD。
14.根据权利要求13所述的客户端,其特征在于,所述指针修改模块具体用于:
通过所述接口在所述前节点构造日志,将所述待删除节点存储的key存储于所述日志;
通过所述接口在将所述前节点的指针设置为所述后节点的key失败时,从所述前节点的日志读取所述待删除节点的key,根据所述待删除节点的key通过所述接口读取所述待删除节点的指针存储的后节点的key,将所述前节点的指针设置为读取到的所述后节点的key;
通过所述接口将所述日志置零。
15.一种客户端,其特征在于,包括处理器、存储器以及总线,所述处理器、所述存储器分别与所述总线连接,所述存储器存储有程序指令,其中:
所述处理器执行第一程序指令以执行步骤:获取待存储对象的内容和名称;
所述处理器执行第二程序指令以执行步骤:对所述待存储对象的名称进行归一化处理以获取第一归一化结果;
所述处理器执行第三程序指令以执行步骤:通过接口获取OSD集群中空闲OSD的key,通过所述接口将所述第一归一化结果、所述名称、所述内容以及所述空闲OSD的key存储于所述空闲的OSD,从而产生新节点;
所述处理器执行第四程序指令以执行步骤:通过所述接口查询分布式索引中存储有大于所述第一归一化结果的第二归一化结果的后节点和存储有小于所述第一归一化结果的第三归一化结果的前节点;
所述处理器执行第五程序指令以执行步骤:通过所述接口在所述新节点构造指针,将所述新节点的指针设置为所述后节点的key,并将所述前节点的指针设置为所述新节点的key。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710233466.XA CN108694209B (zh) | 2017-04-11 | 2017-04-11 | 基于对象的分布式索引方法和客户端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710233466.XA CN108694209B (zh) | 2017-04-11 | 2017-04-11 | 基于对象的分布式索引方法和客户端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108694209A true CN108694209A (zh) | 2018-10-23 |
CN108694209B CN108694209B (zh) | 2021-11-19 |
Family
ID=63843322
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710233466.XA Active CN108694209B (zh) | 2017-04-11 | 2017-04-11 | 基于对象的分布式索引方法和客户端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108694209B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109669822A (zh) * | 2018-11-28 | 2019-04-23 | 平安科技(深圳)有限公司 | 电子装置、备用存储池的创建方法和计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1197570A (zh) * | 1995-08-02 | 1998-10-28 | 汤姆森消费电子有限公司 | 屏幕显示的链接目录结构 |
CN1514976A (zh) * | 1998-07-24 | 2004-07-21 | �ָ��� | 用于进行对象检索的分布式计算机数据库***和方法 |
US20100161614A1 (en) * | 2008-12-22 | 2010-06-24 | Electronics And Telecommunications Research Institute | Distributed index system and method based on multi-length signature files |
CN101996217A (zh) * | 2009-08-24 | 2011-03-30 | 华为技术有限公司 | 一种存储数据的方法及其存储设备 |
CN102779185B (zh) * | 2012-06-29 | 2014-11-12 | 浙江大学 | 一种高可用分布式全文索引方法 |
CN106095920A (zh) * | 2016-06-07 | 2016-11-09 | 四川大学 | 面向大规模高维空间数据的分布式索引方法 |
-
2017
- 2017-04-11 CN CN201710233466.XA patent/CN108694209B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1197570A (zh) * | 1995-08-02 | 1998-10-28 | 汤姆森消费电子有限公司 | 屏幕显示的链接目录结构 |
CN1514976A (zh) * | 1998-07-24 | 2004-07-21 | �ָ��� | 用于进行对象检索的分布式计算机数据库***和方法 |
US20100161614A1 (en) * | 2008-12-22 | 2010-06-24 | Electronics And Telecommunications Research Institute | Distributed index system and method based on multi-length signature files |
CN101996217A (zh) * | 2009-08-24 | 2011-03-30 | 华为技术有限公司 | 一种存储数据的方法及其存储设备 |
CN102779185B (zh) * | 2012-06-29 | 2014-11-12 | 浙江大学 | 一种高可用分布式全文索引方法 |
CN106095920A (zh) * | 2016-06-07 | 2016-11-09 | 四川大学 | 面向大规模高维空间数据的分布式索引方法 |
Non-Patent Citations (1)
Title |
---|
胡永奎: ""对象存储文件***的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109669822A (zh) * | 2018-11-28 | 2019-04-23 | 平安科技(深圳)有限公司 | 电子装置、备用存储池的创建方法和计算机可读存储介质 |
CN109669822B (zh) * | 2018-11-28 | 2023-06-06 | 平安科技(深圳)有限公司 | 电子装置、备用存储池的创建方法和计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108694209B (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103067433B (zh) | 一种分布式存储***的数据迁移方法、设备和*** | |
KR102195836B1 (ko) | 인덱스 관리 방법 | |
CN109376156B (zh) | 读取具有存储感知的混合索引的方法 | |
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
CN103106286B (zh) | 元数据的管理方法和装置 | |
US20080010325A1 (en) | Data migration apparatus, method, and program | |
JP2018518733A (ja) | ファイル操作方法及び装置 | |
US11775480B2 (en) | Method and system for deleting obsolete files from a file system | |
WO2015118865A1 (ja) | 情報処理装置、情報処理システム及びデータアクセス方法 | |
CN110147345A (zh) | 一种基于rdma的键值存储***及其工作方法 | |
JP2001101042A (ja) | データ管理システム及びデータ管理方法 | |
WO2014190700A1 (zh) | 一种内存访问的方法、缓冲调度器和内存模块 | |
CN109408539A (zh) | 数据操作方法、装置、服务器和存储介质 | |
CN106796588A (zh) | 索引表的更新方法和设备 | |
CN108694209A (zh) | 基于对象的分布式索引方法和客户端 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN110059026A (zh) | 一种目录处理方法、装置及存储*** | |
KR102214697B1 (ko) | 데이터베이스 관리 시스템에서 데이터 저장을 위한 공간 관리를 제공하는 컴퓨터 프로그램 | |
CN111209304A (zh) | 数据处理方法、装置及*** | |
KR100785774B1 (ko) | 객체 기반 파일 입출력 시스템 및 방법 | |
JP2014174870A (ja) | 仮想ファイルアクセスシステム、仮想ファイルアクセス方法、及び、仮想ファイルアクセスプログラム | |
CN116821058B (zh) | 元数据访问方法、装置、设备及存储介质 | |
CN116644006B (zh) | 一种内存页面管理方法、***、装置、设备及计算机介质 | |
CN110727465B (zh) | 一种基于配置查找表的协议可重构一致性实现方法 | |
US11327940B2 (en) | Interlinked tuples in coordination namespace |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220221 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |