嵌入式系統(tǒng)中檔案操作與快速檢索方法
【專利說明】嵌入式系統(tǒng)中檔案操作與快速檢索方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及一種嵌入式系統(tǒng)中的檔案操作與檢索方法。
【背景技術(shù)】
[0003]嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,功能、可靠性、成本、體積、功耗要求相對(duì)嚴(yán)格的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)特點(diǎn)是:系統(tǒng)內(nèi)核小,專用性強(qiáng),系統(tǒng)精簡,系統(tǒng)與應(yīng)用軟件同步升級(jí),系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片中。
[0004]目前,隨著物聯(lián)網(wǎng)的迅猛發(fā)展,嵌入式系統(tǒng)在物聯(lián)網(wǎng)身份識(shí)別領(lǐng)域的應(yīng)用愈來愈廣泛。在嵌入式身份識(shí)別應(yīng)用中,內(nèi)存空間小,CPU主頻低,沒有數(shù)據(jù)庫引擎等條件限制,造成大數(shù)據(jù)量的檔案檢索,成了程序員頭疼的問題。檔案檢索通常方法是:將檔案整體加載到內(nèi)存,在內(nèi)存中順序查找關(guān)鍵字,找到后返回該行的檔案。在CPU主頻400MHz,內(nèi)存128M的嵌入式系統(tǒng)和同等級(jí)的系統(tǒng)中,做10萬條檔案通常檢索方法測試,最長檢索時(shí)間是2秒。檢索速度超過I秒用戶是不能接受的,因此,多數(shù)廠家給出檔案最大容量是5萬條。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是,提供一種嵌入式系統(tǒng)中檔案操作與快速檢索方法,在快速遍歷算法基礎(chǔ)上,完成檔案加載,快速檢索、增加、刪除、過濾等操作;同時(shí),盡量降低
內(nèi)存消耗,提高系統(tǒng)運(yùn)行效率。
[0006]本發(fā)明的技術(shù)方案如下:
一種嵌入式系統(tǒng)中檔案操作與快速檢索方法,其特征在于按照以下步驟進(jìn)行加載與檢索:
(1)、將檔案文件的行信息按序加載到內(nèi)存中,形成“行索引”,用于建立列索引和文件的對(duì)應(yīng)關(guān)系,便于檔案內(nèi)容的快速定位;
(2)、將檔案中的查詢列按關(guān)鍵字排序后加載到內(nèi)存中,形成“列索引”,為了減少內(nèi)存占用,只加載查詢列;
(3)、包括關(guān)鍵字檢索、檔案加載、增加檔案、刪除檔案、設(shè)置過濾條件以及取某行檔案數(shù)據(jù)在內(nèi)的檔案操作:首先在列索引中查找關(guān)鍵字,找到所在行號(hào)后,在文件中定位相應(yīng)的行,然后操作檔案數(shù)據(jù)。其中關(guān)鍵字檢索采用二分查找算法檢索關(guān)鍵字,增加檔案和刪除檔案在檢索的基礎(chǔ)上做文件操作,條件過濾在檢索的基礎(chǔ)上讀取數(shù)據(jù)。
[0007]關(guān)鍵字檢索方法是:在列索引中采用二分法查找關(guān)鍵字,找到后取檔案行號(hào),在行索引中二分查找行號(hào),找到后取行位置和長度,在文件中找到位置后,按照有效數(shù)據(jù)長度取出數(shù)據(jù)。
[0008]所述檔案加載方法是:從檔案文件中逐行讀出檔案數(shù)據(jù),將行號(hào)、起始位置和長度依次存儲(chǔ)在行索引內(nèi)存塊中;將行數(shù)據(jù)分割得出關(guān)鍵列值,將其與行號(hào)一起形成列索引信息,順序存儲(chǔ)在列索引內(nèi)存塊中;文件讀取完畢后,將列索引信息按照關(guān)鍵字先后順序排序,生成檔案的列索引。
[0009]所述增加檔案方法是:將要增加的檔案信息寫入檔案文件,獲得檔案的行號(hào)、起始位置、長度和關(guān)鍵字,生成行索引,檢索關(guān)鍵字找到列索引插入位置,將關(guān)鍵字和行號(hào)插入列索引內(nèi)存塊中。
[0010]刪除檔案的方法是:在列索引塊中找到刪除檔案的關(guān)鍵字的行號(hào),刪除列索引塊中的關(guān)鍵字索引信息,檢索行索引位置,刪除檔案內(nèi)容和行索引塊中的行索引信息。
[0011]所述設(shè)置過濾條件的方法是:在檔案的列索引塊中查找滿足條件的索引集合的首尾索引號(hào),將這兩個(gè)值保存到檔案信息結(jié)構(gòu)中,標(biāo)識(shí)下次執(zhí)行按行取檔案數(shù)據(jù)的起始和終止索引號(hào)。
[0012]所述取某行檔案數(shù)據(jù)的方法是:如果沒有設(shè)置過濾條件,自第O行開始,從行索引塊中查找相應(yīng)的行索引信息,然后從文件中取出該行檔案數(shù)據(jù);如果設(shè)置了過濾條件,從起始索引號(hào)位置起,順序查找某行的索引值,在行索引塊中找到該行的行索引信息,然后從文件中取出該行檔案數(shù)據(jù)。
[0013]二分查找,又稱為折半查找,當(dāng)數(shù)據(jù)量很大時(shí)適宜采用該方法。二分查找只適用于有序表,且限于順序存儲(chǔ)結(jié)構(gòu)。假設(shè)有序表是遞增排列的,首先確定區(qū)間的中間位置,待查值與中間位置的數(shù)值比較,如果相等,則查找成功并返回該位置。否則需重新確定查找區(qū)間,繼續(xù)二分查找。重新確定查找區(qū)間的辦法如下:如果中間位置的值大于待查值,則新區(qū)間為當(dāng)前中間值的前半部分;如果中間位置的值小于待查值,則新區(qū)建為當(dāng)前中間值的后半部分。這樣,每次經(jīng)過中間值與待查值的比較,就可以確定是否查找成功,不成功則查找區(qū)間減半,直至找到關(guān)鍵字或者當(dāng)前區(qū)間為空為止。標(biāo)準(zhǔn)二分法適用于查找單個(gè)元素。
[0014]在標(biāo)準(zhǔn)二分法查找的基礎(chǔ)上,擴(kuò)展后可以實(shí)現(xiàn)數(shù)據(jù)塊查找。如圖2所示,某塊數(shù)據(jù)中有多個(gè)數(shù)據(jù)與所要查找的數(shù)據(jù)相等,在排好序的基礎(chǔ)上,利用標(biāo)準(zhǔn)二分法,查找成功后,繼續(xù)遍歷數(shù)據(jù),直到查找到所需元素在數(shù)據(jù)塊中最頂端的位置,然后將找到的最頂端位置作為新的搜索區(qū)域的起始位置,按照上述步驟,查找到所需元素在數(shù)據(jù)塊中最底端的位置。這樣便可實(shí)現(xiàn)數(shù)據(jù)塊的定位。按照類似的方法,單獨(dú)查找數(shù)據(jù)塊最頂端位置和最底端位置,可以查
找任意滿足某一區(qū)間(==、>、多、<、<)的數(shù)據(jù)塊的定位。
[0015]本發(fā)明的積極效果在于:
順序檢索和快速檢索的時(shí)間和空間復(fù)雜度對(duì)比。
[0016](I)、順序檢索方法時(shí)間復(fù)雜度和空間復(fù)雜度:
時(shí)間復(fù)雜度:Τ(η)=0(η);
空間復(fù)雜度:S(n) =O(η)。
[0017](2)、本發(fā)明快速檢索方法時(shí)間復(fù)雜度和空間復(fù)雜度:
時(shí)間復(fù)雜度:T(n)=0(log2n);
空間復(fù)雜度:S(n) =O(η)。
[0018]顯而易見,在檔案數(shù)相同情況下,相對(duì)于順序檢索方法,本發(fā)明快速檢索方法時(shí)間復(fù)雜度優(yōu)勢明顯,極大提高了檢索效率;同時(shí),快速檢索方法只加載索引內(nèi)容,降低了內(nèi)存損耗。
[0019]經(jīng)過測試,在CPU主頻400MHz,內(nèi)存128M的嵌入式系統(tǒng)和同等級(jí)的系統(tǒng)中,做20 萬條檔案兩種檢索方法對(duì)比測試,快速檢索比順序檢索效率提高150倍左右。
[0020]檔案檢索功能雖然簡單,但在身份識(shí)別領(lǐng)域中是一個(gè)重要環(huán)節(jié),它的工作效率直接影響整個(gè)系統(tǒng)的性能。本發(fā)明檔案快速檢索方案,在處理速度和內(nèi)存使用上,充分考慮到了嵌入式系統(tǒng)的特點(diǎn),在性能上模糊了嵌入式系統(tǒng)的局限性,成功解決了順序檢索方案速度慢,耗用內(nèi)存大的問題。本發(fā)明檔案快速檢索的實(shí)現(xiàn),對(duì)于身份識(shí)別領(lǐng)域應(yīng)用開發(fā)具有深遠(yuǎn)的現(xiàn)實(shí)意義,給于嵌入式系統(tǒng)應(yīng)用開發(fā)以深刻啟迪。
【附圖說明】
[0021]圖1是本發(fā)明關(guān)鍵字檢索示意圖。
[0022]圖2是本發(fā)明本發(fā)明所采用的二分法擴(kuò)展示意圖。
【具體實(shí)施方式】
[0023]下面結(jié)合附圖和【具體實(shí)施方式】進(jìn)一步說明本發(fā)明。
[0024]本發(fā)明方案制定考慮了以下幾點(diǎn)。首先,檔案檢索不能每次在文件中查找,因?yàn)槊看卧谖募胁檎宜俣葧?huì)很慢,要在內(nèi)存中查找;其次,應(yīng)用占用內(nèi)存不能太大,要預(yù)留一些空間給其他程序使用;最后,大數(shù)據(jù)量的檔案(10萬條以上)檢索時(shí)間在I秒之內(nèi)完成。
[0025]本發(fā)明