CN102169507B - 一种分布式实时搜索引擎的实现方法 - Google Patents
一种分布式实时搜索引擎的实现方法 Download PDFInfo
- Publication number
- CN102169507B CN102169507B CN 201110137785 CN201110137785A CN102169507B CN 102169507 B CN102169507 B CN 102169507B CN 201110137785 CN201110137785 CN 201110137785 CN 201110137785 A CN201110137785 A CN 201110137785A CN 102169507 B CN102169507 B CN 102169507B
- Authority
- CN
- China
- Prior art keywords
- index
- burst
- node
- center control
- control nodes
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及搜索引擎技术领域,尤其涉及一种分布式实时搜索引擎。本发明的分布式实时搜索引擎的实现方法,其***构建和运行至少包括以下步骤:A.设计***的功能性结构,B.设计***的数据索引结构,C.索引的创建,D.索引的更新,E.索引的检索。本发明的分布式实时搜索引擎能够在***的内存中同时构建更新时索引和合并时索引,索引检索时通过同时访问更新时索引和合并时索引,当更新时索引的文档数量积累到阈值后,更新索引提交到磁盘索引并变更为合并时索引,原有的合并时索引变更为新的更新时索引,保证了正在更新中的数据也能够被检索到,提高了搜索引擎可检索数据的实时性。
Description
技术领域
本发明涉及搜索引擎技术领域,尤其涉及一种分布式实时搜索引擎的实现方法。
背景技术
伴随着知识经济时代的到来,互联网络中的信息呈***式增长,现阶段人们面对的不是信息匮乏,而是信息泛滥,无从筛选,因而,如何精确、快速、及时获取需要的信息,是搜索引擎需要解决的问题。
搜索引擎是指根据一定的策略、运用特定的计算机程序从特定网络如互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的***。
传统的搜索引擎,例如,Google、百度、Yahoo等,虽然处理的数据量巨大,已达到TB级,但其数据源主要来自门户网站、论坛、电子政务等常规站点,这一类的站点数据更新频率不高,每次更新的数据量也不大,因而其信息处理对搜索引擎的实时性要求并不高。
随着微博,社交类网站等社会化媒体的兴起,网民创造的“微信息”大量涌现,从而产生实时海量数据。另外随着企业移动应用如移动CRM***和手持终端的快速发展,用户对资讯的查询速度和实时性提出了更高的要求,传统搜索引擎已经不能适应实时海量数据处理和实时搜索的处理需求。实时海量数据具有更新频率高、更新的数据量大、累积的数据量大的特性,通常达到几百GB,甚至达到TB或PB级的数据量。实时搜索引擎在海量数据处理和查询响应的实时性上都有很高的要求。当数据量达到TB级时,数据更新的频率和查询响应的速度之间存在很大的矛盾,因为当累积数据量大,更新的数据量也很大时,会导致索引的构建和维护时间长从而导致实时性无法保证,即,现有的搜索引擎方案采用该增量索引机制时,索引的构建和检索过程是分开进行的,索引的构建逻辑只有在新段中累积的文档数达到阈值(如10000)或者间隔时间达到阈值(如5分钟)后,才将新段提交到索引分片中供索引检索逻辑使用。因此,从一个文档的提交到能够检索到该文档,之间会有一定的时间延迟,通常在几分钟到几十分钟范围内,而在实时检索中,如此长的延迟是不可容忍的。
发明内容
针对现有技术方案的不足,本发明提出一种克服增量索引机制跟索引实时性之间的矛盾,通过***内存中的更新时索引、合并时索引和磁盘索引的配合实现的一种分布式实时搜索引擎。
本发明采用的技术方案如下:
一种分布式实时搜索引擎的实现方法,其***构建和运行至少包括以下步骤:
A.设计***的功能性结构,该功能性结构是在基于Master/Slave的集群式***中创建,包括以下功能节点:中心控制节点、索引数据存储节点和对外服务节点,其中,所述的中心控制节点创建于Master***中,所述的索引数据存储节点和对外服务节点创建于Slave***中,所述的中心控制节点,用于数据索引结构中索引的属性信息的存储和维护,以及索引数据存储节点的属性信息的存储和维护,所述的索引数据存储节点用于数据索引结构中索引分片的创建、更新和检索,所述的对外服务节点用于接收索引的创建、更新和检索请求并将该请求转发至中心控制节点进行处理;
B.设计***的数据索引结构,该索引结构从上到下的树形层次构成是:索引、索引分片、段、文档和域,其中,所述的索引在一个***中可以有多个,所述的一个索引分片是所述索引被分割后的一个数据块,其中,属于同一索引的各个索引分片存储在索引数据存储节点上,所述的一个索引分片是由一至多个段构成,所述的一个段是由一至多个文档构成,一个段中所含的各个文档可以是不同的数据对象类型,所述的一个文档在***全局中具有唯一标识的键值,所述的文档的结构包含用于描述文档类型的域;
C.索引的创建,包括以下步骤:
C1.对外服务节点接收到索引创建请求后将该请求转发至中心控制节点,中心控制节点解析该索引创建请求,从中提取待创建索引的属性信息,并验证该属性信息是否是完备的和有效的,如果该属性信息完备并且有效,则进行步骤C2的处理,如果该属性信息不完备或者无效,则发送应答失败信息至对外服务节点;
C2.中心控制节点根据步骤C1中生成的待创建索引的属性信息中的索引分片数将待创建索引分割为若干分片,同时,根据存储于中心控制节点中的索引数据节点的属性信息,来判断每个索引数据节点的状态和负载情况,并依此来确定每个索引分片在哪个索引数据节点中存储和创建,然后将待创建索引的属性信息发送至各个相对应的索引数据存储节点。索引数据存储节点根据收到的待创建索引的属性信息,在该索引数据存储节点上构建中心控制节点分派的所述待创建索引的索引分片,如果该索引数据存储节点创建该索引分片失败,则中心控制节点将该索引分片分派给其他的状态良好、负载相对比较小的索引数据节点来创建,直至该待创建索引的全部索引分片在索引数据存储节点中创建完成或者创建创建失败,进行步骤C3的处理;
C3.如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建完成,中心控制节点更新存储于其中的索引数据存储节点属性信息,并发送索引分片创建成功的应答信息至对外服务节点;如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建失败,则向对外服务节点发送创建索引失败的应答;
D.索引的更新,包括以下步骤:
D1.对外服务节点接收到索引更新请求后将该请求转发至中心控制节点,中心控制节点根据存储于其中的索引属性信息和索引数据存储节点属性信息,将该索引更新请求发送至该索引的索引分片所在的索引数据存储节点;
D2.索引数据存储节点根据收到的索引更新请求,在待更新索引所在索引数据存储节点的索引分片上,将更新文档存储于新的段中,如果更新文档存储成功,则将该更新文档相对应的旧文档在新的段中标记为删除状态,并返回索引更新成功信息至中心控制节点,如果更新文档存储失败,则返回索引更新失败信息至中心控制节点,中心控制节点最后将索引更新成功或失败的信息发送至对外服务节点;
该步骤D的索引更新,还包括文档的删除步骤:当索引更新请求仅为删除文档命令时,在待删除文档所在的索引数据存储节点的存储分片上,在新的段中将该文档标记为删除;
该步骤D的索引更新,还包括构建实时索引的步骤:在***的内存中同时构建更新时索引和合并时索引,索引的检索是通过访问该更新时索引和合并时索引进行,在进行索引更新时,更新中的索引为所述的更新时索引,当该更新时索引的文档数量达到阈值或者该更新时索引的更新时间达到阈值时,***提交该更新时索引到磁盘索引中,之后变更该更新时索引为合并时索引并同时变更之前的合并时索引为更新时索引;
E.索引的检索,包括以下步骤:
E1.对外服务节点接收索引的检索请求后将其发送至中心控制节点,中心控制节点解析该检索请求并判断其所针对的目标索引,然后根据索引数据存储节点属性信息和目标索引的属性信息,查找该目标索引的所有索引分片,并向存储每个分片的索引数据存储节点分派检索请求;
E2.索引数据存储节点根据收到的检索请求,在其存储的相应索引分片上检索相关文档,最后将检索结果排序后发送至对外服务节点;
E3.对外服务节点将接收到的各个索引数据存储节点的检索结果整合、排序后发送至客户端。
进一步的,步骤A所述***的功能性结构,还包括一备用中心控制节点,所述中心控制节点实时地将其存储的数据同步备份至备用中心控制节点,当中心控制节点发生故障期时,该备用中心控制节点变更为中心控制节点,当原中心控制节点从故障中恢复,原中心控制节点变更为新的备用中心控制节点。
进一步的,所述的索引数据存储节点和对外服务节点周期性地向所述中心控制节点发送表征其状态信息的心跳信号,如果中心控制节点在预设的时间内没有收到心跳信号,则标记该索引数据存储节点或对外服务节点为死亡,同时,中心控制节点会将标记为死亡的索引数据存储节点中存储的所有索引分片,从其他索引数据节点中存储的这些索引分片的副本中再拷贝一份到其他的未存储任何该索引分片副本的索引数据节点中,使得索引分片的副本数保持不变,以保证索引分片在任意时刻都是可用的。
进一步的,所述的索引数据节点向中心控制节点中发生的心跳信号中,包含该索引数据节点的负载信息,在索引创建的过程中,中心控制节点会将索引分片尽量分配给负载小的索引数据节点存储,同样,在索引检索的过程中,中心控制节点会将检索请求尽量提交给负载小的索引分片或该分片副本所在的索引数据存储节点处理。
进一步的,所述的索引数据存储节点属性信息包括:节点的ID、节点的名称、节点的类型、节点的状态、节点的负载和节点的位置,所述的索引属性信息包括:索引的名称、索引中文档的结构定义、索引的分片数、索引分片的副本数和索引分片及索引分片副本的存储节点ID。
进一步的,步骤B所述***的数据索引结构中,每一个索引分片还具有复数个索引分片副本,该索引分片副本在步骤C所述的索引创建时创建,在步骤D所述的索引更新时在原索引分片更新后异步更新,其跟原索引分片存储在不同的索引数据存储节点上;原索引分片所在的索引数据存储节点负责处理针对该索引分片的更新请求,当原索引分片更新完毕后,原索引分片所在的索引数据节点负责将更新请求异步地发送给对应的索引分片副本所在的索引数据节点进行索引分片副本的更新;索引分片副本与对应的原索引分片都支持索引检索,中心控制节点根据原索引分片和索引分片副本所在索引数据存储节点的负载情况,将索引检索请求提交给负载小的索引分片或索引分片副本所在索引数据存储节点处理。
更进一步的,中心控制节点定期检查全部的索引中各个索引的索引分片副本的数目,当索引分片副本的数目低于预设的设定个数时,***自动复制该索引分片的副本到其他数据节点中;当存储原索引分片的索引数据存储节点出现故障时,***从对应的索引分片副本中选取一个接替原索引分片的索引更新工作,该索引分片副本成为新的原索引分片,然后在其他索引数据节点中在生成一个索引分片副本,保证该索引分片的副本数保持不变;当存储索引分片副本的索引数据节点出现故障时,***会在其他索引数据节点中生成一个与原索引分片一样的副本,保证该索引分片的副本数保持不变。
更进一步的,所述同一索引的各个索引分片和索引分片副本创建和存储在索引数据存储节点上,是按照如下的策略进行:中心控制节点根据索引数据存储节点的属性信息中节点的负载信息,将所述索引分片和索引分片副本分配至负载最轻的索引数据存储节点,当可用的索引数据存储节点的数目少于索引分片的数目时,中心控制节点分配多个索引分片至同一个索引数据存储节点,中心控制节点不分配索引分片的索引分片副本;当可用的索引数据存储节点的数目多于索引分片的数目时,中心控制节点分配部分或全部索引分片的索引分片副本至剩余的索引数据存储节点。
进一步的,步骤D所述索引的更新中,还包括段的合并的步骤:在所述更新中的索引的索引分片中段的数目达到阈值或距离上一次索引合并的间隔时间达到阈值,该索引分片所在的索引数据存储节点读取较小的几个段中的文档并将其存储于一个新段,然后将这几个较小的段物理删除。
进一步的,步骤D所述更新文档在索引分片上的存储,是通过计算更新文档的键值的哈希值,将该哈希值跟文档所在索引的索引分片数取模后,最后将文档分配到跟该取模的数值对应编号的索引分片进行存储。
进一步的,步骤B所述的文档的不同数据对象类型,包括:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中。
本发明通过采用上述技术方案,具有的有益效果是:
1.在***的内存中同时构建更新时索引和合并时索引,索引检索时通过同时访问更新时索引和合并时索引,当更新时索引的文档数量积累到阈值后,更新索引提交到磁盘索引并变更为合并时索引,原有的合并时索引变更为新的更新时索引,保证了正在更新中的数据也能够被检索到,提高了搜索引擎可检索数据的实时性;
2. 本***的中心控制节点、备用中心控制节点、对外服务节点以及索引数据存储节点是在基于Master/Slave的集群式***创建,具有高度容错性,适合部署在廉价机器上,并且能够提供高吞吐量的数据访问;
3.通过对存储于索引数据存储节点的索引分片创建索引分片副本,增强***的容错性。
附图说明
图1是本发明一优选实施例的功能性结构示意图。
图2是本发明数据索引结构的示意图。
图3是本发明索引分片和索引分片副本存储策略的实施例示意图。
具体实施方式
现结合附图和具体实施方式对本发明进一步说明。
一种分布式实时搜索引擎的实现方法,其***构建和运行是由以下步骤构成:
步骤A:设计***的功能性结构,参阅附图1所示,该功能性结构是在基于Master/Slave的集群式***中创建,包括以下功能节点:中心控制节点、索引数据存储节点和对外服务节点,其中,所述的中心控制节点创建于Master***中,所述的索引数据存储节点和对外服务节点创建于Slave***中,所述的中心控制节点在***中为主节点,用于数据索引结构中索引的属性信息的存储和维护,以及索引数据存储节点的属性信息的存储和维护,所述的索引数据存储节点在***中为数据节点,用于数据索引结构中索引分片层的创建、更新和检索,所述的对外服务节点在***中为客户节点,用于接收索引的创建、更新和检索请求并将该请求转发至中心控制节点进行处理;
步骤B:设计***的数据索引结构,参阅附图2所示,该索引结构从上到下的树形层次构成是:索引、索引分片、段、文档和域,其中,所述的索引在一个***中可以有多个,所述的一个索引分片是所述索引被分割后的一个数据块,其中,属于同一索引的各个索引分片存储在索引数据存储节点上,所述的一个索引分片是由一至多个段构成,所述的一个段是由一至多个文档构成,一个段中所含的各个文档可以是不同的数据对象类型,所述的一个文档在***全局中具有唯一标识的键值,所述的文档的结构包含用于描述文档不同属性的域;其中,所述的索引是提供检索支持的多种数据对象的集合,所述的索引分片分散存储在***的索引数据存储节点上,这可以提高***的检索数据效率;
步骤C:索引的创建,是由以下的步骤构成:
C1.对外服务节点接收到索引创建请求后将该请求转发至中心控制节点,中心控制节点解析该索引创建请求,从中提取待创建索引的属性信息,并验证该属性信息是否是完备的和有效的,如果该属性信息完备并且有效,则进行步骤C2的处理,如果该属性信息不完备或者无效,则发送应答失败信息至对外服务节点;
C2.中心控制节点根据步骤C1中生成的待创建索引的属性信息中的索引分片数将待创建索引分割为若干分片,同时,根据存储于中心控制节点中的索引数据节点的属性信息,来判断每个索引数据节点的状态和负载情况,并依此来确定每个索引分片在哪个索引数据节点中存储和创建,然后将待创建索引的属性信息发送至各个相对应的索引数据存储节点;索引数据存储节点根据收到的待创建索引的属性信息,在该索引数据存储节点上构建中心控制节点分派的所述待创建索引的索引分片,如果该索引数据存储节点创建该索引分片失败,则中心控制节点将该索引分片分派给其他的状态良好、负载相对比较小的索引数据节点来创建,直至该待创建索引的全部索引分片在索引数据存储节点中创建完成或者创建创建失败,进行步骤C3的处理;
C3.如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建完成,中心控制节点更新存储于其中的索引数据存储节点属性信息,并发送索引分片创建成功的应答信息至对外服务节点;如果步骤C2中待创建索引的全部索引分片在索引数据存储节点中创建失败,则向对外服务节点发送创建索引失败的应答;
步骤D:索引的更新,是由以下步骤构成:
D1.对外服务节点接收到索引更新请求后将该请求转发至中心控制节点,中心控制节点根据存储于其中的索引属性信息和索引数据存储节点属性信息,将该索引更新请求发送至该索引的索引分片所在的索引数据存储节点;
D2.索引数据存储节点根据收到的索引更新请求,在待更新索引所在索引数据存储节点的索引分片上,将更新文档存储于新的段中,如果更新文档存储成功,则将该更新文档相对应的旧文档在新的段中标记为删除状态,并返回索引更新成功信息至中心控制节点,如果更新文档存储失败,则返回索引更新失败信息至中心控制节点,中心控制节点最后将索引更新成功或失败的信息发送至对外服务节点;
该步骤D的索引更新,还包括文档的删除步骤:当索引更新请求仅为删除文档命令时,在待删除文档所在的索引数据存储节点的存储分片上,在新的段中将该文档标记为删除;
该步骤D的索引更新,还包括构建实时索引的步骤:在***的内存中同时构建更新时索引和合并时索引,索引的检索是通过访问该更新时索引和合并时索引进行,在进行索引更新时,更新中的索引为所述的更新时索引,当该更新时索引的文档数量达到阈值或者该更新时索引的更新时间达到阈值时,***提交该更新时索引到磁盘索引中,之后变更该更新时索引为合并时索引并同时变更之前的合并时索引为更新时索引;
步骤E:索引的检索,是由以下步骤构成:
E1.对外服务节点接收索引的检索请求后将其发送至中心控制节点,中心控制节点解析该检索请求并判断其所针对的目标索引,然后根据索引数据存储节点属性信息和目标索引的属性信息,查找该目标索引的所有索引分片,并向存储每个分片的索引数据存储节点分派检索请求;
E2.索引数据存储节点根据收到的检索请求,在其存储的相应索引分片上检索相关文档,最后将检索结果排序后发送至对外服务节点;
E3.对外服务节点将接收到的各个索引数据存储节点的检索结果整合、排序后发送至客户端。
作为一优选的实施方式,步骤A所述***的功能性结构,还包括一备用中心控制节点,所述中心控制节点实时地将其存储的数据同步备份至备用中心控制节点,当中心控制节点发生故障期时,该备用中心控制节点变更为中心控制节点,当原中心控制节点从故障中恢复,原中心控制节点变更为新的备用中心控制节点;由于中心控制节点在***中为主节点,其一旦出现故障,就会导致整个***瘫痪,因此,通过增加备用中心控制节点, 可以实现对中心控制节点的故障转移,提高***的容错性。
作为一优选的实施方式,所述的索引数据存储节点和对外服务节点周期性地向所述中心控制节点发送表征其状态信息的心跳信号,如果中心控制节点在预设的时间内没有收到心跳信号,则标记该索引数据存储节点或对外服务节点为死亡,同时,中心控制节点会将标记为死亡的索引数据存储节点中存储的所有索引分片,从其他索引数据节点中存储的这些索引分片的副本中再拷贝一份到其他的未存储任何该索引分片副本的索引数据节点中,使得索引分片的副本数保持不变,以保证索引分片在任意时刻都是可用的。
作为一优选的实施方式,所述的索引数据节点向中心控制节点中发生的心跳信号中,包含该索引数据节点的负载信息,在索引创建的过程中,中心控制节点会将索引分片尽量分配给负载小的索引数据节点存储,同样,在索引检索的过程中,中心控制节点会将检索请求尽量提交给负载小的索引分片或该分片副本所在的索引数据存储节点处理。
作为一优选的实施方式,所述的索引数据存储节点属性信息包括:节点的ID、节点的名称、节点的类型、节点的状态、节点的负载和节点的位置,所述的索引属性信息包括:索引的名称、索引中文档的结构定义、索引的分片数、索引分片的副本数和索引分片及索引分片副本的存储节点ID;该索引数据存储节点属性信息和索引属性信息在***中为元数据,该元数据存储于中心控制节点上,***的中心控制节点、索引数据存储节点和对外服务节点可以跟据这些元数据推演每一个索引分片在集群中的位置。
作为一优选的实施方式,步骤B所述***的数据索引结构中,每一个索引分片还具有复数个索引分片副本,该索引分片副本在步骤C所述的索引创建时创建,在步骤D所述的索引更新时在原索引分片更新后异步更新,其跟原索引分片存储在不同的索引数据存储节点上。原索引分片所在的索引数据存储节点负责处理针对该索引分片的更新请求,当原索引分片更新完毕后,原索引分片所在的索引数据节点负责将更新请求异步地发送给对应的索引分片副本所在的索引数据节点进行索引分片副本的更新。索引分片副本与对应的原索引分片都支持索引检索,中心控制节点根据原索引分片和索引分片副本所在索引数据存储节点的负载情况,将索引检索请求提交给负载小的索引分片或索引分片副本所在索引数据存储节点处理。。
进一步的,中心控制节点定期检查全部的索引中各个索引的索引分片副本的数目,当索引分片副本的数目低于预设的设定个数时,***自动复制该索引分片的副本到其他数据节点中。当存储原索引分片的索引数据存储节点出现故障时,***从对应的索引分片副本中选取一个接替原索引分片的索引更新工作,该索引分片副本成为新的原索引分片,然后在其他索引数据节点中在生成一个索引分片副本,保证该索引分片的副本数保持不变。当存储索引分片副本的索引数据节点出现故障时,***会在其他索引数据节点中生成一个与原索引分片一样的副本,保证该索引分片的副本数保持不变。
进一步的,所述同一索引的各个索引分片和索引分片副本创建和存储在索引数据存储节点上,是按照如下的策略进行:中心控制节点根据索引数据存储节点的属性信息中节点的负载信息,将所述索引分片和索引分片副本分配至负载最轻的索引数据存储节点,当可用的索引数据存储节点的数目少于索引分片的数目时,中心控制节点分配多个索引分片至同一个索引数据存储节点,中心控制节点不分配索引分片的索引分片副本;当可用的索引数据存储节点的数目多于索引分片的数目时,中心控制节点分配部分或全部索引分片的索引分片副本至剩余的索引数据存储节点;参阅附图3所示的该策略的一个举例说明,其为一个索引分片数为2、每个索引分片的索引分片副本数为1的索引在索引数据存储节点的存储的情况:当***的索引数据存储节点数为1时,该索引的索引分片1和索引分片2都存储在索引数据存储节点1中,而且每个分片没有索引分片副本,因为副本和原分片只有存储在不同的节点中才能对***的可用性和可靠性起作用,当***中的索引数据存储节点数为2个时,存储在索引数据存储节点1中的索引分片1和索引分片2都具有存储在索引数据存储节点2上的索引分片副本1’和索引分片副本2’,索引数据存储节点2可以提供跟索引数据存储节点1所一样的服务,因此增加索引数据存储节点可以扩展***的服务性能;当***的索引数据存储节点数为4个时,索引分片1、索引分片2、索引分片副本1’和索引分片副本2’是分开存储在这4个索引数据存储节点上。
作为一优选的实施方式,步骤D所述索引的更新中,还包括段的合并的步骤:在所述更新中的索引的索引分片中段的数目达到阈值或距离上一次索引合并的间隔时间达到阈值,该索引分片所在的索引数据存储节点读取较小的几个段中的文档并将其存储于一个新段,然后将这几个较小的段物理删除;在索引的构建过程中会不断产生新的段,当索引分片中段的数目太多时,会影响索引检索逻辑的检索效率,因此,该步骤将多个小的段合并成一个大的段,并剔除标记删除的数据,优化了索引的存储空间,减少索引检索逻辑同时操作的索引段的数目,从而提高了索引检索逻辑的检索效率。
作为一优选的实施方式,步骤D所述更新文档在索引分片上的存储,是通过计算更新文档的键值的哈希值,将该哈希值跟文档所在索引的索引分片数取模后,最后将文档分配到跟该取模的数值对应编号的索引分片进行存储。
作为一优选的实施方式,步骤B所述的文档的不同数据对象类型是:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中,文档的域的结构用于存储文档的属性信息,例如, 对于文本类型的文档,可以包含如下信息:文件名称、关键词、作者、文件大小、类别、文件描述等;而对于音频类型的文档,可以包含如下信息:文件名称、比特率(bps)、文件大小、持续时间、作者或艺术家姓名、歌曲名称、流派、专辑名称等。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (10)
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所述的文档的不同数据对象类型,包括:文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象,每一种数据对象类型的属性信息存储于文档的域的结构中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110137785 CN102169507B (zh) | 2011-05-26 | 2011-05-26 | 一种分布式实时搜索引擎的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110137785 CN102169507B (zh) | 2011-05-26 | 2011-05-26 | 一种分布式实时搜索引擎的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102169507A CN102169507A (zh) | 2011-08-31 |
CN102169507B true CN102169507B (zh) | 2013-03-20 |
Family
ID=44490669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110137785 Active CN102169507B (zh) | 2011-05-26 | 2011-05-26 | 一种分布式实时搜索引擎的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102169507B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649804A (zh) * | 2016-12-29 | 2017-05-10 | 深圳市优必选科技有限公司 | 数据查询服务器的数据处理方法及装置、数据处理*** |
Families Citing this family (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102394922A (zh) * | 2011-10-27 | 2012-03-28 | 上海文广互动电视有限公司 | 分布式集群文件***及文件访问方法 |
CN102523480A (zh) * | 2011-12-08 | 2012-06-27 | 成都东方盛行电子有限责任公司 | 基于主备及缓存技术的收录***及方法 |
CN103309903A (zh) * | 2012-03-16 | 2013-09-18 | 刘龙 | 一种基于云计算的位置搜索***及方法 |
CN102779185B (zh) * | 2012-06-29 | 2014-11-12 | 浙江大学 | 一种高可用分布式全文索引方法 |
CN103685429B (zh) * | 2012-09-25 | 2017-09-26 | 阿里巴巴集团控股有限公司 | 一种信息展示的方法和装置 |
CN103106233A (zh) * | 2012-11-02 | 2013-05-15 | 北京邮电大学 | 应用于搜索引擎的海量文件异步索引及读写方法 |
US20140156668A1 (en) * | 2012-12-04 | 2014-06-05 | Linkedin Corporation | Apparatus and method for indexing electronic content |
CN102984762B (zh) * | 2012-12-12 | 2016-05-25 | 中国联合网络通信集团有限公司 | Ims功能分配方法及装置 |
CN103914483B (zh) * | 2013-01-07 | 2018-09-25 | 深圳市腾讯计算机***有限公司 | 文件存储方法、装置及文件读取方法、装置 |
CN103067525B (zh) * | 2013-01-18 | 2015-11-25 | 广东工业大学 | 一种基于特征码的云存储数据备份方法 |
CN103198108B (zh) * | 2013-03-27 | 2016-08-10 | 新浪网技术(中国)有限公司 | 一种索引数据更新方法、检索服务器及*** |
CN103258036A (zh) * | 2013-05-15 | 2013-08-21 | 广州一呼百应网络技术有限公司 | 一种基于p2p的分布式实时搜索引擎 |
CN103310023A (zh) * | 2013-07-05 | 2013-09-18 | 深圳中兴网信科技有限公司 | 分布式搜索***和分布式搜索方法 |
CN104298692B (zh) * | 2013-07-19 | 2017-11-24 | 深圳中兴网信科技有限公司 | 一种分布式搜索的方法及*** |
CN103488687A (zh) * | 2013-09-02 | 2014-01-01 | 用友软件股份有限公司 | 用于大数据的搜索***和搜索方法 |
CN104239377A (zh) * | 2013-11-12 | 2014-12-24 | 新华瑞德(北京)网络科技有限公司 | 跨平台的数据检索方法及装置 |
CN103699648A (zh) * | 2013-12-26 | 2014-04-02 | 成都市卓睿科技有限公司 | 用于快速检索的树形数据结构及其实现方法 |
CN104092735A (zh) * | 2014-06-23 | 2014-10-08 | 吕志雪 | 一种基于二叉树的云计算数据访问方法及*** |
CN104252537B (zh) * | 2014-09-18 | 2019-05-21 | 彩讯科技股份有限公司 | 基于邮件特征的索引分片方法 |
CN104361009B (zh) * | 2014-10-11 | 2017-10-31 | 北京中搜网络技术股份有限公司 | 一种基于倒排索引的实时索引方法 |
CN104820693B (zh) * | 2015-04-28 | 2018-07-24 | 广东小天才科技有限公司 | 一种数据搜索的方法及装置 |
CN105045684B (zh) * | 2015-07-16 | 2018-06-15 | 北京京东尚科信息技术有限公司 | 索引切换和索引控制的方法及装置 |
CN105138669A (zh) * | 2015-09-07 | 2015-12-09 | 天脉聚源(北京)传媒科技有限公司 | 一种合并增量索引与总索引的方法及装置 |
CN105373835B (zh) * | 2015-10-14 | 2021-07-02 | 国网湖北省电力公司 | 一种基于构造树模型的链路信息管理方法 |
CN106598990B (zh) * | 2015-10-16 | 2020-06-19 | 卓望数码技术(深圳)有限公司 | 一种搜索方法及*** |
CN105843933B (zh) * | 2016-03-30 | 2019-01-29 | 电子科技大学 | 分布式内存列式数据库的索引建立方法 |
US9934092B2 (en) | 2016-07-12 | 2018-04-03 | International Business Machines Corporation | Manipulating a distributed agreement protocol to identify a desired set of storage units |
CN106294721B (zh) * | 2016-08-08 | 2020-05-19 | 无锡天脉聚源传媒科技有限公司 | 一种集群数据统计及导出方法及装置 |
CN108509438B (zh) * | 2017-02-24 | 2021-08-31 | 南京烽火星空通信发展有限公司 | 一种ElasticSearch分片扩展方法 |
CN108694188B (zh) * | 2017-04-07 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 一种索引数据更新的方法以及相关装置 |
CN107133350A (zh) * | 2017-05-25 | 2017-09-05 | 努比亚技术有限公司 | 基于搜索引擎的数据更新方法、移动终端及存储介质 |
CN107220347B (zh) * | 2017-05-27 | 2020-07-03 | 国家计算机网络与信息安全管理中心 | 一种基于Lucene的支持表达式的自定义相关度排序算法 |
CN109002448B (zh) * | 2017-06-07 | 2020-12-08 | ***通信集团甘肃有限公司 | 一种报表统计方法、装置及*** |
CN109120885B (zh) * | 2017-06-26 | 2021-01-05 | 杭州海康威视数字技术股份有限公司 | 视频数据获取方法及装置 |
CN107436923A (zh) * | 2017-07-07 | 2017-12-05 | 北京奇虎科技有限公司 | 一种在大数据集群中查询索引的方法和装置 |
EP3673623B1 (de) * | 2017-10-23 | 2021-03-17 | Siemens Aktiengesellschaft | Verfahren und steuersystem zum steuern und/oder überwachen von geräten |
CN108804502A (zh) * | 2018-04-09 | 2018-11-13 | 中国平安人寿保险股份有限公司 | 大数据查询***、方法、计算机设备及存储介质 |
CN108681592B (zh) * | 2018-05-15 | 2021-05-25 | 北京三快在线科技有限公司 | 索引切换方法、装置、***以及索引切换中控装置 |
CN110609844B (zh) * | 2018-05-29 | 2022-05-13 | 优信拍(北京)信息科技有限公司 | 一种数据更新方法,装置及*** |
CN108959640B (zh) * | 2018-07-26 | 2021-02-12 | 浙江数链科技有限公司 | Es索引快速构建方法及装置 |
CN109086409B (zh) * | 2018-08-02 | 2021-10-08 | 泰康保险集团股份有限公司 | 微服务数据处理方法、装置、电子设备及计算机可读介质 |
CN109767247A (zh) * | 2019-01-15 | 2019-05-17 | 武汉费米坊科技有限公司 | 一种分布式商品溯源***及溯源方法 |
CN109726264B (zh) * | 2019-01-16 | 2022-02-25 | 北京百度网讯科技有限公司 | 用于索引信息更新的方法、装置、设备和介质 |
CN110209910B (zh) * | 2019-05-20 | 2021-06-04 | 无线生活(杭州)信息科技有限公司 | 索引切换调度方法及调度装置 |
CN110175151A (zh) * | 2019-05-22 | 2019-08-27 | 中国农业科学院农业信息研究所 | 一种农业大数据的处理方法、装置、设备和存储介质 |
CN110704453B (zh) * | 2019-10-15 | 2022-05-06 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种数据查询方法、装置、存储介质及电子设备 |
CN111324767A (zh) * | 2020-02-17 | 2020-06-23 | 厦门快商通科技股份有限公司 | 一种分布式音频指纹引擎*** |
CN112527210A (zh) * | 2020-12-22 | 2021-03-19 | 南京中兴力维软件有限公司 | 全量数据的存储方法、装置以及计算机可读存储介质 |
CN113535730A (zh) * | 2021-07-21 | 2021-10-22 | 挂号网(杭州)科技有限公司 | 搜索引擎的索引更新方法及***、电子设备、存储介质 |
CN114020986B (zh) * | 2022-01-05 | 2022-04-26 | 深圳思谋信息科技有限公司 | 内容检索*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101677328A (zh) * | 2008-09-19 | 2010-03-24 | 中兴通讯股份有限公司 | 一种基于内容分片的多媒体分发***和方法 |
CN101727460A (zh) * | 2008-10-31 | 2010-06-09 | 中兴通讯股份有限公司 | 一种内容分片定位方法和*** |
CN101853283A (zh) * | 2010-05-21 | 2010-10-06 | 南京邮电大学 | 面向多维数据的语义索引对等网络的构建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8903810B2 (en) * | 2005-12-05 | 2014-12-02 | Collarity, Inc. | Techniques for ranking search results |
-
2011
- 2011-05-26 CN CN 201110137785 patent/CN102169507B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101677328A (zh) * | 2008-09-19 | 2010-03-24 | 中兴通讯股份有限公司 | 一种基于内容分片的多媒体分发***和方法 |
CN101727460A (zh) * | 2008-10-31 | 2010-06-09 | 中兴通讯股份有限公司 | 一种内容分片定位方法和*** |
CN101853283A (zh) * | 2010-05-21 | 2010-10-06 | 南京邮电大学 | 面向多维数据的语义索引对等网络的构建方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649804A (zh) * | 2016-12-29 | 2017-05-10 | 深圳市优必选科技有限公司 | 数据查询服务器的数据处理方法及装置、数据处理*** |
Also Published As
Publication number | Publication date |
---|---|
CN102169507A (zh) | 2011-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102169507B (zh) | 一种分布式实时搜索引擎的实现方法 | |
JP6778795B2 (ja) | データを記憶するための方法、装置及びシステム | |
JP7410181B2 (ja) | ハイブリッド・インデックス作成方法、システム、プログラム | |
EP3596619B1 (en) | Methods, devices and systems for maintaining consistency of metadata and data across data centers | |
CN107003935B (zh) | 用于优化数据库去重的装置、方法和计算机介质 | |
CN104714755B (zh) | 一种快照管理方法及装置 | |
US8423733B1 (en) | Single-copy implicit sharing among clones | |
CN102937980B (zh) | 一种集群数据库数据查询方法 | |
AU2013210018B2 (en) | Location independent files | |
US7769792B1 (en) | Low overhead thread synchronization system and method for garbage collecting stale data in a document repository without interrupting concurrent querying | |
CN109376121B (zh) | 一种基于ElasticSearch全文检索的文件索引***及方法 | |
CN104301360A (zh) | 一种日志数据记录的方法、日志服务器及*** | |
CN103595797B (zh) | 一种分布式存储***中的缓存方法 | |
EP3103025A2 (en) | Content based organization of file systems | |
CN104778270A (zh) | 一种用于多文件的存储方法 | |
CN108614837B (zh) | 文件存储和检索的方法及装置 | |
JP2022500727A (ja) | データベースにおけるツームストーンレコードの早期除去のためのシステムおよび方法 | |
CN114116613A (zh) | 基于分布式文件***的元数据查询方法、设备和存储介质 | |
US9002906B1 (en) | System and method for handling large transactions in a storage virtualization system | |
CN105183400A (zh) | 一种基于内容寻址的对象存储方法和*** | |
CN104881466A (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN103049574B (zh) | 实现文件动态副本的键值文件***及方法 | |
CN104424219A (zh) | 一种数据文件的管理方法及装置 | |
CN112334891B (zh) | 用于搜索服务器的集中式存储 | |
CN103778219A (zh) | 一种基于HBase的更新增量索引的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |