劉兵
(中國電子科技集團(tuán)第二十八研究所,江蘇 南京210007)
本論文的研究?jī)?nèi)容是設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于Linux 平臺(tái)B/S架構(gòu)的多功能信息檢索代理系統(tǒng),該系統(tǒng)能夠?qū)崿F(xiàn)本地文件檢索和詞語的在線搜索,使用戶有更好的用戶體驗(yàn)。更好地利用Linux 系統(tǒng),提高工作效率和學(xué)習(xí)效率。
近年來,Linux 操作系統(tǒng)的普及,Linux 發(fā)行了各種版本,包括Red Hat Linux、Ubuntu Linux、SuSE Linux 及Gentoo Linux等,國內(nèi)的中標(biāo)和麒麟也越來越成熟,越來越多的用戶選擇Linux 系統(tǒng)。但目前各Linux 版本下沒有一個(gè)易于使用的像Windows 系統(tǒng)下的本地快速搜索工具。因此,開發(fā)一個(gè)輕量級(jí)本地文件搜索工具是非常必要的。
任何操作系統(tǒng)都由數(shù)千個(gè)文件組成,Linux 系統(tǒng)下的公共文件、字符設(shè)備、目錄、塊設(shè)備、套接字等都被視為文件。通常在Linux 系統(tǒng)下確定問題存放位置的方法有三種:Linux 系統(tǒng)桌面版本的文件管理器、locate 命令和find 命令。
文件管理器是Linux 系統(tǒng)提供用戶界面管理文件的工具,常見的Linux 文件管理器有鸚鵡螺、海豚、尼莫和牡丹等。這些管理器都提供了文件管理、文檔查看及網(wǎng)絡(luò)瀏覽的功能。對(duì)普通用戶而言文件管理器是最方便的文件搜索工具。但是,Linux系統(tǒng)的文件管理器在搜索文件時(shí)是對(duì)整個(gè)磁盤文件進(jìn)行掃描,搜索文件的時(shí)間會(huì)很長(zhǎng),嚴(yán)重影響用戶的體驗(yàn)和工作效率。
Linux 系統(tǒng)下通常用find 命令在指定的目錄下查找文件。find 命令根據(jù)文件屬性包括文件名、正則表達(dá)式、文件權(quán)限、文件大小等多種查詢方式進(jìn)行搜索。由于find 命令會(huì)在當(dāng)前目錄下查找所有的子目錄和文件,所以如果系統(tǒng)中文件和目錄比較復(fù)雜時(shí)通過find 命令查找文件的效率會(huì)很低,通常要花十幾分鐘才能搜索完整個(gè)目錄樹。
Linux 系統(tǒng)下通過定位命令可以快速的搜索到系統(tǒng)的指定文件,它的效率比find 命令要快很多。Locate 命令預(yù)先構(gòu)建一個(gè)包括系統(tǒng)所有文件名和路徑的索引數(shù)據(jù)庫,然后當(dāng)搜索文件時(shí)只需要在這個(gè)索引數(shù)據(jù)庫中進(jìn)行查詢匹配文件信息就可以了。構(gòu)建索引數(shù)據(jù)庫需要遍歷整個(gè)Linux 系統(tǒng)的根目錄,這個(gè)過程比較耗費(fèi)資源,而且locate 命令不是實(shí)時(shí)查找,查找的結(jié)果不是百分百準(zhǔn)確。
通過對(duì)上述三種方法的分析,都不能滿足用戶快速實(shí)時(shí)準(zhǔn)確進(jìn)行文件檢索和詞語的在線搜索,所以設(shè)計(jì)和開發(fā)一個(gè)本地文件快速搜索工具來滿足工程中的用戶需求當(dāng)務(wù)之急。
快速搜索工具軟件設(shè)計(jì)結(jié)構(gòu)主要包括業(yè)務(wù)邏輯、后臺(tái)數(shù)據(jù)處理、用戶界面三個(gè)部分,該軟件采用簡(jiǎn)化的模型- 視圖- 控制器(MVC)模式。MVC 模式可以把數(shù)據(jù)庫和業(yè)務(wù)邏輯以及用戶界面的開發(fā)分開,當(dāng)軟件需求、算法改進(jìn)或用戶界面改變時(shí),軟件易于維護(hù)和升級(jí)。
業(yè)務(wù)邏輯模型(LogicModule.py)用于處理搜索工具軟件的數(shù)據(jù)邏輯。它包含了創(chuàng)建文件索引數(shù)據(jù)庫、索引數(shù)據(jù)庫庫的查詢、數(shù)據(jù)庫記錄更新以及全局變量等。主要功能如表1 所示。這些函數(shù)實(shí)現(xiàn)指定目錄中的文件索引創(chuàng)建、索引數(shù)據(jù)庫創(chuàng)建、實(shí)時(shí)文件索引更新和索引數(shù)據(jù)的查詢等。
表1 業(yè)務(wù)邏輯模型中的主要功能
后臺(tái)數(shù)據(jù)管理使用SQLite 數(shù)據(jù)庫。SQLite 是一款輕型的關(guān)系型數(shù)據(jù)庫,其特點(diǎn)是體積小、性能高、可移植性。同時(shí)它可以在Windows、Unix、Linux 等主流操作系統(tǒng)的軟件平臺(tái)中運(yùn)行。它可以與許多編程語言(C、Java、PHP、Python 等)以及ODBC 接口相結(jié)合。
Python 作為一種跨平臺(tái)的、結(jié)合了編譯性、解釋性、互動(dòng)性和面向?qū)ο蟮哪_本語言,Python 開發(fā)人員可以選擇GUI 開發(fā)框架,包括wxpython、pyqt5、gtk 和tkinter。
由于工程中各應(yīng)用軟件都是基于QT 進(jìn)行開發(fā)的,所以該軟件選擇pyqt5 作為用戶界面的開發(fā)框架。
3.1.1 數(shù)據(jù)的實(shí)時(shí)更新
Inotify 是一個(gè)Linux 內(nèi)核特性,它提供了監(jiān)視文件系統(tǒng)事件的機(jī)制,及時(shí)向應(yīng)用程序發(fā)出相關(guān)的事件警告,比如文件刪除、文件添加,文件讀寫和卸載操作等,還可以跟蹤活動(dòng)的源頭和目標(biāo)等細(xì)節(jié)。
3.1.2 實(shí)時(shí)監(jiān)控和更新文件索引
Inotifywait 用于收集有關(guān)文件訪問信息。該命令可以監(jiān)視任何指定的文件或目錄,并且可以遞歸地監(jiān)視該目錄下的整個(gè)目錄樹。
在應(yīng)用程序使用inotifywait 命令獲取監(jiān)視目錄更改事件之后,應(yīng)用程序?qū)⒈4娓牡男畔⒉⒏聰?shù)據(jù)庫中的信息。主要腳本如下:
為了從字典中快速找到對(duì)應(yīng)的單詞,系統(tǒng)使用一種特定的方法來查找單詞排序。
這個(gè)詞建立了一個(gè)等級(jí)索引。在搜索時(shí)使用二進(jìn)制搜索算法,首先在第一級(jí)索引中查找,查找在單詞所在的頁面之后,仍然使用二進(jìn)制搜索算法在頁面中找到它。二進(jìn)制搜索要求:a.必須采用順序存儲(chǔ)結(jié)構(gòu);b.必須按關(guān)鍵字大小順序排列。
優(yōu)缺點(diǎn):半重搜索方法的優(yōu)點(diǎn)是比較次數(shù)少,搜索速度快,平均性能好;缺點(diǎn)是待檢查的表是排序表,插入和刪除困難。因此,二元搜索方法適用于不頻繁變化查找頻繁排序的列表。
算法思想:首先,將記錄在表的中間位置的關(guān)鍵字與搜索關(guān)鍵字進(jìn)行比較。如果兩者相等,則搜索成功;否則,如果中間位置,則使用中間位置記錄將表劃分為兩個(gè)子表。如果位置記錄的關(guān)鍵字大于搜索關(guān)鍵字,則進(jìn)一步搜索前一個(gè)子表,否則在進(jìn)一步搜索之后。比較后一個(gè)子列表的中間記錄關(guān)鍵字和要搜索的關(guān)鍵字,重復(fù)上述步驟,直到找到為止。下面提供了算法的偽代碼:
二進(jìn)制搜索算法充分利用待檢數(shù)組的有序特性,采用分治策略。即使在最壞的情況下,算法的搜索時(shí)間復(fù)雜度也是O(log n)。
該軟件設(shè)計(jì)主要用于某工程的文件檢索和定位,該工程中需要在硬盤上保存大量的系統(tǒng)實(shí)時(shí)數(shù)據(jù),該數(shù)據(jù)包括原始數(shù)據(jù)、運(yùn)算結(jié)果、報(bào)表評(píng)估等各種結(jié)果數(shù)據(jù),數(shù)據(jù)量大,存儲(chǔ)的結(jié)構(gòu)比較復(fù)雜,而且用戶需要根據(jù)知道的條件快速定位到文件,獲取到文件的詳細(xì)信息。
系統(tǒng)實(shí)際的運(yùn)行環(huán)境:
操作系統(tǒng)是Enterprise Red Hat 7; 開發(fā)工具是PyDev 插件和Eclipse;硬件CPU 為inter i7、內(nèi)存ddr3 256GB、和1TB 硬盤。
軟件運(yùn)行效果如圖1 所示。
圖1 本地搜索運(yùn)行截圖
該軟件能滿足用戶在系統(tǒng)軟件中快速定位文件的需求,而且在工程中得到了驗(yàn)證,得到了用戶的肯定。
和Linux 系統(tǒng)自帶的文件管理器、locate 命令和find 命令相比,該工具體積小,運(yùn)行速度快,搜索文件快,同時(shí)還支持模糊查詢,通過工具查詢到結(jié)果后雙擊搜索到的文件即可打開所需文件并實(shí)現(xiàn)文件索引的實(shí)時(shí)更新。后續(xù)軟件設(shè)計(jì)將引入多線程技術(shù),優(yōu)化文件索引的算法,縮短索引的建立時(shí)間,同時(shí)完善索引接口來實(shí)現(xiàn)智能化搜索,提高用戶在工程中的使用滿意度。