一种分布式实时搜索引擎的实现方法转让专利

申请号 : CN201110137785.3

文献号 : CN102169507B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 程行荣季刚陈青溪时宜

申请人 : 厦门雅迅网络股份有限公司

摘要 :

本发明涉及搜索引擎技术领域,尤其涉及一种分布式实时搜索引擎。本发明的分布式实时搜索引擎的实现方法,其系统构建和运行至少包括以下步骤:A.设计系统的功能性结构,B.设计系统的数据索引结构,C.索引的创建,D.索引的更新,E.索引的检索。本发明的分布式实时搜索引擎能够在系统的内存中同时构建更新时索引和合并时索引,索引检索时通过同时访问更新时索引和合并时索引,当更新时索引的文档数量积累到阈值后,更新索引提交到磁盘索引并变更为合并时索引,原有的合并时索引变更为新的更新时索引,保证了正在更新中的数据也能够被检索到,提高了搜索引擎可检索数据的实时性。

权利要求 :

1.一种分布式实时搜索引擎的实现方法,其系统构建和运行至少包括以下步骤:

A.设计系统的功能性结构,该功能性结构是在基于Master/Slave的集群式系统中创建,包括以下功能节点:中心控制节点、索引数据存储节点和对外服务节点,其中,所述的中心控制节点创建于Master系统中,所述的索引数据存储节点和对外服务节点创建于Slave系统中,所述的中心控制节点,用于数据索引结构中索引的属性信息的存储和维护,以及索引数据存储节点的属性信息的存储和维护,所述的索引数据存储节点用于数据索引结构中索引分片的创建、更新和检索,所述的对外服务节点用于接收索引的创建、更新和检索请求并将该请求转发至中心控制节点进行处理;

B.设计系统的数据索引结构,该索引结构从上到下的树形层次构成是:索引、索引分片、段、文档和域,其中,所述的索引在一个系统中可以有多个,所述的一个索引分片是所述索引被分割后的一个数据块,其中,属于同一索引的各个索引分片存储在索引数据存储节点上,所述的一个索引分片是由一至多个段构成,所述的一个段是由一至多个文档构成,一个段中所含的各个文档可以是不同的数据对象类型,所述的一个文档在系统全局中具有唯一标识的键值,所述的文档的结构包含用于描述文档类型的域;

C.索引的创建,包括以下步骤:

C1.对外服务节点接收到索引创建请求后将该请求转发至中心控制节点,中心控制节点解析该索引创建请求,从中提取待创建索引的属性信息,并验证该属性信息是否是完备的和有效的,如果该属性信息完备并且有效,则进行步骤C2的处理,如果该属性信息不完备或者无效,则发送应答失败信息至对外服务节点;

C2.中心控制节点根据步骤C1中生成的待创建索引的属性信息中的索引分片数将待创建索引分割为若干分片,同时,根据存储于中心控制节点中的索引数据存储节点的属性信息,来判断每个索引数据存储节点的状态和负载情况,并依此来确定每个索引分片在哪个索引数据存储节点中存储和创建,然后将待创建索引的属性信息发送至各个相对应的索引数据存储节点;索引数据存储节点根据收到的待创建索引的属性信息,在该索引数据存储节点上构建中心控制节点分派的所述待创建索引的一个索引分片,如果该索引数据存储节点创建该索引分片失败,则中心控制节点将该索引分片分派给其他的状态良好、负载相对比较小的索引数据存储节点来创建,直至该待创建索引的全部索引分片在索引数据存储节点中创建完成或者创建失败,进行步骤C3的处理;

C3.如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建完成,中心控制节点更新存储于其中的索引数据存储节点属性信息,并发送索引分片创建成功的应答信息至对外服务节点;如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建失败,则向对外服务节点发送创建索引失败的应答;

D.索引的更新,包括以下步骤:

D1.对外服务节点接收到索引更新请求后将该请求转发至中心控制节点,中心控制节点根据存储于其中的索引属性信息和索引数据存储节点属性信息,将该索引更新请求发送至该索引的索引分片所在的索引数据存储节点;

D2.索引数据存储节点根据收到的索引更新请求,在待更新索引所在索引数据存储节点的索引分片上,将更新文档存储于新的段中,如果更新文档存储成功,则将该更新文档相对应的旧文档在新的段中标记为删除状态,并返回索引更新成功信息至中心控制节点,如果更新文档存储失败,则返回索引更新失败信息至中心控制节点,中心控制节点最后将索引更新成功或失败的信息发送至对外服务节点;

该步骤D的索引更新,还包括文档的删除步骤:当索引更新请求仅为删除文档命令时,在待删除文档所在的索引数据存储节点的存储分片上,在新的段中将该文档标记为删除;

该步骤D的索引更新,还包括构建实时索引的步骤:在系统的内存中同时构建更新时索引和合并时索引,索引的检索是通过访问该更新时索引和合并时索引进行,在进行索引更新时,更新中的索引为所述的更新时索引,当该更新时索引的文档数量达到阈值或者该更新时索引的更新时间达到阈值时,系统提交该更新时索引到磁盘索引中,之后变更该更新时索引为合并时索引并同时变更之前的合并时索引为更新时索引;

E.索引的检索,包括以下步骤:

E1.对外服务节点接收索引的检索请求后将其发送至中心控制节点,中心控制节点解析该检索请求并判断其所针对的目标索引,然后根据索引数据存储节点属性信息和目标索引的属性信息,查找该目标索引的所有索引分片,并向存储每个分片的索引数据存储节点分派检索请求;

E2.索引数据存储节点根据收到的检索请求,在其存储的相应索引分片上检索相关文档,最后将检索结果排序后发送至对外服务节点;

E3.对外服务节点将接收到的各个索引数据存储节点的检索结果整合、排序后发送至客户端。

2.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:步骤A所述系统的功能性结构,还包括一备用中心控制节点,所述中心控制节点实时地将其存储的数据同步备份至备用中心控制节点,当中心控制节点发生故障期时,该备用中心控制节点变更为中心控制节点,当原中心控制节点从故障中恢复,原中心控制节点变更为新的备用中心控制节点。

3.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:所述的索引数据存储节点和对外服务节点周期性地向所述中心控制节点发送表征其状态信息的心跳信号,如果中心控制节点在预设的时间内没有收到心跳信号,则标记该索引数据存储节点或对外服务节点为死亡,同时,中心控制节点会将标记为死亡的索引数据存储节点中存储的所有索引分片,从其他索引数据存储节点中存储的这些索引分片的副本中再拷贝一份到其他的未存储任何该索引分片副本的索引数据存储节点中,使得索引分片的副本数保持不变,以保证索引分片在任意时刻都是可用的;所述的索引数据存储节点向中心控制节点中发生的心跳信号中,包含该索引数据存储节点的负载信息,在索引创建的过程中,中心控制节点会将索引分片尽量分配给负载小的索引数据存储节点存储,同样,在索引检索的过程中,中心控制节点会将检索请求尽量提交给负载小的索引分片或该分片副本所在的索引数据存储节点处理。

4.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:所述的索引数据存储节点属性信息包括:节点的ID、节点的名称、节点的类型、节点的状态、节点的负载和节点的位置,所述的索引属性信息包括:索引的名称、索引中文档的结构定义、索引的分片数、索引分片的副本数和索引分片及索引分片副本的存储节点ID。

5.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:步骤B所述系统的数据索引结构中,每一个索引分片还具有复数个索引分片副本,该索引分片副本在步骤C所述的索引创建时创建,在步骤D所述的索引更新时在原索引分片更新后异步更新,其跟原索引分片存储在不同的索引数据存储节点上;原索引分片所在的索引数据存储节点负责处理针对该索引分片的更新请求,当原索引分片更新完毕后,原索引分片所在的索引数据存储节点负责将更新请求异步地发送给对应的索引分片副本所在的索引数据存储节点进行索引分片副本的更新;索引分片副本与对应的原索引分片都支持索引检索,中心控制节点根据原索引分片和索引分片副本所在索引数据存储节点的负载情况,将索引检索请求提交给负载小的索引分片或索引分片副本所在索引数据存储节点处理。

6.如权利要求5所述的分布式实时搜索引擎的实现方法,其特征在于:中心控制节点定期检查全部的索引中各个索引的索引分片副本的数目,当索引分片副本的数目低于预设的设定个数时,系统自动复制该索引分片的副本到其他索引数据存储节点中;当存储原索引分片的索引数据存储节点出现故障时,系统从对应的索引分片副本中选取一个接替原索引分片的索引更新工作,该索引分片副本成为新的原索引分片,然后在其他索引数据存储节点中在生成一个索引分片副本,保证该索引分片的副本数保持不变;当存储索引分片副本的索引数据存储节点出现故障时,系统会在其他索引数据存储节点中生成一个与原索引分片一样的副本,保证该索引分片的副本数保持不变。

7.如权利要求5所述的分布式实时搜索引擎的实现方法,其特征在于:同一索引的各个索引分片和索引分片副本创建和存储在索引数据存储节点上,是按照如下的策略进行:中心控制节点根据索引数据存储节点的属性信息中节点的负载信息,将所述索引分片和索引分片副本分配至负载最轻的索引数据存储节点,当可用的索引数据存储节点的数目少于索引分片的数目时,中心控制节点分配多个索引分片至同一个索引数据存储节点,中心控制节点不分配索引分片的索引分片副本;当可用的索引数据存储节点的数目多于索引分片的数目时,中心控制节点分配部分或全部索引分片的索引分片副本至剩余的索引数据存储节点。

8.如权利要求1所述的分布式搜索引擎的实现方法,其特征在于:步骤D所述索引的更新中,还包括段的合并的步骤:在所述更新中的索引的索引分片中段的数目达到阈值或距离上一次索引合并的间隔时间达到阈值,该索引分片所在的索引数据存储节点读取较小的几个段中的文档并将其存储于一个新段,然后将这几个较小的段物理删除。

9.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:步骤D所述更新文档在索引分片上的存储,是通过计算更新文档的键值的哈希值,将该哈希值跟文档所在索引的索引分片数取模后,最后将文档分配到跟该取模的数值对应编号的索引分片进行存储。

10.如权利要求1所述的分布式实时搜索引擎的实现方法,其特征在于:步骤B所述的文档的不同数据对象类型,包括:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中。

说明书 :

一种分布式实时搜索引擎的实现方法

技术领域

[0001] 本发明涉及搜索引擎技术领域,尤其涉及一种分布式实时搜索引擎的实现方法。

背景技术

[0002] 伴随着知识经济时代的到来,互联网络中的信息呈爆炸式增长,现阶段人们面对的不是信息匮乏,而是信息泛滥,无从筛选,因而,如何精确、快速、及时获取需要的信息,是搜索引擎需要解决的问题。
[0003] 搜索引擎是指根据一定的策略、运用特定的计算机程序从特定网络如互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。
[0004] 传统的搜索引擎,例如,Google、百度、Yahoo等,虽然处理的数据量巨大,已达到TB级,但其数据源主要来自门户网站、论坛、电子政务等常规站点,这一类的站点数据更新频率不高,每次更新的数据量也不大,因而其信息处理对搜索引擎的实时性要求并不高。
[0005] 随着微博,社交类网站等社会化媒体的兴起,网民创造的“微信息”大量涌现,从而产生实时海量数据。另外随着企业移动应用如移动CRM系统和手持终端的快速发展,用户对资讯的查询速度和实时性提出了更高的要求,传统搜索引擎已经不能适应实时海量数据处理和实时搜索的处理需求。实时海量数据具有更新频率高、更新的数据量大、累积的数据量大的特性,通常达到几百GB,甚至达到TB或PB级的数据量。实时搜索引擎在海量数据处理和查询响应的实时性上都有很高的要求。当数据量达到TB级时,数据更新的频率和查询响应的速度之间存在很大的矛盾,因为当累积数据量大,更新的数据量也很大时,会导致索引的构建和维护时间长从而导致实时性无法保证,即,现有的搜索引擎方案采用该增量索引机制时,索引的构建和检索过程是分开进行的,索引的构建逻辑只有在新段中累积的文档数达到阈值(如10000)或者间隔时间达到阈值(如5分钟)后,才将新段提交到索引分片中供索引检索逻辑使用。因此,从一个文档的提交到能够检索到该文档,之间会有一定的时间延迟,通常在几分钟到几十分钟范围内,而在实时检索中,如此长的延迟是不可容忍的。

发明内容

[0006] 针对现有技术方案的不足,本发明提出一种克服增量索引机制跟索引实时性之间的矛盾,通过系统内存中的更新时索引、合并时索引和磁盘索引的配合实现的一种分布式实时搜索引擎。
[0007] 本发明采用的技术方案如下:
[0008] 一种分布式实时搜索引擎的实现方法,其系统构建和运行至少包括以下步骤:
[0009] A.设计系统的功能性结构,该功能性结构是在基于Master/Slave的集群式系统中创建,包括以下功能节点:中心控制节点、索引数据存储节点和对外服务节点,其中,所述的中心控制节点创建于Master系统中,所述的索引数据存储节点和对外服务节点创建于Slave系统中,所述的中心控制节点,用于数据索引结构中索引的属性信息的存储和维护,以及索引数据存储节点的属性信息的存储和维护,所述的索引数据存储节点用于数据索引结构中索引分片的创建、更新和检索,所述的对外服务节点用于接收索引的创建、更新和检索请求并将该请求转发至中心控制节点进行处理;
[0010] B.设计系统的数据索引结构,该索引结构从上到下的树形层次构成是:索引、索引分片、段、文档和域,其中,所述的索引在一个系统中可以有多个,所述的一个索引分片是所述索引被分割后的一个数据块,其中,属于同一索引的各个索引分片存储在索引数据存储节点上,所述的一个索引分片是由一至多个段构成,所述的一个段是由一至多个文档构成,一个段中所含的各个文档可以是不同的数据对象类型,所述的一个文档在系统全局中具有唯一标识的键值,所述的文档的结构包含用于描述文档类型的域;
[0011] C.索引的创建,包括以下步骤:
[0012] C1.对外服务节点接收到索引创建请求后将该请求转发至中心控制节点,中心控制节点解析该索引创建请求,从中提取待创建索引的属性信息,并验证该属性信息是否是完备的和有效的,如果该属性信息完备并且有效,则进行步骤C2的处理,如果该属性信息不完备或者无效,则发送应答失败信息至对外服务节点;
[0013] C2.中心控制节点根据步骤C1中生成的待创建索引的属性信息中的索引分片数将待创建索引分割为若干分片,同时,根据存储于中心控制节点中的索引数据节点的属性信息,来判断每个索引数据节点的状态和负载情况,并依此来确定每个索引分片在哪个索引数据节点中存储和创建,然后将待创建索引的属性信息发送至各个相对应的索引数据存储节点。索引数据存储节点根据收到的待创建索引的属性信息,在该索引数据存储节点上构建中心控制节点分派的所述待创建索引的索引分片,如果该索引数据存储节点创建该索引分片失败,则中心控制节点将该索引分片分派给其他的状态良好、负载相对比较小的索引数据节点来创建,直至该待创建索引的全部索引分片在索引数据存储节点中创建完成或者创建创建失败,进行步骤C3的处理;
[0014] C3.如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建完成,中心控制节点更新存储于其中的索引数据存储节点属性信息,并发送索引分片创建成功的应答信息至对外服务节点;如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建失败,则向对外服务节点发送创建索引失败的应答;
[0015] D.索引的更新,包括以下步骤:
[0016] D1.对外服务节点接收到索引更新请求后将该请求转发至中心控制节点,中心控制节点根据存储于其中的索引属性信息和索引数据存储节点属性信息,将该索引更新请求发送至该索引的索引分片所在的索引数据存储节点;
[0017] D2.索引数据存储节点根据收到的索引更新请求,在待更新索引所在索引数据存储节点的索引分片上,将更新文档存储于新的段中,如果更新文档存储成功,则将该更新文档相对应的旧文档在新的段中标记为删除状态,并返回索引更新成功信息至中心控制节点,如果更新文档存储失败,则返回索引更新失败信息至中心控制节点,中心控制节点最后将索引更新成功或失败的信息发送至对外服务节点;
[0018] 该步骤D的索引更新,还包括文档的删除步骤:当索引更新请求仅为删除文档命令时,在待删除文档所在的索引数据存储节点的存储分片上,在新的段中将该文档标记为删除;
[0019] 该步骤D的索引更新,还包括构建实时索引的步骤:在系统的内存中同时构建更新时索引和合并时索引,索引的检索是通过访问该更新时索引和合并时索引进行,在进行索引更新时,更新中的索引为所述的更新时索引,当该更新时索引的文档数量达到阈值或者该更新时索引的更新时间达到阈值时,系统提交该更新时索引到磁盘索引中,之后变更该更新时索引为合并时索引并同时变更之前的合并时索引为更新时索引;
[0020] E.索引的检索,包括以下步骤:
[0021] E1.对外服务节点接收索引的检索请求后将其发送至中心控制节点,中心控制节点解析该检索请求并判断其所针对的目标索引,然后根据索引数据存储节点属性信息和目标索引的属性信息,查找该目标索引的所有索引分片,并向存储每个分片的索引数据存储节点分派检索请求;
[0022] E2.索引数据存储节点根据收到的检索请求,在其存储的相应索引分片上检索相关文档,最后将检索结果排序后发送至对外服务节点;
[0023] E3.对外服务节点将接收到的各个索引数据存储节点的检索结果整合、排序后发送至客户端。
[0024] 进一步的,步骤A所述系统的功能性结构,还包括一备用中心控制节点,所述中心控制节点实时地将其存储的数据同步备份至备用中心控制节点,当中心控制节点发生故障期时,该备用中心控制节点变更为中心控制节点,当原中心控制节点从故障中恢复,原中心控制节点变更为新的备用中心控制节点。
[0025] 进一步的,所述的索引数据存储节点和对外服务节点周期性地向所述中心控制节点发送表征其状态信息的心跳信号,如果中心控制节点在预设的时间内没有收到心跳信号,则标记该索引数据存储节点或对外服务节点为死亡,同时,中心控制节点会将标记为死亡的索引数据存储节点中存储的所有索引分片,从其他索引数据节点中存储的这些索引分片的副本中再拷贝一份到其他的未存储任何该索引分片副本的索引数据节点中,使得索引分片的副本数保持不变,以保证索引分片在任意时刻都是可用的。
[0026] 进一步的,所述的索引数据节点向中心控制节点中发生的心跳信号中,包含该索引数据节点的负载信息,在索引创建的过程中,中心控制节点会将索引分片尽量分配给负载小的索引数据节点存储,同样,在索引检索的过程中,中心控制节点会将检索请求尽量提交给负载小的索引分片或该分片副本所在的索引数据存储节点处理。
[0027] 进一步的,所述的索引数据存储节点属性信息包括:节点的ID、节点的名称、节点的类型、节点的状态、节点的负载和节点的位置,所述的索引属性信息包括:索引的名称、索引中文档的结构定义、索引的分片数、索引分片的副本数和索引分片及索引分片副本的存储节点ID。
[0028] 进一步的,步骤B所述系统的数据索引结构中,每一个索引分片还具有复数个索引分片副本,该索引分片副本在步骤C所述的索引创建时创建,在步骤D所述的索引更新时在原索引分片更新后异步更新,其跟原索引分片存储在不同的索引数据存储节点上;原索引分片所在的索引数据存储节点负责处理针对该索引分片的更新请求,当原索引分片更新完毕后,原索引分片所在的索引数据节点负责将更新请求异步地发送给对应的索引分片副本所在的索引数据节点进行索引分片副本的更新;索引分片副本与对应的原索引分片都支持索引检索,中心控制节点根据原索引分片和索引分片副本所在索引数据存储节点的负载情况,将索引检索请求提交给负载小的索引分片或索引分片副本所在索引数据存储节点处理。
[0029] 更进一步的,中心控制节点定期检查全部的索引中各个索引的索引分片副本的数目,当索引分片副本的数目低于预设的设定个数时,系统自动复制该索引分片的副本到其他数据节点中;当存储原索引分片的索引数据存储节点出现故障时,系统从对应的索引分片副本中选取一个接替原索引分片的索引更新工作,该索引分片副本成为新的原索引分片,然后在其他索引数据节点中在生成一个索引分片副本,保证该索引分片的副本数保持不变;当存储索引分片副本的索引数据节点出现故障时,系统会在其他索引数据节点中生成一个与原索引分片一样的副本,保证该索引分片的副本数保持不变。
[0030] 更进一步的,所述同一索引的各个索引分片和索引分片副本创建和存储在索引数据存储节点上,是按照如下的策略进行:中心控制节点根据索引数据存储节点的属性信息中节点的负载信息,将所述索引分片和索引分片副本分配至负载最轻的索引数据存储节点,当可用的索引数据存储节点的数目少于索引分片的数目时,中心控制节点分配多个索引分片至同一个索引数据存储节点,中心控制节点不分配索引分片的索引分片副本;当可用的索引数据存储节点的数目多于索引分片的数目时,中心控制节点分配部分或全部索引分片的索引分片副本至剩余的索引数据存储节点。
[0031] 进一步的,步骤D所述索引的更新中,还包括段的合并的步骤:在所述更新中的索引的索引分片中段的数目达到阈值或距离上一次索引合并的间隔时间达到阈值,该索引分片所在的索引数据存储节点读取较小的几个段中的文档并将其存储于一个新段,然后将这几个较小的段物理删除。
[0032] 进一步的,步骤D所述更新文档在索引分片上的存储,是通过计算更新文档的键值的哈希值,将该哈希值跟文档所在索引的索引分片数取模后,最后将文档分配到跟该取模的数值对应编号的索引分片进行存储。
[0033] 进一步的,步骤B所述的文档的不同数据对象类型,包括:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中。
[0034] 本发明通过采用上述技术方案,具有的有益效果是:
[0035] 1.在系统的内存中同时构建更新时索引和合并时索引,索引检索时通过同时访问更新时索引和合并时索引,当更新时索引的文档数量积累到阈值后,更新索引提交到磁盘索引并变更为合并时索引,原有的合并时索引变更为新的更新时索引,保证了正在更新中的数据也能够被检索到,提高了搜索引擎可检索数据的实时性;
[0036] 2. 本系统的中心控制节点、备用中心控制节点、对外服务节点以及索引数据存储节点是在基于Master/Slave的集群式系统创建,具有高度容错性,适合部署在廉价机器上,并且能够提供高吞吐量的数据访问;
[0037] 3.通过对存储于索引数据存储节点的索引分片创建索引分片副本,增强系统的容错性。

附图说明

[0038] 图1是本发明一优选实施例的功能性结构示意图。
[0039] 图2是本发明数据索引结构的示意图。
[0040] 图3是本发明索引分片和索引分片副本存储策略的实施例示意图。

具体实施方式

[0041] 现结合附图和具体实施方式对本发明进一步说明。
[0042] 一种分布式实时搜索引擎的实现方法,其系统构建和运行是由以下步骤构成:
[0043] 步骤A:设计系统的功能性结构,参阅附图1所示,该功能性结构是在基于Master/Slave的集群式系统中创建,包括以下功能节点:中心控制节点、索引数据存储节点和对外服务节点,其中,所述的中心控制节点创建于Master系统中,所述的索引数据存储节点和对外服务节点创建于Slave系统中,所述的中心控制节点在系统中为主节点,用于数据索引结构中索引的属性信息的存储和维护,以及索引数据存储节点的属性信息的存储和维护,所述的索引数据存储节点在系统中为数据节点,用于数据索引结构中索引分片层的创建、更新和检索,所述的对外服务节点在系统中为客户节点,用于接收索引的创建、更新和检索请求并将该请求转发至中心控制节点进行处理;
[0044] 步骤B:设计系统的数据索引结构,参阅附图2所示,该索引结构从上到下的树形层次构成是:索引、索引分片、段、文档和域,其中,所述的索引在一个系统中可以有多个,所述的一个索引分片是所述索引被分割后的一个数据块,其中,属于同一索引的各个索引分片存储在索引数据存储节点上,所述的一个索引分片是由一至多个段构成,所述的一个段是由一至多个文档构成,一个段中所含的各个文档可以是不同的数据对象类型,所述的一个文档在系统全局中具有唯一标识的键值,所述的文档的结构包含用于描述文档不同属性的域;其中,所述的索引是提供检索支持的多种数据对象的集合,所述的索引分片分散存储在系统的索引数据存储节点上,这可以提高系统的检索数据效率;
[0045] 步骤C:索引的创建,是由以下的步骤构成:
[0046] C1.对外服务节点接收到索引创建请求后将该请求转发至中心控制节点,中心控制节点解析该索引创建请求,从中提取待创建索引的属性信息,并验证该属性信息是否是完备的和有效的,如果该属性信息完备并且有效,则进行步骤C2的处理,如果该属性信息不完备或者无效,则发送应答失败信息至对外服务节点;
[0047] C2.中心控制节点根据步骤C1中生成的待创建索引的属性信息中的索引分片数将待创建索引分割为若干分片,同时,根据存储于中心控制节点中的索引数据节点的属性信息,来判断每个索引数据节点的状态和负载情况,并依此来确定每个索引分片在哪个索引数据节点中存储和创建,然后将待创建索引的属性信息发送至各个相对应的索引数据存储节点;索引数据存储节点根据收到的待创建索引的属性信息,在该索引数据存储节点上构建中心控制节点分派的所述待创建索引的索引分片,如果该索引数据存储节点创建该索引分片失败,则中心控制节点将该索引分片分派给其他的状态良好、负载相对比较小的索引数据节点来创建,直至该待创建索引的全部索引分片在索引数据存储节点中创建完成或者创建创建失败,进行步骤C3的处理;
[0048] C3.如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建完成,中心控制节点更新存储于其中的索引数据存储节点属性信息,并发送索引分片创建成功的应答信息至对外服务节点;如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建失败,则向对外服务节点发送创建索引失败的应答;
[0049] 步骤D:索引的更新,是由以下步骤构成:
[0050] D1.对外服务节点接收到索引更新请求后将该请求转发至中心控制节点,中心控制节点根据存储于其中的索引属性信息和索引数据存储节点属性信息,将该索引更新请求发送至该索引的索引分片所在的索引数据存储节点;
[0051] D2.索引数据存储节点根据收到的索引更新请求,在待更新索引所在索引数据存储节点的索引分片上,将更新文档存储于新的段中,如果更新文档存储成功,则将该更新文档相对应的旧文档在新的段中标记为删除状态,并返回索引更新成功信息至中心控制节点,如果更新文档存储失败,则返回索引更新失败信息至中心控制节点,中心控制节点最后将索引更新成功或失败的信息发送至对外服务节点;
[0052] 该步骤D的索引更新,还包括文档的删除步骤:当索引更新请求仅为删除文档命令时,在待删除文档所在的索引数据存储节点的存储分片上,在新的段中将该文档标记为删除;
[0053] 该步骤D的索引更新,还包括构建实时索引的步骤:在系统的内存中同时构建更新时索引和合并时索引,索引的检索是通过访问该更新时索引和合并时索引进行,在进行索引更新时,更新中的索引为所述的更新时索引,当该更新时索引的文档数量达到阈值或者该更新时索引的更新时间达到阈值时,系统提交该更新时索引到磁盘索引中,之后变更该更新时索引为合并时索引并同时变更之前的合并时索引为更新时索引;
[0054] 步骤E:索引的检索,是由以下步骤构成:
[0055] E1.对外服务节点接收索引的检索请求后将其发送至中心控制节点,中心控制节点解析该检索请求并判断其所针对的目标索引,然后根据索引数据存储节点属性信息和目标索引的属性信息,查找该目标索引的所有索引分片,并向存储每个分片的索引数据存储节点分派检索请求;
[0056] E2.索引数据存储节点根据收到的检索请求,在其存储的相应索引分片上检索相关文档,最后将检索结果排序后发送至对外服务节点;
[0057] E3.对外服务节点将接收到的各个索引数据存储节点的检索结果整合、排序后发送至客户端。
[0058] 作为一优选的实施方式,步骤A所述系统的功能性结构,还包括一备用中心控制节点,所述中心控制节点实时地将其存储的数据同步备份至备用中心控制节点,当中心控制节点发生故障期时,该备用中心控制节点变更为中心控制节点,当原中心控制节点从故障中恢复,原中心控制节点变更为新的备用中心控制节点;由于中心控制节点在系统中为主节点,其一旦出现故障,就会导致整个系统瘫痪,因此,通过增加备用中心控制节点, 可以实现对中心控制节点的故障转移,提高系统的容错性。
[0059] 作为一优选的实施方式,所述的索引数据存储节点和对外服务节点周期性地向所述中心控制节点发送表征其状态信息的心跳信号,如果中心控制节点在预设的时间内没有收到心跳信号,则标记该索引数据存储节点或对外服务节点为死亡,同时,中心控制节点会将标记为死亡的索引数据存储节点中存储的所有索引分片,从其他索引数据节点中存储的这些索引分片的副本中再拷贝一份到其他的未存储任何该索引分片副本的索引数据节点中,使得索引分片的副本数保持不变,以保证索引分片在任意时刻都是可用的。
[0060] 作为一优选的实施方式,所述的索引数据节点向中心控制节点中发生的心跳信号中,包含该索引数据节点的负载信息,在索引创建的过程中,中心控制节点会将索引分片尽量分配给负载小的索引数据节点存储,同样,在索引检索的过程中,中心控制节点会将检索请求尽量提交给负载小的索引分片或该分片副本所在的索引数据存储节点处理。
[0061] 作为一优选的实施方式,所述的索引数据存储节点属性信息包括:节点的ID、节点的名称、节点的类型、节点的状态、节点的负载和节点的位置,所述的索引属性信息包括:索引的名称、索引中文档的结构定义、索引的分片数、索引分片的副本数和索引分片及索引分片副本的存储节点ID;该索引数据存储节点属性信息和索引属性信息在系统中为元数据,该元数据存储于中心控制节点上,系统的中心控制节点、索引数据存储节点和对外服务节点可以跟据这些元数据推演每一个索引分片在集群中的位置。
[0062] 作为一优选的实施方式,步骤B所述系统的数据索引结构中,每一个索引分片还具有复数个索引分片副本,该索引分片副本在步骤C所述的索引创建时创建,在步骤D所述的索引更新时在原索引分片更新后异步更新,其跟原索引分片存储在不同的索引数据存储节点上。原索引分片所在的索引数据存储节点负责处理针对该索引分片的更新请求,当原索引分片更新完毕后,原索引分片所在的索引数据节点负责将更新请求异步地发送给对应的索引分片副本所在的索引数据节点进行索引分片副本的更新。索引分片副本与对应的原索引分片都支持索引检索,中心控制节点根据原索引分片和索引分片副本所在索引数据存储节点的负载情况,将索引检索请求提交给负载小的索引分片或索引分片副本所在索引数据存储节点处理。。
[0063] 进一步的,中心控制节点定期检查全部的索引中各个索引的索引分片副本的数目,当索引分片副本的数目低于预设的设定个数时,系统自动复制该索引分片的副本到其他数据节点中。当存储原索引分片的索引数据存储节点出现故障时,系统从对应的索引分片副本中选取一个接替原索引分片的索引更新工作,该索引分片副本成为新的原索引分片,然后在其他索引数据节点中在生成一个索引分片副本,保证该索引分片的副本数保持不变。当存储索引分片副本的索引数据节点出现故障时,系统会在其他索引数据节点中生成一个与原索引分片一样的副本,保证该索引分片的副本数保持不变。
[0064] 进一步的,所述同一索引的各个索引分片和索引分片副本创建和存储在索引数据存储节点上,是按照如下的策略进行:中心控制节点根据索引数据存储节点的属性信息中节点的负载信息,将所述索引分片和索引分片副本分配至负载最轻的索引数据存储节点,当可用的索引数据存储节点的数目少于索引分片的数目时,中心控制节点分配多个索引分片至同一个索引数据存储节点,中心控制节点不分配索引分片的索引分片副本;当可用的索引数据存储节点的数目多于索引分片的数目时,中心控制节点分配部分或全部索引分片的索引分片副本至剩余的索引数据存储节点;参阅附图3所示的该策略的一个举例说明,其为一个索引分片数为2、每个索引分片的索引分片副本数为1的索引在索引数据存储节点的存储的情况:当系统的索引数据存储节点数为1时,该索引的索引分片1和索引分片2都存储在索引数据存储节点1中,而且每个分片没有索引分片副本,因为副本和原分片只有存储在不同的节点中才能对系统的可用性和可靠性起作用,当系统中的索引数据存储节点数为2个时,存储在索引数据存储节点1中的索引分片1和索引分片2都具有存储在索引数据存储节点2上的索引分片副本1’和索引分片副本2’,索引数据存储节点2可以提供跟索引数据存储节点1所一样的服务,因此增加索引数据存储节点可以扩展系统的服务性能;当系统的索引数据存储节点数为4个时,索引分片1、索引分片2、索引分片副本1’和索引分片副本2’是分开存储在这4个索引数据存储节点上。
[0065] 作为一优选的实施方式,步骤D所述索引的更新中,还包括段的合并的步骤:在所述更新中的索引的索引分片中段的数目达到阈值或距离上一次索引合并的间隔时间达到阈值,该索引分片所在的索引数据存储节点读取较小的几个段中的文档并将其存储于一个新段,然后将这几个较小的段物理删除;在索引的构建过程中会不断产生新的段,当索引分片中段的数目太多时,会影响索引检索逻辑的检索效率,因此,该步骤将多个小的段合并成一个大的段,并剔除标记删除的数据,优化了索引的存储空间,减少索引检索逻辑同时操作的索引段的数目,从而提高了索引检索逻辑的检索效率。
[0066] 作为一优选的实施方式,步骤D所述更新文档在索引分片上的存储,是通过计算更新文档的键值的哈希值,将该哈希值跟文档所在索引的索引分片数取模后,最后将文档分配到跟该取模的数值对应编号的索引分片进行存储。
[0067] 作为一优选的实施方式,步骤B所述的文档的不同数据对象类型是:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中,文档的域的结构用于存储文档的属性信息,例如, 对于文本类型的文档,可以包含如下信息:文件名称、关键词、作者、文件大小、类别、文件描述等;而对于音频类型的文档,可以包含如下信息:文件名称、比特率(bps)、文件大小、持续时间、作者或艺术家姓名、歌曲名称、流派、专辑名称等。
[0068] 尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。