一种子串查找方法及装置的制造方法

文档序号:8430877阅读:265来源:国知局
一种子串查找方法及装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,特别涉及一种子串查找方法及装置。
【背景技术】
[0002]随着通信技术的迅速发展,数据量的级别也越来越大,目前已达到了 TB级,导致在TB级的数据文件中查找子串变得更加困难。
[0003]现有的子串查找方式可以包括:通过多次与CPU进行交互,以实现多次1访问,在每一次1访问时读取一行数据,并对读取的该行数据进行子串查找,通过这种逐行读取并处理的方式,在数据量较大时,子串查找的效率较低。

【发明内容】

[0004]有鉴于此,本发明提供一种子串查找方法及装置,以提高子串查找的效率。
[0005]本发明提供了一种子串查找方法,根据目标文件中长度最大的行数据设定第一长度,还包括:
[0006]确定待查找的目标子串;
[0007]根据设定的所述第一长度,将所述目标文件分割成多个预备数据块;
[0008]根据行分隔符,调整所述多个预备数据块的大小,得到调整后的多个实际数据块;
[0009]在每一个实际数据块中查找所述目标子串。
[0010]优选地,
[0011]所述根据行分隔符调整所述多个预备数据块的大小包括:对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找所述行分隔符,如果查找到,则将该分隔位置调整为所述分隔符所在的位置,以对所述两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
[0012]优选地,进一步包括:
[0013]利用第一线程执行所述获取每一个实际数据块,利用第二线程执行所述在每一个实际数据块中查找所述目标子串。
[0014]优选地,所述在每一个实际数据块中查找所述目标子串之后,进一步包括:
[0015]记录在所述目标文件的每一个实际数据块中查找到的所述目标子串的数量,以及所查找到的每一个所述目标子串在所述目标文件中的位置。
[0016]本发明还提供了一种子串查找装置,包括:
[0017]存储单元,用于根据目标文件中长度最大的行数据设定第一长度;
[0018]确定单元,用于确定待查找的目标子串;
[0019]分割单元,用于根据设定的所述第一长度,将所述目标文件分割成多个预备数据块;
[0020]调整单元,用于根据行分隔符,调整所述多个预备数据块的大小,得到调整后的多个实际数据块;
[0021]查找单元,用于在每一个实际数据块中查找所述目标子串。
[0022]优选地,所述调整单元,用于对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找所述行分隔符,如果查找到,则将该分隔位置调整为所述分隔符所在的位置,以对所述两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
[0023]优选地,进一步包括:
[0024]获取单元,用于利用第一线程执行所述获取每一个实际数据块,利用第二线程执行所述在每一个实际数据块中查找所述目标子串。
[0025]优选地,进一步包括:
[0026]记录单元,用于记录在所述目标文件的每一个实际数据块中查找到的所述目标子串的数量,以及所查找到的每一个所述目标子串在所述目标文件中的位置。
[0027]本发明实施例提供了一种子串查找方法及装置,通过设定数据块的长度,在获取目标文件时,可以每次获取一个数据块,其中,由于在每次获取数据块时可以根据设定数据块的长度进行获取,该长度可以根据目标文件中长度最大的行数据来设定,从而提高了每次获取数据的长度,进而提高了子串查找效率。为了保证数据块在分割时,目标子串不分别位于相邻的两个数据块中,可以根据行分隔符,调整分割成的多个预备数据块的大小,得到了调整后的多个实际数据块,从而保证了目标文件分割后,目标子串不分别位于相邻的两个数据块中,提高了子串查找的准确性。
【附图说明】
[0028]图1是本发明实施例提供的方法流程图;
[0029]图2是本发明另一实施例提供的方法流程图;
[0030]图3是本发明实施例提供的文件分割示意图;
[0031]图4是本发明实施例提供的数据块写入与读取的示意图;
[0032]图5是本发明实施例提供的装置所在设备的硬件架构图;
[0033]图6是本发明实施例提供的装置结构示意图;
[0034]图7是本发明另一实施例提供装置结构示意图。
【具体实施方式】
[0035]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0036]如图1所示,本发明实施例提供了一种子串查找方法,根据目标文件中长度最大的行数据设定第一长度,该方法可以包括以下步骤:
[0037]步骤101:确定待查找的目标子串。
[0038]步骤102:根据设定的所述第一长度,将所述目标文件分割成多个预备数据块。
[0039]步骤103:根据行分隔符,调整所述多个预备数据块的大小,得到调整后的多个实际数据块。
[0040]步骤104:在每一个实际数据块中查找所述目标子串。
[0041 ] 根据上述方案,通过设定数据块的长度,在获取目标文件时,可以每次获取一个数据块,其中,由于在每次获取数据块时可以根据设定数据块的长度进行获取,该长度可以根据目标文件中长度最大的行数据来设定,从而提高了每次获取数据的长度,进而提高了子串查找效率。为了保证数据块在分割时,目标子串不分别位于相邻的两个数据块中,可以根据行分隔符,调整分割成的多个预备数据块的大小,得到了调整后的多个实际数据块,从而保证了目标文件分割后,目标子串不分别位于相邻的两个数据块中,提高了子串查找的准确性。
[0042]由于根据设定的第一长度将目标文件分割为多个预备数据块,可能导致待查找的目标子串分别位于两个相邻的预备数据块中,根据目标子串不可能被行分隔符分离的性质,可以对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置,在该分隔位置之前或之后的预设第二长度范围内查找行分隔符,如果查找到,则将该分隔位置调整为分隔符所在的位置,以对两个预备数据块的大小进行调整,得到调整后的两个实际数据块。
[0043]为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
[0044]如图2所示,本发明实施例提供了一种子串查找方法,该方法可以包括以下步骤:
[0045]步骤201:根据目标文件η中长度最大的行数据设定一个长度I,其中,设定的该长度I用于将文件η分割为多个数据块。
[0046]在本实施例中,由于现有技术方案中对文件η进行逐行获取的效率较低,为了提高在文件η中查找子串的效率,可以每次获取一个数据块,其中,该长度I可以根据文件η中长度最大的行数据进行设定,且设定的长度I需不小于该长度最大的行数据。例如,文件η中长度最大的行数据的长度为5ΚΒ,那么获取的数据块的长度I需要不小于5ΚΒ。另外,该长度I还可以根据对文件中一行数据的长度的经验值来设定,比如,一个文件中一行数据的长度范围可以是2ΚΒ-6ΚΒ,那么长度I就可以设定为不小于6ΚΒ的值。当然,为了提高获取文件η的数据块的效率,可以将长度I设定为一个较高的值,比如,100ΜΒ。
[0047]步骤202:确定待查找的目标子串。
[0048]在本实施例中,子串是指任意一个或连续的多个字符,例如,“abd”、“你好”、“的” “我们”等等都可以称之为子串。例如,可以将“我们”作为本实施例中待查找的目标子串。
[0049]在本实施例中,可以指定数据库中的大量文件作为本实施例中用于查找子串的文件n,文件η的长度可以达到TB级。
[0050]步骤203:根据长度1,将文件η分割成多个预备数据块。
[0051]如图3所示,为文件分割示意图,假设文件η的长度为10GB,设定的长度I为100ΜΒ,那么需要对该文件分割为100份,即将文件η分割为预备数据块1、预备数据块2、预备数据块3、…预备数据块100。其中,预备数据块I在文件η中的位置为文件η的文件头,预备数据块2在文件η中的位置为第100ΜΒ,预备数据块3在文件η中的位置为第200ΜΒ……。其中,图3中是以分割后的预备数据块2为例,对文件η被分割成多个预备数据块进行说明。
[0052]步骤204:对于每相邻的两个预备数据块,确定分隔该两个预备数据块的分隔位置。
[0053]在本实施例中,相邻两个预备数据块之间的分割位置如图3所示的预备分割位置处,其中,预备数据块2与预备数据块I之间包括一个分割位置,预备数据块2与预备数据块3之间包括一个分割位置。
[0054]步骤205:在该分隔位置之前或之后的预设第二长度范围内查找行分隔符,如果查找到,执行步骤206,否则,执行步骤207。
[0055]由于根据长度I将文件η分割为多个预备数据块,可能导致子串“我们”分别位于两个相邻的预备数据块中,例如,对于分割成的预备数据块I和预备数据块2,在分割时“我”位于预备数据块I中,是预备数据块I的最后一个字符,“们”位于预备数据块2中,是预备数据块2的第一个字符,可能会导致在后续预备数据块I和预备数据块2中分别查找子串“我时,无法查找到该被分割开的子串“我们”,影响了子串查找的准确性。因此,在对文件η进行分割前需要对数据库的大小进行调整。
[0056]在本实施例中,根据子串不可能被行分隔符分离的性质,可以根据行分隔符来确定子串是否被两个预备数据块之间的分割位置
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1