冬Blog

醉心技术、醉心生活
posts - 95, comments - 779, trackbacks - 19, articles - 1
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

Ftp搜索引擎开发实践

Posted on 2006-06-25 13:37 冬冬 阅读(4190) 评论(21)  编辑 收藏 所属分类: Projects

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开发一个基于FtpSearchMp3 Online Player

 

第一版可以说已经做完了(http://it.ouc.edu.cn/ftpsearch)。基本上是作为实验品进行开发的。现在总结一下。

一、第一版的构架:第一版上没有什么构架可言,下面是第一版的构架图:


FtpSearchV1
的构架图

更详细的设计图可看我的另一篇Bloghttp://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访问组建之后,最终选定了EdtFtpNethttp://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 ,也值得一看。

Feedback

#1楼    回复  引用  查看    

2006-06-25 14:17 by birdshome      
推荐你看看这个,我同学的兴趣制作,完全开源的。
http://sf.hit.edu.cn/

系统特点
拥有极快的超高速索引引擎,可在一秒内从两千万文件中检索出两百万个排序后的结果
查询结果可按“IP距离”、“文件日期”、“文件大小”、“文件名长度”进行排序,排序可按升序也可按降序进行
搜索关键字高亮显示
分页显示
可通过浏览器进行安装设置以及后台管理
数据更新可完全后台运行,数据更新期间无需停止服务
分布式计算结构支持,前台界面与后台程序完全分离,方便DIY,凡安装SF系统,均可以从其它SF系统上获得并向其它SF系统提供数据
搜索信息可以通过RSS进行订阅
如果未找到结果,用户可以通过电子邮件订阅自动通知。当可以找到结果时,系统将自动通知用户
支持VIP站点设置,重要站点的结果可以排在前面
支持指定站点,指定类别搜索
支持用户偏好设定,用户可以自行定义一些默认的查询参数,这样不需要在每次查询时额外指定
支持非匿名及使用非标准端口的FTP服务器,能在搜索结果中显示服务器的位置所在(通过纯真IP数据库)
支持站点快照
支持24小时无人职守运行,自动完成数据采集更新
详细的访客来源分析
详细的搜索排名统计
POSIX兼容,可以在linux及windows(使用cygwin)平台上使用
纯C++内核,源代码采用GPL协议,开源、免费
冗错支持,不会因偶然的网络链接故障而导致原先的数据丢失
详细的日志系统,可以很方便的知道哪个服务器在抓取数据的时候出了问题,出了什么问题
支持是否可以下载的指示功能,一眼便知是否可以使用SF所提供的帐户名及密码进行下载,大大节约了用户尝试的时间。

#2楼 [楼主]   回复  引用  查看    

2006-06-25 14:28 by 冬冬      
@birdshome
恩,不错,强人,不是一个数量级上的呀,我才刚刚开始研究搜索引擎不到2个月,呵呵。我会努力赶上的!!^^

#3楼    回复  引用  查看    

2006-06-25 15:09 by neoragex2002      
呵呵,birdsome的意思是要楼主不要闭门造车,眼光要往开源软件看,比方说 Nosey parker,或者是上述这位sf的祖先。找对了祖宗和门道,就可以做得更好。

#4楼 [楼主]   回复  引用  查看    

2006-06-25 15:13 by 冬冬      
@neoragex2002
呵呵,有道理。继续学习……^^

#5楼    回复  引用  查看    

2006-06-25 15:18 by neoragex2002      
http://sourceforge.net/projects/parker

你顺便还可以分析一下sf和parker有什么异同。

#6楼    回复  引用  查看    

2006-06-25 16:13 by dudu      
文章篇幅较长,建议使用摘要方式发布,如何使用摘要,请博客园FAQ第4项: http://www.cnblogs.com/dudu/articles/52480.aspx

#7楼    回复  引用  查看    

2006-06-25 16:26 by overred      
Look Here

http://www.hustonline.net/index.htm
教育网内9,600,000条数据

#8楼 [楼主]   回复  引用  查看    

2006-06-25 16:36 by 冬冬      
@overred
我提到了呀

#9楼    回复  引用  查看    

2006-06-25 17:11 by overred      
@冬冬
哦,不好意思
我也是对搜索引擎很感兴趣
华中科技大学也是C++内核,sql数据库

#10楼    回复  引用  查看    

2006-06-25 18:11 by edison1024      
FTP搜索北大天网不是N年前都做了么???

#11楼    回复  引用    

2006-06-26 08:46 by sf [未注册用户]
Logo上面还有错别字/..快改改 beta

#12楼    回复  引用  查看    

2006-06-26 14:30 by 史上最菜鸟      
啊,不错,支持下

#13楼    回复  引用    

2006-06-26 23:29 by vargas [未注册用户]
我也有这样想法,不过一直没时间弄!交流一下思想!

#14楼    回复  引用    

2006-07-03 22:05 by yyfm [未注册用户]
什么时候我们能够交流一下,那就好了.qq:479775812

#15楼    回复  引用    

2007-01-04 17:54 by 游客 [未注册用户]
看看这个网站的搜索速度:
http://www.soucube.com/test/s.py?type=4&key=.rpm&bkt=abook

#16楼    回复  引用    

2007-02-08 23:47 by PySoZone [未注册用户]
python编写的搜索引擎,欢迎测试
http://www.ftf365.com:8081/sozone/query.py

1.蜘蛛的性能:采用多线程机制,在宽带网接入的情况下,平均每分钟1200张网页。可以断点续抓。
2.查询性能:百万数据的情况下,查询响应速度低于0.5秒,召回率98% 。
3.适用范围:可用于构建针对一个或一批网站的垂直搜索引擎
4.运行环境:Python2.5+Karrigell2.3 ,操作系统不限

#17楼    回复  引用  查看    

2008-05-19 14:59 by GoGoSonny      
能说说EdtFtpNet支持中文的搞法不?
现在的版本是1.2.6,有一些不同。

#18楼 [楼主]   回复  引用  查看    

2008-05-19 15:07 by 冬冬      
@GoGoSonny
不好意思,很久没有碰这个东西了,只依稀记得是编码问题,建议你跟着代码追踪一下,记得不是很难搞的。

#19楼    回复  引用    

2008-06-26 14:02 by laozhang [未注册用户]
感兴趣,关注。。

#20楼    回复  引用    

2008-06-26 14:02 by laotian [未注册用户]
我正在做搜索引擎相关的东西,发现最关键的就是对html解析,我写了几篇关于解析的blog,不知道是否可以适用于大型搜索引擎,欢迎博主帮忙参考参考。给点建议:
http://blog.csdn.net/RonoTian/archive/2008/06/06/2517568.aspx
希望多多交流。

#21楼    回复  引用    

2008-07-28 21:40 by 大龙 [未注册用户]
最近一段时间由于学习的需要对ftp搜索引擎关注比较多一点,就想了解一下关于ftp这方面的源代码,如果大哥愿意给我一份研究的话 ,小弟将不胜感激。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-06 19:28 编辑过


相关链接: