一種子串查找方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及通信技術領域,特別涉及一種子串查找方法及裝置。
【背景技術】
[0002]隨著通信技術的迅速發(fā)展,數據量的級別也越來越大,目前已達到了 TB級,導致在TB級的數據文件中查找子串變得更加困難。
[0003]現有的子串查找方式可以包括:通過多次與CPU進行交互,以實現多次1訪問,在每一次1訪問時讀取一行數據,并對讀取的該行數據進行子串查找,通過這種逐行讀取并處理的方式,在數據量較大時,子串查找的效率較低。
【發(fā)明內容】
[0004]有鑒于此,本發(fā)明提供一種子串查找方法及裝置,以提高子串查找的效率。
[0005]本發(fā)明提供了一種子串查找方法,根據目標文件中長度最大的行數據設定第一長度,還包括:
[0006]確定待查找的目標子串;
[0007]根據設定的所述第一長度,將所述目標文件分割成多個預備數據塊;
[0008]根據行分隔符,調整所述多個預備數據塊的大小,得到調整后的多個實際數據塊;
[0009]在每一個實際數據塊中查找所述目標子串。
[0010]優(yōu)選地,
[0011]所述根據行分隔符調整所述多個預備數據塊的大小包括:對于每相鄰的兩個預備數據塊,確定分隔該兩個預備數據塊的分隔位置,在該分隔位置之前或之后的預設第二長度范圍內查找所述行分隔符,如果查找到,則將該分隔位置調整為所述分隔符所在的位置,以對所述兩個預備數據塊的大小進行調整,得到調整后的兩個實際數據塊。
[0012]優(yōu)選地,進一步包括:
[0013]利用第一線程執(zhí)行所述獲取每一個實際數據塊,利用第二線程執(zhí)行所述在每一個實際數據塊中查找所述目標子串。
[0014]優(yōu)選地,所述在每一個實際數據塊中查找所述目標子串之后,進一步包括:
[0015]記錄在所述目標文件的每一個實際數據塊中查找到的所述目標子串的數量,以及所查找到的每一個所述目標子串在所述目標文件中的位置。
[0016]本發(fā)明還提供了一種子串查找裝置,包括:
[0017]存儲單元,用于根據目標文件中長度最大的行數據設定第一長度;
[0018]確定單元,用于確定待查找的目標子串;
[0019]分割單元,用于根據設定的所述第一長度,將所述目標文件分割成多個預備數據塊;
[0020]調整單元,用于根據行分隔符,調整所述多個預備數據塊的大小,得到調整后的多個實際數據塊;
[0021]查找單元,用于在每一個實際數據塊中查找所述目標子串。
[0022]優(yōu)選地,所述調整單元,用于對于每相鄰的兩個預備數據塊,確定分隔該兩個預備數據塊的分隔位置,在該分隔位置之前或之后的預設第二長度范圍內查找所述行分隔符,如果查找到,則將該分隔位置調整為所述分隔符所在的位置,以對所述兩個預備數據塊的大小進行調整,得到調整后的兩個實際數據塊。
[0023]優(yōu)選地,進一步包括:
[0024]獲取單元,用于利用第一線程執(zhí)行所述獲取每一個實際數據塊,利用第二線程執(zhí)行所述在每一個實際數據塊中查找所述目標子串。
[0025]優(yōu)選地,進一步包括:
[0026]記錄單元,用于記錄在所述目標文件的每一個實際數據塊中查找到的所述目標子串的數量,以及所查找到的每一個所述目標子串在所述目標文件中的位置。
[0027]本發(fā)明實施例提供了一種子串查找方法及裝置,通過設定數據塊的長度,在獲取目標文件時,可以每次獲取一個數據塊,其中,由于在每次獲取數據塊時可以根據設定數據塊的長度進行獲取,該長度可以根據目標文件中長度最大的行數據來設定,從而提高了每次獲取數據的長度,進而提高了子串查找效率。為了保證數據塊在分割時,目標子串不分別位于相鄰的兩個數據塊中,可以根據行分隔符,調整分割成的多個預備數據塊的大小,得到了調整后的多個實際數據塊,從而保證了目標文件分割后,目標子串不分別位于相鄰的兩個數據塊中,提高了子串查找的準確性。
【附圖說明】
[0028]圖1是本發(fā)明實施例提供的方法流程圖;
[0029]圖2是本發(fā)明另一實施例提供的方法流程圖;
[0030]圖3是本發(fā)明實施例提供的文件分割示意圖;
[0031]圖4是本發(fā)明實施例提供的數據塊寫入與讀取的示意圖;
[0032]圖5是本發(fā)明實施例提供的裝置所在設備的硬件架構圖;
[0033]圖6是本發(fā)明實施例提供的裝置結構示意圖;
[0034]圖7是本發(fā)明另一實施例提供裝置結構示意圖。
【具體實施方式】
[0035]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0036]如圖1所示,本發(fā)明實施例提供了一種子串查找方法,根據目標文件中長度最大的行數據設定第一長度,該方法可以包括以下步驟:
[0037]步驟101:確定待查找的目標子串。
[0038]步驟102:根據設定的所述第一長度,將所述目標文件分割成多個預備數據塊。
[0039]步驟103:根據行分隔符,調整所述多個預備數據塊的大小,得到調整后的多個實際數據塊。
[0040]步驟104:在每一個實際數據塊中查找所述目標子串。
[0041 ] 根據上述方案,通過設定數據塊的長度,在獲取目標文件時,可以每次獲取一個數據塊,其中,由于在每次獲取數據塊時可以根據設定數據塊的長度進行獲取,該長度可以根據目標文件中長度最大的行數據來設定,從而提高了每次獲取數據的長度,進而提高了子串查找效率。為了保證數據塊在分割時,目標子串不分別位于相鄰的兩個數據塊中,可以根據行分隔符,調整分割成的多個預備數據塊的大小,得到了調整后的多個實際數據塊,從而保證了目標文件分割后,目標子串不分別位于相鄰的兩個數據塊中,提高了子串查找的準確性。
[0042]由于根據設定的第一長度將目標文件分割為多個預備數據塊,可能導致待查找的目標子串分別位于兩個相鄰的預備數據塊中,根據目標子串不可能被行分隔符分離的性質,可以對于每相鄰的兩個預備數據塊,確定分隔該兩個預備數據塊的分隔位置,在該分隔位置之前或之后的預設第二長度范圍內查找行分隔符,如果查找到,則將該分隔位置調整為分隔符所在的位置,以對兩個預備數據塊的大小進行調整,得到調整后的兩個實際數據塊。
[0043]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖及具體實施例對本發(fā)明作進一步地詳細描述。
[0044]如圖2所示,本發(fā)明實施例提供了一種子串查找方法,該方法可以包括以下步驟:
[0045]步驟201:根據目標文件η中長度最大的行數據設定一個長度I,其中,設定的該長度I用于將文件η分割為多個數據塊。
[0046]在本實施例中,由于現有技術方案中對文件η進行逐行獲取的效率較低,為了提高在文件η中查找子串的效率,可以每次獲取一個數據塊,其中,該長度I可以根據文件η中長度最大的行數據進行設定,且設定的長度I需不小于該長度最大的行數據。例如,文件η中長度最大的行數據的長度為5ΚΒ,那么獲取的數據塊的長度I需要不小于5ΚΒ。另外,該長度I還可以根據對文件中一行數據的長度的經驗值來設定,比如,一個文件中一行數據的長度范圍可以是2ΚΒ-6ΚΒ,那么長度I就可以設定為不小于6ΚΒ的值。當然,為了提高獲取文件η的數據塊的效率,可以將長度I設定為一個較高的值,比如,100ΜΒ。
[0047]步驟202:確定待查找的目標子串。
[0048]在本實施例中,子串是指任意一個或連續(xù)的多個字符,例如,“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:在該分隔位置之前或之后的預設第二長度范圍內查找行分隔符,如果查找到,執(zhí)行步驟206,否則,執(zhí)行步驟207。
[0055]由于根據長度I將文件η分割為多個預備數據塊,可能導致子串“我們”分別位于兩個相鄰的預備數據塊中,例如,對于分割成的預備數據塊I和預備數據塊2,在分割時“我”位于預備數據塊I中,是預備數據塊I的最后一個字符,“們”位于預備數據塊2中,是預備數據塊2的第一個字符,可能會導致在后續(xù)預備數據塊I和預備數據塊2中分別查找子串“我時,無法查找到該被分割開的子串“我們”,影響了子串查找的準確性。因此,在對文件η進行分割前需要對數據庫的大小進行調整。
[0056]在本實施例中,根據子串不可能被行分隔符分離的性質,可以根據行分隔符來確定子串是否被兩個預備數據塊之間的分割位置