账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
FTP的搜寻引擎 – Ftp​​Locate
 

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

浏览人次:【3592】

大部份的网路资料,都是以档案的方式存放在各个不同的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官方网站
  相关新闻
» 宜鼎独创MIPI over Type-C解决方案突破技术局限,改写嵌入式相机模组市场样貌
» 鼎新电脑串连生态系夥伴 数智驱动智慧低碳未来制造
» 鼎新电脑携手和泰丰田解缺工 以数位劳动力开启储运新时代
» Fortinet SASE台湾网路连接点今年落成 全台巡??落实云地零信任资安
» Ansys模拟分析解决方案 获现代汽车认证为首选供应商


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

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK84Q9SQPTSSTACUKX
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw