李苑 李明

[摘? ? 要] 從企業網站中用戶經常使用的信息瀏覽和信息檢索兩個需頻繁讀取數據庫的功能入手,介紹了可有效降低數據庫讀取頻率的靜態頁面生成技術和站內全文檢索技術的原理和實現方式。
[關鍵詞] 企業網站;靜態頁面生成;全文檢索
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2019. 03. 053
[中圖分類號] TP311? ? [文獻標識碼]? A? ? ? [文章編號]? 1673 - 0194(2019)03- 0131- 03
0? ? ? 引? ? 言
企業網站是用戶了解企業的一個重要窗口,它可為企業提供信息發布、產品宣傳、數據采集以及電子商務等功能,成為企業與客戶及供應商之間溝通交流的一個紐帶[1]。但是,隨著網站數據量和訪問量的不斷增加,頻繁的數據庫讀寫操作將耗費大量的服務器資源,給網站性能帶來嚴重的影響,進而降低用戶的體驗。在Web服務器性能不變的情況下,為有效降低數據庫的讀寫操作,可從用戶訪問量最頻繁的信息瀏覽和信息檢索兩個方向入手,通過靜態頁面生成和站內全文檢索技術的應用來提高網站的響應速度。
1? ? ? 靜態頁面生成技術
在企業網站的開發過程中,為方便網站內容的日常維護,通常會采用動態網頁技術。動態網頁是以數據庫技術為基礎的一種網站開發技術,其URL后綴比較常見的有 aspx、jsp、php、asp等形式。近年來隨著MVC技術的快速發展,“control/action/id”形式URL格式也比較普遍。動態網頁在運行過程中,需將數據預先存儲到數據庫中,當客戶通過瀏覽器向Web服務器發出HTTP請求時,服務器再根據請求執行相應的程序,從數據庫中讀取所需要的內容并填充到動態頁面中,然后再將運行結果以HTML的格式傳送至客戶端瀏覽器,并解釋和顯示[2]。采用動態網頁技術可以大大降低網站內容的維護成本,如果需要修改已發布網站內容,只需在管理頁面修改相應的數據庫字段內容即可。
企業網站發布的信息常常會有很大一部分發布出來后就很少出現更改的情況,如果采用動態頁面技術,每請求一次就需要執行一次數據的查詢和信息的轉換操作,而每次操作都需要消耗一定的服務器的資源,對于訪問量較大的網站來說,很容易出現服務器負擔過重的情況。為解決這一問題,就出現了將動態網頁轉換為靜態頁面的技術,并在很多大型網站上得到了應用。靜態頁面擴展名為html或htm,頁面存儲的內容直接就是HTML格式的文件,不需要經過服務器的編譯,直接根據請求將頁面中的HTML代碼傳遞到客戶端的瀏覽器即可顯示出來。因此,靜態頁面的訪問速度比動態頁面要快許多,而且,由于不需要像動態頁面一樣執行數據的查詢和轉換操作,所消耗的服務器資源也較低。但靜態頁面無法自動更新,如果某個靜態頁面的內容需要修改,只能在后臺管理頁面重新創建一次,故靈活性較差,也不便于控制其訪問權限。因此,動態頁面的靜態化技術只適合于應用在不需要頻繁對頁面內容進行更新和權限控制的功能模塊中,如企業網站中的新聞發布功能模塊等。以下為.NET環境下一種將動態頁面生成為靜態頁面的方法。
2? ? ? 站內全文檢索技術
隨著企業網站各功能模塊中信息量的逐漸增加,如何利用關鍵詞快速地查找到所需信息也就成了網站要解決的關鍵問題之一。對于小型的企業網站來說,由于數據量不是太大,采用基于數據庫的模糊檢索方式就能滿足要求,即根據用戶輸入的關鍵詞構建“select * from tableName where title like ‘%keyword%”等類型的檢索式即可從數據庫中檢索出滿足條件的數據。但這種檢索方式只適合檢索結構化數據,無法對文本、圖片等非結構化數據進行檢索。而且,在使用like查詢時,需要對數據庫表格中相關字段的內容全部檢索一次,在數據量較大的環境下,like查詢對系統性能的影響是相當大的。如果是需要對多個關鍵詞進行模糊匹配:like"%keyword1%" and like "%keyword2%",其檢索效率將會成倍較低,所耗費的服務器資源也會成倍增加。
為解決傳統數據檢索方式存在的效率低下問題,以Lucene為代表的站內全文檢索技術也就應運而生。Lucene 的檢索過程實際上就是把模糊查詢變成可以利用索引進行精確查詢的過程[3],就如查字典,只需要從索引目錄中找出所查字符的頁碼即可實現精確定位,不需要一頁一頁的去搜尋,極大地提升了數據檢索的效率和準確性。全文檢索的實現過程主要分為索引創建和搜索索引兩個步驟。其中,索引創建就是將結構化數據和非結構化數據的特征信息提取出來并儲存到創建好的索引庫中;搜索索引就是根據用戶需要查詢的關鍵詞,從索引庫中搜索出滿足條件的記錄,然后將查詢結果返回給用戶。
索引庫的建立是全文檢索的關鍵技術點,假設某個文檔集合里面有100篇文檔,為了方便表示,將文檔從1到100進行編號,每個編號代表一篇文檔,然后將每篇文檔的關鍵信息提取出來,得到下面的索引結構(見圖1)。左邊保存的是反映文檔關鍵信息的一系列字符串,稱為詞典。每個字符串所指向的是包含此字符串的文檔鏈表,這一文檔鏈表稱為倒排表。一篇文檔可以擁有詞典中的多個字符串。
當索引庫建立起來后,就可通過從索引庫中搜索相關的關鍵詞來查找所需要的信息。
比如,如果我們要尋找既包含字符串“知識”又包含字符串“經濟”的文檔,只需要執行以下三步:①取出包含字符串“知識”的文檔鏈表。②取出包含字符串“經濟”的文檔鏈表。③對以上兩個文檔鏈表進行合并,就可找出既包含“知識”又包含“經濟”的文檔為3、10、31這三篇文檔。然后將這三篇文檔的信息返回給用戶即完成了檢索(見圖2)。
從以上全文檢索的原理可以看出,全文檢索中創建索引的過程只需一次,以后每次搜索數據的時候,只需從創建好的索引庫中搜索相應的關鍵詞就可以了,而且還可以根據相似度算法對檢索結果進行排序,不必像數據庫模糊查詢一樣重新遍歷一次數據庫中的全部數據。
3? ? ? 結? ? 語
對于訪問量和數據量較大的企業網站來說,靜態頁面生成技術和站內全文檢索技術的應用可有效提升網站的整體性能,為用戶帶來更好的使用體驗。其中,靜態頁面生成主要是降低動態頁面運行過程中不斷進行數據庫的查詢和數據轉換操作給服務器資源帶來的不必要耗費,提高頁面的響應速度。站內全文檢索技術主要是解決了傳統的基于數據庫模糊查詢而帶來的問題,提升了數據檢索的效率和準確性。
主要參考文獻
[1]鄧三鴻,楊建林,潘有能,等.企業門戶網站中的數據挖掘研究[J]. 情報學報,2003,22(1):40-45.
[2]白金牛,李慧萍,王培吉. ASP.NET下利用動態網頁技術生成靜態HTML頁面的方法[J]. 計算機應用與軟件,2008,25(1):79-81.
[3]郎小偉,王申康.基于Lucene的全文檢索系統研究與開發[J]. 計算機工程,2006,32(4):94-99.