帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
FTP的搜尋引擎 – FtpLocate
 

【作者: 董仲愷】   2004年02月25日 星期三

瀏覽人次:【3951】

大部份的網路資料,都是以檔案的方式存放在各個不同的FTP Server裡,供使用者下載。不過每部FTP Server都可能含有上千萬的檔案,因此使用者要在這麼多的檔案中找出所要的資料,並不是一件容易的事,而FtpLocate就是針對這個解決方案所設計出來的一套軟體。


FtpLocate的概略介紹

FtpLocate會先到各個指定的FTP Server取回其filelist,然後進行索引。在索引完成後,使用者便可透過Web介面,查詢檔名含有特定字串的檔案。爾後,FtpLocate會利用事先建立的索引,快速找出使用者所需檔案所在的站台和路徑。


FtpLocate的特色頗多,如具有可針對多部FTP Server進行索引、搜尋速度快,在P4-1.7G的機器上,由1700萬筆紀錄中尋找所有包含某特定字串的檔名,需要的時間不到1秒、顯示搜尋結果時,會盡量將距離使用者最近的檔案排在前面。除了對檔名做搜尋外,還可以針對檔案的說明進行搜尋。


FtpLocate所需的系統需求也極為簡單,如Unix、Perl 5.004或之後的版本、Apache、Glimpse 4.1,或其他可以執行CGI的Web伺服器等。


FtpLocate的設計概念

FtpLocate從一開始設計到現在經過數次變動,主要是為了效率上的改善,以下將各次變動的設計概念分述如下。


1. 使用grep做filelist的搜尋比對

FtpLocate最初設計的時候,是為了替單部FTP Server提供檔案搜尋的功能,因此是以grep命令直接對filelist進行尋找。在當時的測試中,一個80GB容量FTP Server的filelist大小約20 MB。在Celeron 300/256MB ram的機器上,grep所需的搜尋的時間約1秒,是在可以接受的範圍內,而這也就是最初 FtpLocate的運作方式。



《圖一 FTP Locate查詢畫面》
《圖一 FTP Locate查詢畫面》

2. 將filename由fileist中獨立出來,提高grep比對效率

FtpLocate在運作一段時間後,發現到畢竟一部FTP Server的空間有限,以至於會發生有些檔案會找不到的情況。這時筆者開始想把FtpLocate擴充成一個能對多部FTP Server作搜尋的引擎,最基本的做法是將filelist從各FTP Server 取回來處理就行了。不過在把20個FTP Server的 filelist取回之後發現,由於資料量暴增,搜尋一次的時間從30秒變到一、兩分鐘,使得原先用grep硬找的這個方法變得不可行,因此筆者了解到,首先面對的問題是如何降低需要搜尋的資料量。


在考慮到一筆檔案的記錄時,除了檔案名稱外,還要知道它所屬的FTP Server,以及其路徑名稱、檔案大小、日期和時間等,但真正使用者會用來檢索的物件,多半是檔名。因此筆者的作法是將檔案名稱自檔案列表中獨立出來,這樣grep要搜尋的量就少了很多,其它的資料再透過索引資料庫取得。在做這樣的改善後,搜尋的時間便縮短到20秒內。下一步再將暫時性資料轉存到ramdisk中,讓搜尋的時間縮短到7秒左右,而這就是FtpLocate的第一個公開版本。


FtpLocate 1.00版的特色之一就是在傳回搜尋結果時,會將使用者所在的位置考慮進去,因為使用者在透過搜尋引擎找到檔案所在的位置後,終究要去FTP站台將資料下載回來。所以FtpLocate所搜尋的結果會以所在的FTP站台來做分組,然後再依據與使用者間的位置近遠關係排序(越近的站台會擺在越前面)傳回來。


由於查詢的結果往往很多,甚至有時要分成好幾頁,所以透過離使用者最近的資料先傳回來的方式,能夠讓使用者能儘快到達最近的FTP Server去下載相關的資料,也減少使用者在查看數頁索引的麻煩。至於距離判斷的方式則是利用Domain Name來做比對,兩者間的Domain 越相似的,其距離就越接近。此外FtpLocate在搜集filelist時順便統計各FTP站台的一些屬性,像是目錄個數、檔案個數和資料大小等,同時也方便管理者了解各FTP站台資料的消長情形。


3. 採用全文檢索,解決搜尋速度隨資料增加而變慢的問題

第一版的FtpLocat由於是透過grep來搜尋資料,其搜尋的速度會隨著索引資料的增加,而呈線型成長。這在索引站台數量少的時候沒有關係,不過當索引站台越來越多的時候,便會造成使用者查詢時間過長,所以速度是筆者當下要改進的目標。


一個 FTP搜尋引擎所搜尋的對象其實就是一些存有各FTP站台裡的filelist檔案資料,而這些資料有著相當的重覆性。在同一個FTP Server上的filelist,同一個目錄名稱會出現相當多次;而在不同的FTP間,由於許多站台都是透過mirror方式抓取資料,所以其filelist也會有很多重覆的目錄和檔名,這樣的特性很適合用全文檢索引擎來做處理;不過到最後筆者所採用的是Glimpse這個免費的全文檢索引擎。


為了避免使用者等太久,當FtpLocate透過Glimpse發現到使用者的keyword出現在太多的片段時,FtpLocate會讓agrep優先從離user最近的FTP Server相關片段開始找起,並儘可能地列出資料。而屬於那些較遠的FTP Server的相關片段,則只會處理少部份的資料。透過這樣的方式,可以保證FtpLocate的反應時間不會太長。至於那些沒能在第一次全部顯示出來結果的FTP Server,筆者在其圖示旁邊提供了一個more的link,讓使用者能夠進一步點選。


後來推出的1.50版除了有速度上的改善外,另一個特色就是能夠根據說明來搜尋檔案。一般使用者在尋找檔案時,其實有很多時候並不知道檔名,可能只是知道要找哪方面或是作甚麼用的檔案,所以FtpLocate在1.50版還加上了說明搜尋的功能。


在FTP Server上的檔案,有許多的檔案都有相關說明,如linux的lsm、freebsd的package、simtel中的00readme等。FtpLocate會將這些資料整合起來,建立一個說明資料庫。因此使用者可以透過 'win;ftp;Server' 這樣的命令,找出windows平台下的ftp Server,或是透過 'network;monitor' 找出所有的網路監控程式。


以上的例子,找到的檔案檔名中很可能都沒有這些keyword,但是透過說明搜尋卻很容易就找出來了。說明資料庫則是一方面供搜尋之用,一方面用在顯示filelist。不過有些檔案光從檔名並不容易看出它的用途,但在加上說明後,就可以讓使用者了解到檔案的功能。


為了讓FtpLocate能夠維持長時間的服務,我們盡量避免在filelist收集時,變動到搜尋引擎的資料,而只有在更新索引時才會變動其資料。由於資料索引所花的時間相對於filelist的收集要少許多,因此資料更新所造成的服務中斷時間也就會減短許多。


另一個問題就是FtpLocate嘗試對Ftp Server友善一些,且頻寬吃少一些,筆者為此在說明檔的收集上作了一些努力。首先,針對同一個說明檔,FtpLocate會找出其所有的位置,然後只到最近的那個Server抓一次。如果抓不成,再到次近的Ftp Server去抓,這樣可以避免收集時的頻寬被浪費。另外筆者也考量到FTP中含有檔案說明的檔案並不會時常更新,所以FtpLocate會cache一份在local端,如果發現remote端的file在locate端已經有一份檔案,那麼FtpLocate就不會再去抓了。在我們的測試中,「收集說明」的時間已由數小時縮短到數十分鐘。


在版本2.0以後,主要是作一些細部的改進,如允許指定各FTP Server所在的 port,登入各FTP Server時所用的username和password,以便讓管理者能將FtpLocate運用在非公開的FTP Server裡。



《圖二 查詢結果畫面》
《圖二 查詢結果畫面》

FtpLocate的應用實例

目前FtpLocate已經被運用在多處大學的FTP Server上,如台灣大學、中央大學、中興大學、暨南大學、海洋大學、淡江大學、元智大學、大葉大學、新竹師院,以及勤益技術學院等。


此外,筆者以一部P4-1.7G/256MB RAM的機器,對台灣學術網路上的28個大型FTP站台進行索引。這28個FTP站台全部共有5216537個目錄和12772347個檔案,共佔6659.75 GB。從這28個FTP站台搜集檔案列表所花的時間約為10小時,資料量則是1944MB。索引這些檔案列表需費時60分鐘,而檔案列表索引檔大小共為78 MB。在完成檔案列表索引後,筆者利用它取得說明檔的檔案名稱列表。目前FtpLocate Server所認得的說明檔種類有Linux的lsm、FreeBSD的package index、Simtel 00index和RFC index。


如果說明檔案格式不屬於以上幾種,則程式會試著抓出說明檔中有意義的部份。搜集說明檔所花時間約42分鐘,抓回的說明檔的資料共佔203MB。解讀說明檔並建立索引需時6分鐘,說明索引檔大小共10 MB,但大部份的搜尋都可在1秒內完成。


總結

目前FtpLocate並不支援中文檔名的搜尋,原因是在於FtpLocate所使用的全文檢索程式Glimpse目前並不支援中文。當Glimpse支援中文後,筆者會試著替FtpLocate加上中文搜尋支援。不過由於中文檔名在一般的FTP Server上並不常出現,所以這個問題不會造成太大的影響。


在本篇文章中,筆者介紹了FtpLocate這個搜尋引擎,而FtpLocate中利用全文檢索來加速搜尋速度的方法,相信也可以運用到其他類似系統的實作上。


延 伸 閱 讀
 FTP命令是Internet用戶使用最頻繁的命令之一,不論是在DOS還是UNIX操作的系統下使用FTP,都會遇到大量的FTP內部命令,本篇文章將介紹Windows裡的DOS FTP命令集。相關介紹請見「FTP命令基本用法」一文。
CuteFtp是一款非常受歡迎的FTP工具,介面簡潔,並具有的支援上下載中斷點續傳、操作簡單方便等特徵,無論是下載軟體或是更新主頁,CuteFTP是一款不可多得的好工具,本篇文章將介紹CuteFTP的使用方法和特色。你可在「經典FTP軟體:CuteFTP輕鬆上手」一文中得到進一步的介紹。
“虛擬系統”的意思是“假的系統”,亦即使用者所看到的系統檔案及程式,並不是系統管理者所使用的檔案,而是專給使用者所使用的“虛擬系統”。在「如何以Solaris架設FTP虛擬系統」一文為你做了相關的評析。
相關組織網站
Ftplocate官方網站
FtpLocate Server位置
Webglimpse官方網站
  相關新聞
» 數智創新大賽助力產學接軌 鼎新培育未來AI智客
» VicOne深植車用資安DNA再報喜 獲TISAX AL3最高等級認證
» 勤業眾信獻策5方針 解決GenAI創新3大常見風險
» Fortinet整合SASE突破組織分散管理困境 重塑雲端安全的混合未來
» UD Trucks選用VicOne解決方案 利用情境化攻擊情報洞察風險


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.18.222.98.29
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw