FtpSearch是一个我一时脑细胞抽筋儿想出来的项目。目标也很简单,做一个网站用来搜索中国海洋大学(我的大学)内所有的Ftp服务器上的文件,算一个比较实用的项目吧,也很有意思和挑战性。
本来是想和别人一起合作的,最后基本上是自己写完了。不过前台是叔(团队里的兄弟,外号“叔”)写的,光构架变更就要五六次,小地方的改变就不计其数了,快把他逼疯了:需求嘛,变来变去才比较符合实际J。
先说一下项目的需求。
1, 开发背景:海大校园网比较知名的公开ftp服务器可以算是三个:海大官方(ftp://ftp.ouc.edu.cn),海之子的(ftp://211.64.132.235),爱特(也就是我们团队的服务器啦^^,ftp://itftp.ouc.edu.cn)。三个ftp共有的特点就是只有海大内部可以访问。不过海之子的ftp前不久宣布关闭,改为工作人员维护,前台提供网页形式的下载,可以说是毁誉参半吧,所以我们就不考虑它了。据估计,爱特的ftp服务器上大概有20K左右的数据,海大官方的ftp服务器上大概有50k左右的数据。总量只有100k左右,不算大。
2, 需求描述:我们把需求描述为,对于给定的一组Ftp服务器,系统可以根据关键字对其所有的文件进行搜索。这样系统的通用性能就比较高了,起码搜索整个教育网络的Ftp服务器是没有太大的问题(那清华的做过试验)。
3, 其他需求:可以提供基于此搜索引擎的二次开发借口,类似WebServices之类的。计划要用FLA开发一个基于FtpSearch的Mp3 Online Player。
第一版可以说已经做完了(http://it.ouc.edu.cn/ftpsearch)。基本上是作为实验品进行开发的。现在总结一下。
一、第一版的构架:第一版上没有什么构架可言,下面是第一版的构架图:
FtpSearchV1的构架图
更详细的设计图可看我的另一篇Blog(http://yuandong.cnblogs.com/archive/2006/06/25/435148.html)。
从这个图中可以很明显地看出来,这个系统的前台和后台除了使用相同数据库的之外,可以说没有什么联系。很多业务逻辑是重复的。不过本身这个系统就是拿来做实验的,构架图也是整个系统写完之后才开始做的。所以肯定是非常不合适的。
整个系统部署在一台服务器上,当然也可以部署在三台服务器上,不过对于区区100K数据,一台就够了。
二、搜索逻辑。第一版的搜索能力是非常非常地差劲!直接采用MS SQLServer 2000的“LIKE”谓词对数据类型为nvarchar(4000)的Url字段进行模糊查询(Url LIKE "%Keyword%")。不慢才奇了怪了。当数据量为大概100K时,用时经常长达5-6秒,偶尔出现10秒的情况。作为一个搜索引擎,有这样的搜索速度是致命的!第二版计划才用Lucene作为索引,进行查询。
三、Ftp访问。第一版Ftp访问的功能是我比较关注的,因为以前没有做过。最终的解决方案是用第三方的开源组件,在试用了N多的Ftp访问组建之后,最终选定了EdtFtpNet(http://www.enterprisedt.com/products/edtftpnet/),原因就一个:好用。当然这个库也不完美,让他支持中文花了我一下午的时候,如果你需要可以点击这里下载支持中文的EdtFtpNet。至于对这个库其他的问题,可以联系我,咱们单独讨论。还有一点要说的是,既然采用了第三方组件,有一个代理封装一下就是很自然的事情了,这点可以从包设计图中看到。
四、robot的设计。robot采用的是图的深度优先遍历算法。对于每一个Server用一个线程进行搜索。在robot的设计中,最难得是错误的处理,其中重点是两个:一是无效的目录,二是服务器超时。对于前者,采用的是抓异常跳过的办法;对于第二个问题,采用的是对server加时间戳,超时重起线程的办法。
五、调度:系统采用Windows的计划任务作为调度方式(暴汗!),每天晚上12点启动。启动程序后自动遍历目标服务器。遍历目标服务器只用大概30分钟!
六、数据更新:系统对入库的数据未作更新处理,有进无出,过期不管!(继续暴汗!)
恩,基本上就是这些了。第二版正在开发当中,不过快要期末考试了,比较慢,估计九月份能做完吧,我会陆续的把第二版的设计方案发在我的Blog上。另外如果需要第一版源代码的朋友可以个我联系^^。
PS:当我做完第一版的时候,才知道原来Ftp搜索已经有人做好了,呵呵,比较好的是华中科技大学(http://so.hustonline.net/)。我试着和他们联系过,想要交流一下,可惜没有回音(大概是不屑吧)。还往做过搜索引擎的朋友指点一下。谢谢。
birdshome在评论中提到:SF超高速FTP搜索引擎http://sf.hit.edu.cn/ 。想真正做搜索引擎而不是玩具(像我)的一定要看!
neoragex2002 在评论中提到了开源项目http://sourceforge.net/projects/parker ,也值得一看。