论坛首页 综合技术论坛

基于文本比较的搜索 - C语言实现(有注释)

浏览 10467 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-26   最后修改:2009-08-26
yysolo 写道
从优化的角度:
1. 开一个大的buffer, 然后用fread
2. 多线程,一个读,多个处理。降低IO的时间。如果是目录,必须多线程
3. 在算法中降低分配内存的次数,使用1中的buffer,基本做到zero-copy
4. GCC -O2
5. 换文件格式,换文件系统
....
表层的优化完成后,通过工具找热点

看了下算法并不耗时,LZ多了解一下C,以LZ的机器,单线程60M/s还是有可能的。
1,2,3弄好了,提高IO的效率,考虑换块磁盘或者换架构。最后再考虑5

LZ可以下一个Beyond compare体会专业级的diff工具的性能

前期加载文件那部分不在计算耗时的范围内,仅计算search函数内的耗时。所以你说的这些好像都用不上,不过还是谢谢你的回复
PS:Beyond compare体验过了,它是单个文件进行比较,虽然有文件夹比较,但文件夹比较只是表面(修改日期,创建日期,长度)比较,并不比较文件内容,然后当你确实要比较内容时还要进行一次点击
0 请登录后投票
   发表时间:2009-08-31  
这个要MARK一下,最近在做海量数据报文解析~~用python的确有性能不足~
0 请登录后投票
   发表时间:2009-08-31  
diff3不是有個專門算法的么,我記得還看過論文。不知是否可以給樓主參考。
0 请登录后投票
   发表时间:2009-08-31  
Magicloud 写道
diff3不是有個專門算法的么,我記得還看過論文。不知是否可以給樓主參考。

不用了,我想过了,用diff的算法怎么也不比不上分词索引。不过能提供文档的话还是谢谢
0 请登录后投票
   发表时间:2009-08-31  
能不能麻烦楼主把你程序的应用场景交代一下?上来就贴代码,云里雾里
0 请登录后投票
   发表时间:2009-09-01  
Joo 写道
能不能麻烦楼主把你程序的应用场景交代一下?上来就贴代码,云里雾里

http://phyeas.iteye.com/blog/452733
0 请登录后投票
   发表时间:2009-09-07  
看了楼主的博客,你的这种方法不可行,太暴力,最基本的I/O瓶颈就突破不了

给你算笔账,假设你服器上有6块硬盘做raid0,吞吐量按400M/s算,你的文档库有20G文档(已经够少了吧),那么检索一遍的时间是50s,你认为用户会有50s的耐心等待检索结果吗,而且代价是服务器满I/O负载

如果要是1000个用户并发检索呢?哦,的确可以将检索词排队,下次检索一次取出,但每次检索的时间都是50s,这就说明最差情况下用户的等待时间是100s

可以将检索分布式,但代价是为了保证用户能在1s内检索到数据,数据需要分布到50台机器上,20G数据分配到50台机器上,你自己想一下吧

0 请登录后投票
   发表时间:2009-09-07  
zhwang 写道
看了楼主的博客,你的这种方法不可行,太暴力,最基本的I/O瓶颈就突破不了

给你算笔账,假设你服器上有6块硬盘做raid0,吞吐量按400M/s算,你的文档库有20G文档(已经够少了吧),那么检索一遍的时间是50s,你认为用户会有50s的耐心等待检索结果吗,而且代价是服务器满I/O负载

如果要是1000个用户并发检索呢?哦,的确可以将检索词排队,下次检索一次取出,但每次检索的时间都是50s,这就说明最差情况下用户的等待时间是100s

可以将检索分布式,但代价是为了保证用户能在1s内检索到数据,数据需要分布到50台机器上,20G数据分配到50台机器上,你自己想一下吧


呵呵,是有点很暴力的感觉,只是我想说,这里面没有I/O的事。所有的操作都是在内存中完成。
PS:我已经放弃这种算法了。确实不可行。
0 请登录后投票
   发表时间:2009-09-19  
谢谢楼主的这篇帖子,学到了好多.
0 请登录后投票
   发表时间:2010-03-07  
为什么不用perl,这是perl的强项
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics