论文部分内容阅读
互联网的信息总量在人类进入互联网时代后出现了爆炸式的增长,一般的跨国互联网的公司每天的数据吞吐量都在几十PB,如何有效的利用这些信息资源日益成为人们关注和研究的焦点。互联网的信息的数据格式也从web2.0时代可以呈现了多样化的发展,有视频,音频,链接和图像等等。如何在面对着这些海量信息时候,很好的利用这些信息,并且挖掘出对自己有用的资料或者信息是互联网IT公司所面临的重大问题,因此,一个性能优越可以承担数亿网名的访问量的的搜索引擎就显得非常必要。搜索引擎就是为了解决这样的难题应用而生。通过网络爬虫获取大量的相关资料和信息,采用机器学习或者数据挖掘的算法进行数据挖掘,进一步分类和提取,将用户最想要的搜索信息返回给用户。搜索引擎作为互联网发展至关重要的一种应用,已经成为互联网各个领域的制高点,搜索引擎领域也是互联网应用中不多见的以核心技术为其命脉的领域。当今时代比较成功的商业搜索引擎是美国的Google搜索引擎,其次紧随其后是最大的中文搜索引擎中国的百度公司。美国微软公司和雅虎合作推出的必应搜索引擎也在美国占据了30%的市场份额,目前中国奇虎公司在中国的市场份额仅次于百度,也是一个异军突起的新生搜索引擎,上述的搜索引擎基本构成了主流的成功的并且成熟的商业搜索引擎。目前主流搜索引擎主要使用的Memcache缓存系统已经出现了性能瓶颈,一些公司几千台的Memcached集群很常见Memcached和redis都基于内存,Memcached偏向cache,Redis更多扮演数据库的角色,支持更丰富的数据类型;论到单个核上的性能,在单条数据不大的情况下,Redis会更好。因为Redis是单线程的,只能使用一个核。而Memcached是多线程的,所以对一个实例来说,性能上肯定是Redis占优势。Redis和Memcached不同的地方在于前者并没有选择libevent。libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。Redis用libevent中两个文件修改实现了自己的epoll event loop。所以本论文采用的Redis更多扮演的是数据库的功能,其自带数据持久化。在小型数据量和单线程模式的效率是远远领先于传统的数据库系统Memcached内存对象缓存系统。本论文的引擎属于目录式的搜索引擎,重点着力解决上述缓存和性能优化问题。主要用于为某中小学教育资源网站提供资源搜索服务。从架构设计模式到底层细节各个层次优化如下:(1) 系统架构层面,采用TCP传输协议和Epoll多路转接。传统的搜索引擎基于POSIX平台的服务器采用UDP传输协议和poll的I/O多路转接,连接不稳定,传输数据不可靠,系统层面因为poll多次执行系统态到内核态的拷贝,资源消耗巨大。而本论文的连接可靠稳定,监听轮询大大降低了服务器负载。从架构执行层面要优于传统的搜索引擎。(2)改进了距离编辑算法,并且应用到中文中,使得用户搜索词纠错机制可以实现中文文本纠错,进行纠错及联想推荐,提供候选词集,降低用户学习成本和提高用户的工作效率,而传统的搜索引擎没有提供纠错候选项和纠错功能。(3) 改进了传统的索引技术,提出了内存磁盘协同并行索引改进算法,可以迅速精准定位到网页库中的用户查询文档,同时在文本挖掘的过程中计算网页文档关联度上提高了效率,也节省了内存消耗。(4) 处理用户历史查询记录缓存时采用Redis这种基于内存可持久化,日志型的数据库取代传统的Memcached分布式高速缓存系统,提升缓存的处理效率。(5)采用Hash Map,处理数据库,相对于传统的Map,数据的存储和查找时间消耗大大降低。实验数据主要采用复旦大学语料库。实验测试方法为横向纵向对比测试,最后实验测试结果显示:单次服务平均时间从5ms以上缩短到不到1ms,实际性能提升近100倍。