一种数据存储和查找的方法及装置的制作方法

文档序号:6428761阅读:246来源:国知局
专利名称:一种数据存储和查找的方法及装置的制作方法
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据存储和查找的方法及装置。
背景技术
在搜索引擎系统中,更新节点与多个搜索节点相连,更新节点用于存储其他网络设备提供的数据,搜索节点用于获取更新节点中存储的数据。由于搜索节点在获取数据时,必须按照更新节点接收到每个数据的接收顺序,顺序的获取每个数据,因此在现有技术中,更新节点存储数据的方法为,按照接收到每个数据的接收顺序,顺序的存储每个数据,并按照接收顺序为每个数据设置编号。例如,更新节点在第I秒接收到数据A,则存储该数据A,并设置该数据A的编号为I,在第2秒接收到数据 B,则存储该数据B,并设置该数据B的编号为2,以此类推。搜索节点获取数据时,先向更新节点发送获取请求,其中获取请求中携带要获取的数据的编号。由于更新节点为每个数据设置的编号是根据接收顺序设置的,因此搜索节点只需要按照编号从小到大的顺序,依次获取编号对应的数据即可,例如搜索节点获取了编号为I的数据,则下一次只需要获取编号为2的数据即可,以此类推。更新节点接收到获取请求后,根据获取请求中携带的数据的编号,以及自身保存的最大编号,采用二分查找的方法确定该数据的编号所在的编号范围,并查找该编号的数据,将查找到的数据提供给搜索节点。下面举例说明现有技术中采用二分查找的方法查找该编号的数据的具体过程,例如,更新节点中存储了编号为I 100的数据,搜索节点发送的获取请求中携带的数据的编号为23,则更新节点取编号I 100的中间值50,判断该中间值50大于该编号23,则确定该数据的编号23在编号I 50的范围内,采用二分查找法继续在编号I 50的范围内继续查找,取编号I 50的中间值25,判断该中间值25大于该编号23,则进一步确定该数据的编号23在编号I 25的范围内,采用二分查找法继续在编号I 25的范围内继续查找,以此类推,直至查找到该编号范围只包含编号23为止,将该编号23的数据提供给搜索节点。由上例可以看出,现有技术中更新节点存储数据的方法会降低查找数据的效率,不能快速的查找到搜索节点所需要的数据。

发明内容
本申请实施例提供一种数据存储和查找的方法及装置,用以解决现有技术中存储数据的方法会降低查找数据的效率的问题。本申请实施例提供的一种数据存储的方法,包括接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号;针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该数据的编号携带在生成的该索引信息中,将该索引信息存储至索引文件的链表区中;将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算;根据取模运算的结果,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。本申请实施例提供的一种数据查找的方法,包括根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算;根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息;
根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息;根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。本申请实施例提供的一种数据存储的装置,包括存储模块,用于接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号;生成模块,用于针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该数据的编号携带在生成的该索引信息中,将该索引信息存储至索引文件的链表区中;运算模块,用于将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算;指示信息存储模块,用于根据取模运算的结果,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。本申请实施例提供的一种数据查找的装置,包括运算模块,用于根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算;指示信息获取模块,用于根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息;索引信息获取模块,用于根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息;查找模块,用于根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。本申请实施例提供一种数据存储和查找的方法及装置,该方法对接收到的每个数据进行编号并存储,针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该索引信息存储至索引文件的链表区中,将该数据的编号与该索引文件的桶区域中包含的存储空间的数量进行取模运算,并将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。由于本申请实施例中采用上述方法存储数据的索引信息和指示信息,从而在查找数据时,将要查找的数据的编号与桶区域中包含的存储空间的数量进行取模运算,查找指示信息,根据查找到的指示信息,在链表区中查找对应的索引信息,再根据索引信息查找对应的数据,因此可以快速的查找到搜索节点所需要的数据,提高了查找数据的效率。


图I为本申请实施例提供的数据存储的过程;
图2为本申请实施例提供的索引文件的格式图;图3为本申请实施例提供的数据查找的过程;图4为本申请实施例提供的数据文件的格式图;图5为本申请实施例提供的数据存储的装置结构示意图;图6为本申请实施例提供的数据查找的装置结构示意图。
具体实施例方式本申请实施例提供一种数据存储和查找的方法及装置,该方法对接收到的每个数据进行编号并存储,针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该索引信息存储至索引文件的链表区中,将该数据的编号与该索引文件的桶区域中包含的存储空间的数量进行取模运算,并将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。由于本申请实施例中采用上述方法存储数据的索引信息和指示信息,从而在查找数据时,将要查找的数据的编号与桶区域中包含的存储空间的数量进行取模运算,查找指示信息,根据查找到的指示信息,在链表区中查找对应的索引信息,再根据索引信息查找对应的数据,因此可以快速的查找到搜索节点所需要的数据,提高了查找数据的效率。下面结合说明书附图,对本发明实施例进行详细描述。图I为本申请实施例提供的数据存储的过程,具体包括以下步骤SlOl :接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号。在本申请实施例中,更新节点存储其他网络设备提供的数据时,为每个数据设置唯一的编号,该编号即为数据的唯一的标识信息。由于搜索节点在获取数据时,必须按照更新节点接收到每个数据的接收顺序,顺序的获取每个数据,因此更新节点接收其他网络设备提供的每个数据,并存储接收到的每个数据,根据接收到每个数据的接收顺序,为存储的每个数据设置对应的编号。例如,更新节点在第I秒接收到数据A,则存储该数据A,并设置该数据A的编号为1,在第2秒接收到数据B,则存储该数据B,并设置该数据B的编号为2,以此类推。S102:针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该数据的编号携带在生成的该索引信息中,将该索引信息存储至索引文件的链表区中。在本申请实施例中,针对每个数据,更新节点建立索引信息与该数据的映射关系,并将该索引信息存储在索引文件的链表区中。S103 :将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算。其中,索引文件的桶区域中包含的每个存储空间用于存储指示信息,该指示信息用于指示某个数据的索引信息在链表区中的存储位置。S104:根据取模运算的结果,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。由于本申请实施例中采用上述方法存储数据的索引信息和指示信息,从而在查找数据时,将要查找的数据的编号与桶区域中包含的存储空间的数量进行取模运算,根据取模运算的结果,在索引文件的桶区域中排号与取模运算的结果相等的存储空间上查找指示信息,根据查找到的指示信息,在链表区中查找对应的索引信息,再根据索引信息查找对应的数据,因此可以快速的查找到搜索节点所需要的数据,提高了查找数据的效率。图2为本申请实施例提供的索引文件的格式图,如图2所示,在该索引文件中,包括该索引文件的文件头、桶区域和链表区。桶区域的每个存储空间用于存储指示某个数据的索引信息在链表区中的存储位置的指示信息,并且,针对桶区域的每个存储空间,该存储·空间的排号即为该存储空间在桶区域的位置。链表区中的每个存储位置用于存储索引信肩、O其中,索引文件的文件头中包括Min_Seq字段、Index_Len字段和Write_pos字段,Min_Seq字段用于记录该索引文件中存储的所有索引信息中携带的数据的最小编号,例如该索引文件中存储的索引信息I对应的数据的编号为1,索引信息2对应的数据的编号为2,索引信息3对应的数据的编号为3,则Min_Seq字段记录的数据的最小编号为I。Index,Len字段用于记录该索引文件的总长度。Write_pos字段用于记录下一次在该索引文件的链表区中存储索引信息时的存储位置。例如当前该索引文件的链表区中存储了 3个索引信息,索引信息I存储在链表区的存储位置1,索引信息2存储在链表区的存储位置2,索引信息3存储在链表区的存储位置3,则下一次存储索引信息时,应该将该索引信息存储在链表区的存储位置4,因此Write_p0S字段记录的下一次在该索引文件的链表区中存储索引信息时的存储位置为存储位置4。在图2中,桶区域的每个存储空间用于存储指示信息,该指示信息用于指示某个数据的索引信息在链表区中的存储位置。存储指示信息的方法为将该某个数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算,将该某个数据对应的指示信息存储在桶区域中排号与取模运算的结果相等的存储空间中。例如,该索引文件的桶区域中包含的存储空间的数量为100个,假设该数据的编号为10,则将该编号10与存储空间的数量100进行取模运算,也即将该编号10除以存储空间的数量100取余数,余数为10,则将该数据的指示信息存储在桶区域中排号为10的存储空间中,假设该编号为10的数据的索引信息在链表区中的存储位置为11,则该数据的指示信息指示该数据的索引信息在链表区的存储位置为11。相应的,采用上述方法存储数据时,更新节点查找数据的方法如图3所示,图3为本申请实施例提供的数据查找的过程,具体包括以下步骤S301 :根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算。S302:根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息。在本申请实施例中,由于采用如图I所示的方法存储数据,因此要通过该数据的索引信息查找该数据,而要查找该数据的索引信息,就要先查找该数据的指示信息,因此将该数据的编号与索引文件的桶区域中包含的存储空间的数量进行取模运算,其运算结果就是该数据的指示信息在桶区域中的存储空间的排号。S303:根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息。继续沿用上例进行说明,该索引文件的桶区域中包含的存储空间的数量为100个,假设获取请求中携带的该数据的编号为10,则将该编号10与存储空间的数量100进行取模运算,也即将该编号10除以存储空间的100取余数,余数为10,则在查找到的该索引文件的桶区域中的排号为10的存储空间中,获取该数据的指示信息,假设获取的该指示信息指示的索引信息在链表区中的存储位置为11,则根据该指示信息,在链表区的存储位置为 11的存储位置上获取该数据的索引信息。S304 :根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。由上述过程可以看出,基于图I提供的数据存储的方法,上述数据查找的方法相较于现有技术中的二分查找法,可以提高数据查找的效率。较佳的,为了进一步提高查找数据的准确性,更新节点存储每个数据的方法具体为,针对接收到的每个数据,根据该数据的数据源,将该数据以及该数据对应的编号存储至对应该数据的数据源的数据文件中。也即,对于相同数据源的每个数据,将该相同数据源的每个数据保存在该数据源对应的数据文件中。采用上述方法存储数据时,针对接收到的每个数据,根据该数据在该数据所在的数据文件中的存储位置,生成与该数据在该数据所在的数据文件中的存储位置具有映射关系的索引信息。例如,该数据A的数据源为数据源a,并且该数据A存储在该数据源a对应的数据文件中的存储位置为100,则建立针对该数据A生成的索引信息,与该数据源a对应的数据文件中存储位置100的映射关系。相应的,在图3所示的数据查找过程中,步骤S304的过程具体为,根据获取的该索引信息,以及保存的索引信息与数据在该数据所在的数据文件中的存储位置的映射关系,查找获取的该索引信息对应的数据。继续沿用上例进行说明,根据获取的该数据A的索引信息,以及该索引信息与该数据源a对应的数据文件中存储位置100的映射关系,查找该数据源a对应的数据文件中存储位置100上存储的数据,则查找到的数据即为数据A。在本申请实施例中,为了进一步提高查找数据的准确性,在图I所示的步骤S102中,更新节点将生成的该索引信息存储至索引文件的链表区中的方法具体为,根据该数据的数据源以及该数据在该数据源下的优先级,将生成的该索引信息存储至该数据源下的该优先级对应的索引文件中。也即,对于相同数据源,且在该相同数据源下的优先级也相同的每个数据,将该每个数据的索引信息存储在该数据源下的该优先级对应的索引文件中。相应的,采用上述方法存储索引信息时,搜索节点向更新节点发送的获取请求中除了携带该搜索节点要获取的数据的编号,还携带有该搜索节点要获取的数据的数据源和优先级。则在上述图3所示的步骤S301执行之前,还要根据获取请求中携带的该数据的数据源和优先级,查找存储该数据对应的索引信息的索引文件。查找到该数据对应的索引信息所在的索引文件后,再将该数据的编号,与查找到的索引文件的桶区域中包含的存储空间的数量进行取模运算,并继续进行后续步骤。在本申请实施例中,由于指示信息的存储方法为将某个数据的编号与桶区域中包含的存储空间的数量取模运算,得到结果,将该某个数据的指示信息存储在桶区域中排号与该运算结果相等的存储空间中,因此可能会出现两个或两个以上的数据的编号与该存储空间的数量取模运算的结果相同的情况,也即发生冲突。因此,在本申请实施例中,在图I所示的步骤S104中,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中的方法还包括,当该索引文件的桶区域中排号与取模运算的结果相等的存储空间中已经存储了指示信息时,保持该存储空间中存储的指示信息不变,并判断该存储空间中存储的指示信息指示的在链表区中的存储位置上存储的索引信息的跳转字段的值是否为0,若是,则将该跳转字段的值修改为该索引信息存储在链表区中的存储位置,否则,继续判断该索引文件的链表区中存储位置与该跳转字段的值相等的存储位置上存储的索引信息的跳转字段是否为O。如图2所示,该索引文件的链表区中存储的索引信息中包含Sequence字段,File_ no字段,Data_offset字段,以及Hash_next_offset字段,该Sequence字段即为该索引信息对应的数据的编号,File_no字段记录了该索引信息对应的数据所在的数据文件的标识信息,Data_offset字段记录了该索引信息对应的数据存储在该数据文件中的存储位置,Hash_next_offset字段即为跳转字段。继续沿用上例进行说明,该索引文件的桶区域中包含的存储空间的数量为100,假设该索引文件的桶区域中排号为10的存储空间中已经存储了编号为10的数据的指示信息,该指示信息指示的该编号为10的数据的索引信息存储在链表区存储位置为11的存储位置上。现在要存储编号为110的数据的索引信息以及指示信息,由于该数据的编号110与存储空间的数量100取模运算的结果仍然为10,因此保持桶区域中该排号为10的存储空间中的指示信息不变,并判断该排号为10的存储空间中存储的该指示信息所指示的链表区的存储位置为11的存储位置上存储的索引信息中的跳转字段是否为O。若是,则将该跳转字段的值修改为该编号为110的数据的索引信息存储在链表区中的存储位置,假设该编号为110的数据的索引信息存储在链表区中的存储位置为111,则将该存储位置为11的索引信息的跳转字段的值修改为111。否则,继续判断链表区中与该存储位置为11的索引文件的跳转字段的值相等的存储位置上的索引信息的跳转字段是否为0,假设该编号为110的数据的索引信息存储在链表区中的存储位置为111,该存储位置为11的索引文件的跳转字段的值为12,则继续判断链表区中存储位置为12的索引信息的跳转字段是否为0,若是,则将该存储位置为12的索引信息的跳转字段的值修改为111,也即根据跳转字段,判断与跳转字段的值相等的存储位置上的索引信息的跳转字段是否为0,直至找到跳转字段为O的索引信息为止,将找到的该索引信息的跳转字段修改为该编号为110的数据的索引信息存储在链表区中的存储位置。相应的,采用上述方法存储指示信息和索引信息时,在图3所示的步骤S303之后,即更新节点获取索引信息之后,还要判断获取的该索引信息中携带的数据的编号,与所述获取请求中携带的改数据的编号是否相同,若是,则将获取的该索引信息作为获取的该数据对应的索引信息,否则,根据获取的该索引信息的跳转字段的值,在该索引文件的链表区中与该跳转字段的值相等的存储位置上重新获取索引信息,并判断重新获取的索引信息中携带的数据的编号,与所述获取请求中携带的该数据的编号是否相同,直至获取的索引信息中携带的数据的编号与所述获取请求中携带的该数据的编号相同为止。继续沿用上例进行说明,该索引文件中存储了编号为10的数据的索引信息,以及编号为110的数据的索引信息,该索引文件的桶区域中包含的存储空间的数量为100,假设该索引文件的桶区域中排号为10的存储空间中已经存储了编号为10的数据的指示信息,该指示信息指示的该编号为10的数据的索引信息存储在链表区存储位置为11的存储位置上,并且链表区的存储位置为11的索引信息中的跳转字段的值为111,则要查找编号为110的数据时,确定存储该编号为110的数据的索引信息的该索引文件后,将该编号110与桶区域的存储空间的数量100取模运算,结果为10,在桶区域中排号为10的存储空间中获取指示信息,根据获取的该指示信息所指示的链表区的存储位置11,在链表区的存储位置为11
的存储位置上获取索引信息,并判断获取的索引信息中携带的数据的编号是否为110,由于该存储位置为11的索引信息为该编号为10的数据的索引信息,因此其携带的数据的编号为10,不等于110,从而根据该存储位置为11的跳转字段111,在链表区的存储位置为111的存储位置上重新获取索引信息,继续判断重新获取的存储位置为111的索引信息携带的数据的编号是否为110,若是,则该索引信息为该编号为110的数据的索引信息,否则继续根据跳转字段查找。另外,查找到索引信息后,可以根据索引信息中的File_no字段确定该索引信息对应的数据所在的数据文件,并根据索引信息中的Data_offset字段确定该索引信息对应的数据存储在该数据文件中的存储位置,在确定的数据文件中的相应的存储位置上获取该索引信息对应的数据。在本申请实施例中,为了进一步提高查找数据的效率,并满足数据的变长存储,同一个数据源对应的数据文件可以为若干个,也即针对某个数据,该数据的数据源的数据文件为若干个数据文件。并且,在该若干个数据文件中存储每个数据时,这若干个数据文件为循环使用的,具体方法为,根据接收到的相同数据源的每个数据的数据源,将该每个数据按照接收顺序依次存储至该数据源的若干个数据文件中,其中,当该数据源的某个数据文件存满时,将未存储的每个数据继续按照接收顺序依次存储至该数据源的下一个数据文件中,当该数据源的所有数据文件都存满时,提取当前存储的数据的编号最小的数据文件,将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据。例如,该数据源对应的数据文件为3个,分别为数据文件I,数据文件2和数据文件3,则根据接收到的该数据源的每个数据的接收顺序,先依次将每个数据存储在数据文件I中,当数据文件I存满时,将未存储的剩余的数据继续按照接收顺序依次存储在数据文件2中,以此类推。当这3个数据文件都存满时,提取当前存储的数据的编号最小的数据文件,由于数据的编号是按照接收的顺序从小到大设置的,因此当前存储的数据的编号最小的数据文件为数据文件1,将未存储的每个数据继续按照接收顺序依次覆盖该数据文件I中存储的每个数据。图4为本申请实施例提供的数据文件的格式图,如图4所示,在该数据文件中,包括数据文件的文件头,以及数据区。该数据区的每个存储位置用于存储数据。其中,该数据文件的文件头中包括Write_offset字段、Data_Len字段和Min_seq_set字段。ffrite_offset字段用于记录下一次在该数据文件的数据区中存储数据的存储位置,例如当前该数据文件的数据区中存储了 3个数据,数据I存储在数据区的存储位置1,数据2存储在数据区的存储位置2,数据3存储在数据区的存储位置3,则下一次存储数据时,应该将数据存储在数据区的存储位置4,因此WritejfTset字段记录的下一次在该数据文件的数据区中存储数据的存储位置为存储位置4。Data_Len字段用于记录该数据文件的数据区的长度。Min_seq_set字段用于记录该数据文件中存储的数据的最小编号,例如该数据文件中存储的数据I对应的编号为1,数据2对应的编号为2,数据3对应的编号为3,则Min_seq_set字段记录的数据的最小编号为I。在本申请实施例中,为了保证更新节点在某个数据文件中查找数据的查找过程,与更新节点在该某个数据文件中存储数据的存储过程互不影响,即保证针对每个数据文件的读写不互斥,在将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据之前,还要将提取的数据文件中存储的数据设置为不可读,避免在该数据文件中存储数据的同时,在该数据文件中查找数据。
其中,将提取的数据文件中存储的数据设置为不可读的方法具体为,根据提取的数据文件的下一个数据文件的文件头中记录的改下一个数据文件中存储的数据的最小编号,以及提取的数据文件对应的数据源,将该数据源下的所有优先级对应的索引文件的文件头中记录的数据的最小编号修改为改下一个数据文件中存储的数据的最小编号,其中,针对每个索引文件,将该索引文件中存储的索引信息中携带的数据的最小编号,记录在该索引文件的文件头中。如图2所示的索引文件的格式,索引文件的头文件中的Min_Seq字段记录了该索引文件中存储的所有索引信息中携带的数据的最小编号。由于更新节点在该索引文件中查找某个索引信息时,在携带数据的编号不小于该索引文件的文件头中记录的数据的最小编号的索引信息中查找,因此修改索引文件的文件头中记录的数据的最小编号后,更新节点则不再查找携带的编号小于该最小编号的索引信息,相应的,也就不会在提取的数据文件中查找数据,实现了将提取的数据文件中存储的数据设置为不可读。继续沿用上例进行说明,数据文件I、数据文件2和数据文件3都存满时,要将未存储的数据存储在数据文件I中,此时根据该数据文件I的下一个数据文件,即数据文件2的文件头中记录的该数据文件2中存储的数据的最小编号,以及该数据文件I对应的数据源,将该数据源下的所有优先级对应的索引文件的文件头中记录的数据的最小编号,修改为该数据文件2存储的数据的最小编号。更新节点在索引文件中查找索引信息时,在携带数据的编号不小于该索引文件的文件头中记录的数据的最小编号的索引信息中查找,对于小于该最小编号的索引信息,则不查找,例如索引文件中存储的索引信息I携带的数据的编号为1,索引信息2携带的数据的编号为2,索引信息3携带的数据的编号为3,如果该索引文件的文件头中记录的最小编号为2,则在该索引文件中查找索引信息时,只在不小于该最小编号2的索引信息中查找,也即在索引信息2和索引信息3中查找,而不会查找索引信息I。因此如上例所述将该数据源下的所有优先级对应的索引文件的文件头中记录的最小编号,修改为该数据文件2存储的最小编号后,更新节点将不会查找小于该修改后的最小编号的索引信息,也就不会在数据文件I中查找数据。另外,将提取的数据文件中存储的数据设置为不可读的方法还可以为,根据提取的数据文件对应的数据源,确定该数据源下的所有优先级对应的索引文件,针对确定的每个索引文件,根据该索引文件的文件头中记录的下一次在该索引文件的链表区中存储索引信息的存储位置,以及提取的数据文件的下一个数据文件的文件头中记录的该下一个数据文件中存储的数据的最小编号,在该索引文件的链表区中,从记录的存储位置到链表区的最后一个存储位置,依次查找每个存储位置中存储的索引信息中携带的数据的编号,直至查找到携带的数据的编号不小于该下一个数据文件中存储的数据的最小编号的索引信息,将该索引文件的文件头中记录的数据的最小编号修改为查找到的索引信息中携带的数据的编号。 继续沿用上例进行说明,数据文件I、数据文件2和数据文件3都存满时,要将未存储的数据存储在数据文件I中,此时根据该数据文件I的数据源,确定该数据源下的所有优先级对应的索引文件,针对确定的每个索引文件,根据该索引文件的文件头中记录的下一次在该索引文件的链表区中存储索引信息的存储位置,假设记录的该下一次的存储位置为15,以及该数据文件I的下一个数据文件,即数据文件2的文件头中记录的该数据文件2中存储的数据的最小编号,假设该最小编号为20,则在该索引文件的链表区中,从记录的存储位置为15开始,到链表区的最后一个存储位置,依次查找每个存储位置中存储的索引信息中携带的数据的编号,直至查找到携带数据的编号不小于该最小编号20的索引信息,将该索引文件的文件头中记录的数据的最小编号修改为查找到的索引信息中携带的数据的编号。同样的,由于更新节点在索引文件中查找索引信息时,在携带数据的编号不小于该索引文件的文件头中记录的数据的最小编号的索引信息中查找,对于小于该最小编号的索引信息,则不查找,因此如上例所述将该索引文件的文件头中记录的最小编号修改后,更新节点将不会在该索引文件中查找小于该修改后的最小编号的索引信息,也即不会在该索引文件中查找编号小于20的索引信息,因此也就不会在数据文件I中查找数据。同样的,在本申请实施例中,为了进一步提高查找数据的效率,同一个数据源下的同一个优先级对应的索引文件可以为若干个,也即针对某个数据源下的某个优先级的数据,该数据源下的该优先级对应的索引文件为若干个索引文件。并且,在该若干个索引文件中存储索引信息时,这若干个索引文件为循环使用的,具体方法为,根据接收到的相同数据源下的相同优先级的每个数据的数据源和优先级,将对应该每个数据生成的索引信息,按照接收到该每个数据的顺序依次存储至该数据源下的该优先级对应的若干个索引文件中,其中,当该数据源下的该优先级对应的某个索引文件存满时,将未存储的每个索引信息继续按照对应的数据的接收顺序依次存储至该数据源下的该优先级对应的下一个索引文件中,当该数据源下的该优先级对应的所有索引文件都存满时,查找当前存储的携带数据的最小编号的索引信息所在的索引文件,将未存储的每个索引文件继续按照对应的数据的接收顺序依次覆盖查找到的索引文件中存储的索引信息。该过程与循环使用同一个数据源对应的若干个数据文件的方法基本上同,这里就不再一一赘述。在本申请实施例中,由于系统性能的限制,同一个数据源下的同一个优先级对应的索引文件的数量不宜过多,需要按照需要配置索引文件的数量,例如同一个数据源下的同一个优先级对应的索引文件的数量可以为两个。图5为本申请实施例提供的数据存储的装置结构示意图,具体包括存储模块501,用于接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号;
生成模块502,用于针对接收到的每个数据,生成与存储的该数据具有映射关系的第一索引信息,并将该数据的编号携带在生成的该第一索引信息中,将该第一索引信息存储至索引文件的链表区中;运算模块503,用于将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算;指示信息存储模块504,用于根据取模运算的结果,将指示该第一索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。所述存储模块501具体用于,针对接收到的每个数据,根据该数据的数据源,将该数据以及该数据对应的编号存储至对应该数据的数据源的数据文件中。所述生成模块502具体用于,根据该数据在该数据所在的数据文件中的存储位 置,生成与该数据在该数据所在的数据文件中的存储位置具有映射关系的第一索引信息。所述生成模块502具体用于,根据该数据的数据源以及该数据在该数据源下的优先级,将生成的该第一索引信息存储至该数据源下的该优先级对应的索引文件中。所述指示信息存储模块504还用于,当该索引文件的桶区域中排号与取模运算的结果相等的存储空间中已经存储了指示信息时,保持该存储空间中存储的指示信息不变,并判断该存储空间中存储的指示信息指示的在链表区中的存储位置上存储的第二索引信息的跳转字段的值是否为0,若是,则将该跳转字段的值修改为该第一索引信息存储在链表区中的存储位置,否则,继续判断该索引文件的链表区中存储位置与该跳转字段的值相等的存储位置上存储的第二索引信息的跳转字段是否为O。所述存储模块501具体用于,根据接收到的相同数据源的每个数据的数据源,将该每个数据按照接收顺序依次存储至该数据源的若干个数据文件中,其中,该数据源的数据文件为若干个数据文件,当该数据源的某个数据文件存满时,将未存储的每个数据继续按照接收顺序依次存储至该数据源的下一个数据文件中,当该数据源的所有数据文件都存满时,提取当前存储数据对应的编号最小的数据文件,将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据。所述存储模块501还用于,在将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据之前,将提取的数据文件中存储的数据设置为不可读。所述存储模块501包括记录子模块5011,用于针对每个数据文件,将该数据文件中存储的数据的最小编号记录在该数据文件的文件头中;设置子模块5012,用于根据提取的数据文件的下一个数据文件的文件头中记录的该下一个数据文件中存储的数据的最小编号,以及提取的数据文件对应的数据源,将该数据源下所有优先级对应的索引文件的文件头中记录的数据的最小编号修改为该下一个数据文件中存储的数据的最小编号,其中,针对每个索引文件,将该索引文件中存储的索引信息中携带的数据的最小编号,记录在该索引文件的文件头中。所述存储模块501包括记录子模块5011,用于针对每个数据文件,将该数据文件中存储的数据的最小编号记录在该数据文件的文件头中;
设置子模块5012,用于根据提取的数据文件对应的数据源,确定该数据源下的所有优先级对应的索引文件,针对确定的每个索引文件,根据该索引文件的文件头中记录的下一次在该索引文件的链表区中存储索引信息的存储位置,以及提取的数据文件的下一个数据文件的文件头中记录的该下一个数据文件中存储的数据的最小编号,在该索引文件的链表区中,从记录的存储位置到链表区的最后一个存储位置,依次查找每个存储位置中存储的索引信息中携带的数据的编号,直至查找到携带的数据的编号不小于该下一个数据文件中存储的数据的最小编号的索引信息,将该索引文件的文件头中记录的数据的最小编号修改为查找到的索引信息中携带的数据的编号,其中,针对每个索引文件,将该索引文件中存储的索引信息中携带的数据的最小编号,记录在该索引文件的文件头中。所述生成模块502具体用于,根据接收到的相同数据源下的相同优先级的每个数据的数据源和优先级,将对应该每个数据生成的索引信息,按照接收到该每个数据的顺序依次存储至该数据源下的该优先级对应的若干个索引文件中,其中,该数据源下的该优先级对应的索引文件为若干个索引文件,当该数据源下的该优先级对应的某个索引文件存满时,将未存储的每个索引信息继续按照对应的数据的接收顺序依次存储至该数据源下的该优先级对应的下一个索引文件中,当该数据源下的该优先级对应的所有索引文件都存满·时,查找当前存储的携带数据的最小编号的索引信息所在的索引文件,将未存储的每个索引文件继续按照对应的数据的接收顺序依次覆盖查找到的索引文件中存储的索引信息。所述生成模块502还用于,将未存储的每个索引文件继续按照对应的数据的接收顺序依次覆盖查找到的索引文件中存储的索引信息之前,确定当前未在查找到的索引文件中获取索引信息。其中,如上所述数据存储的装置可以位于更新节点中。图6为本申请实施例提供的数据查找的装置结构示意图,具体包括运算模块601,用于根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算;指示信息获取模块602,用于根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息;索引信息获取模块603,用于根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息;查找模块604,用于根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。所述查找模块604具体用于,根据获取的该索引信息,以及保存的索引信息与数据在该数据所在的数据文件中的存储位置的映射关系,查找获取的该索引信息对应的数据。所述运算模块601还用于,根据所述获取请求中携带的该数据的数据源和优先级,查找存储该数据对应的索引信息的索引文件,其中,所述获取请求中还携带有要获取的数据的数据源和优先级。所述索引信息获取模块603还用于,判断获取的该索引信息中携带的数据的编号,与所述获取请求中携带的改数据的编号是否相同,若是,则将获取的该索引信息作为获取的该数据对应的索引信息,否则,根据获取的该索引信息的跳转字段的值,在该索引文件的链表区中与该跳转字段的值相等的存储位置上重新获取索引信息,并判断重新获取的索引信息中携带的数据的编号,与所述获取请求中携带的该数据的编号是否相同,直至获取的索引信息中携带的数据的编号与所述获取请求中携带的该数据的编号相同为止。本申请实施例提供一种数据存储和查找的方法及装置,该方法对接收到的每个数据进行编号并存储,针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该索引信息存储至索引文件的链表区中,将该数据的编号与该索引文件的桶区域中包含的存储空间的数量进行取模运算,并将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。由于本申请实施例中采用上述方法存储数据的索引信息和指示信息,从而在查找数据时,将要查找的数据的编号与桶区域中包含的存储空间的数量进行取模运算,查找指示信息,根据查找到的指示信息,在链表区中查找对应的索引信息,再根据索引信息查找对应的数据,因此可以快速的查找到搜索节点所需要的数据,提高了查找数据的效率。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围 之内,则本申请也意图包含这些改动和变型在内。
权利要求
1.一种数据存储的方法,其特征在于,包括 接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号; 针对接收到的每个数据,生成与存储的该数据具有映射关系的索引信息,并将该数据的编号携带在生成的该索引信息中,将该索引信息存储至索引文件的链表区中; 将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算; 根据取模运算的结果,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。
2.如权利要求I所述的方法,其特征在于,存储每个数据以及每个数据对应的编号,具体包括 针对接收到的每个数据,根据该数据的数据源,将该数据以及该数据对应的编号存储至对应该数据的数据源的数据文件中。
3.如权利要求2所述的方法,其特征在于,生成与存储的该数据具有映射关系的索引信息,具体包括 根据该数据在该数据所在的数据文件中的存储位置,生成与该数据在该数据所在的数据文件中的存储位置具有映射关系的索引信息。
4.如权利要求I所述的方法,其特征在于,将生成的该索引信息存储至索引文件的链表区中,具体包括 根据该数据的数据源以及该数据在该数据源下的优先级,将生成的该索引信息存储至该数据源下的该优先级对应的索引文件中。
5.如权利要求I所述的方法,其特征在于,将指示该索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中,还包括 当该索引文件的桶区域中排号与取模运算的结果相等的存储空间中已经存储了指示信息时,保持该存储空间中存储的指示信息不变;并 判断该存储空间中存储的指示信息指示的在链表区中的存储位置上存储的索引信息的跳转字段的值是否为O,若是,则将该跳转字段的值修改为该索引信息存储在链表区中的存储位置,否则,继续判断该索引文件的链表区中存储位置与该跳转字段的值相等的存储位置上存储的索引信息的跳转字段是否为O。
6.如权利要求4所述的方法,其特征在于,该数据的数据源的数据文件为若干个数据文件。
7.如权利要求6所述的方法,其特征在于,存储每个数据,具体包括 根据接收到的相同数据源的每个数据的数据源,将该每个数据按照接收顺序依次存储至该数据源的若干个数据文件中; 其中,当该数据源的某个数据文件存满时,将未存储的每个数据继续按照接收顺序依次存储至该数据源的下一个数据文件中,当该数据源的所有数据文件都存满时,提取当前存储数据对应的编号最小的数据文件,将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据。
8.如权利要求7所述的方法,其特征在于,将未存储的每个数据继续按照接收顺序依次覆盖提取的数据文件中存储的数据之前,所述方法包括 将提取的数据文件中存储的数据设置为不可读。
9.如权利要求8所述的方法,其特征在于,针对每个数据文件,将该数据文件中存储的数据的最小编号记录在该数据文件的文件头中; 将提取的数据文件中存储的数据设置为不可读,具体包括 根据提取的数据文件的下一个数据文件的文件头中记录的该下一个数据文件中存储的数据的最小编号,以及提取的数据文件对应的数据源,将该数据源下所有优先级对应的索引文件的文件头中记录的数据的最小编号修改为该下一个数据文件中存储的数据的最小编号; 其中,针对每个索引文件,将该索引文件中存储的索引信息中携带的数据的最小编号,记录在该索引文件的文件头中。
10.如权利要求8所述的方法,其特征在于,针对每个数据文件,将该数据文件中存储的数据的最小编号记录在该数据文件的文件头中; 将提取的数据文件中存储的数据设置为不可读,具体包括 根据提取的数据文件对应的数据源,确定该数据源下的所有优先级对应的索引文件; 针对确定的每个索引文件,根据该索引文件的文件头中记录的下一次在该索引文件的链表区中存储索引信息的存储位置,以及提取的数据文件的下一个数据文件的文件头中记录的该下一个数据文件中存储的数据的最小编号,在该索引文件的链表区中,从记录的存储位置到链表区的最后一个存储位置,依次查找每个存储位置中存储的索引信息中携带的数据的编号,直至查找到携带的数据的编号不小于该下一个数据文件中存储的数据的最小编号的索引信息; 将该索引文件的文件头中记录的数据的最小编号修改为查找到的索引信息中携带的数据的编号; 其中,针对每个索引文件,将该索引文件中存储的索引信息中携带的数据的最小编号,记录在该索引文件的文件头中。
11.如权利要求4所述的方法,其特征在于,该数据源下的该优先级对应的索引文件为若干个索引文件。
12.如权利要求11所述的方法,其特征在于,将索引信息存储至索引文件的链表区中,具体包括 根据接收到的相同数据源下的相同优先级的每个数据的数据源和优先级,将针对该每个数据生成的索引信息,按照接收到该每个数据的顺序依次存储至该数据源下的该优先级对应的若干个索引文件中; 其中,当该数据源下的该优先级对应的某个索引文件存满时,将未存储的每个索引信息继续按照对应的数据的接收顺序依次存储至该数据源下的该优先级对应的下一个索引文件中,当该数据源下的该优先级对应的所有索引文件都存满时,查找当前存储的携带数据的最小编号的索引信息所在的索引文件,将未存储的每个索引文件继续按照对应的数据的接收顺序依次覆盖查找到的索引文件中存储的索引信息。
13.如权利要求12所述的方法,其特征在于,将未存储的每个索引文件继续按照对应的数据的接收顺序依次覆盖查找到的索引文件中存储的索引信息之前,所述方法还包括确定当前未在查找到的索引文件中获取索引信息。
14.一种数据查找的方法,其特征在于,包括 根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算; 根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息; 根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息; 根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。
15.如权利要求14所述的方法,其特征在于,根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据,具体包括 根据获取的该索引信息,以及保存的索引信息与数据在该数据所在的数据文件中的存储位置的映射关系,查找获取的该索引信息对应的数据。
16.如权利要求14所述的方法,其特征在于,所述获取请求中还携带有要获取的数据的数据源和优先级; 根据接收到的搜索节点发送的获取请求中携带的该数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算之前,所述方法还包括 根据所述获取请求中携带的该数据的数据源和优先级,查找存储该数据对应的索引信息的索引文件。
17.如权利要求14所述的方法,其特征在于,根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息之后,还包括 判断获取的该索引信息中携带的数据的编号,与所述获取请求中携带的改数据的编号是否相同,若是,则将获取的该索引信息作为获取的该数据对应的索引信息,否则,根据获取的该索引信息的跳转字段的值,在该索引文件的链表区中与该跳转字段的值相等的存储位置上重新获取索引信息,并判断重新获取的索引信息中携带的数据的编号,与所述获取请求中携带的该数据的编号是否相同,直至获取的索引信息中携带的数据的编号与所述获取请求中携带的该数据的编号相同为止。
18.一种数据存储的装置,其特征在于,包括 存储模块,用于接收每个数据,根据接收到每个数据的接收顺序,为每个数据设置对应的编号,并存储每个数据以及每个数据对应的编号; 生成模块,用于针对接收到的每个数据,生成与存储的该数据具有映射关系的第一索引信息,并将该数据的编号携带在生成的该第一索引信息中,将该第一索引信息存储至索引文件的链表区中; 运算模块,用于将该数据的编号,与该索引文件的桶区域中包含的存储空间的数量进行取模运算; 指示信息存储模块,用于根据取模运算的结果,将指示该第一索引信息存储在链表区中的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。
19.一种数据查找的装置,其特征在于,包括 运算模块,用于根据接收到的搜索节点发送的获取请求中携带的数据的编号,以及索引文件的桶区域中包含的存储空间的数量,将该编号与该数量进行取模运算; 指示信息获取模块,用于根据取模运算的结果,在该索引文件的桶区域中排号与该结果相等的存储空间中获取指示信息; 索引信息获取模块,用于根据获取的指示信息指示的该索引文件的链表区中的存储位置,在该索引文件的链表区中的相应的存储位置上获取该数据对应的索引信息; 查找模块,用于根据获取的该索引信息,以及保存的索引信息与数据的映射关系,查找获取的该索引信息对应的数据。
全文摘要
本申请公开了一种数据存储和查找的方法及装置,用以解决现有技术中存储数据的方法降低查找数据的效率的问题。该方法对数据编号并存储,针对每个数据,生成与该数据具有映射关系的索引信息,并将该索引信息存储至索引文件的链表区,将该数据的编号与该索引文件的桶区域的存储空间的数量取模运算,将指示该索引信息的存储位置的指示信息,存储在该索引文件的桶区域中排号与取模运算的结果相等的存储空间中。由于采用上述方法存储数据,从而查找数据时,将要查找的数据的编号与桶区域的存储空间的数量取模运算,查找指示信息,根据指示信息在链表区中查找索引信息,根据索引信息查找对应的数据,因此可以快速的查找数据,提高了查找数据的效率。
文档编号G06F17/30GK102890675SQ201110201149
公开日2013年1月23日 申请日期2011年7月18日 优先权日2011年7月18日
发明者吕伟, 邹磊, 张振中 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1