本文出自:http://blog.s135.com/post/385.htm
曾经在七月,写过一篇文章──《基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计》,前公司的分类信息搜索基于此架构,效果明显,甚至将很大一部分带Where条件的MySQL SQL查询,都改用了Sphinx+MySQL搜索。但是,这套架构仍存在局限:一是MySQL本身的并发能力有限,在200~300个并发连接下,查询和更新就比较慢了;二是由于MySQL表的主键与Sphinx索引的ID一一对应,从而无法跨多表建立整站查询,而且新增加类别还得修改配置文件,比较麻烦;三是因为和MySQL集成,无法发挥出Sphinx的优势。
最近,我设计出了下列这套最新的搜索引擎架构,目前已经写出“搜索查询接口”和“索引更新接口”的beta版。经测试,在一台“奔腾四 3.6GHz 双核CPU、2GB内存”的普通PC机,7000万条索引记录的条件下,“搜索查询接口”平均查询速度为0.0XX秒(查询速度已经达到百度、谷歌、搜狗、中国雅虎等搜索引擎的水平,详见文章末尾的“附2”),并且能够支撑高达5000的并发连接;而“索引更新接口”进行数据分析、入队列、返回信息给用户的全过程,高达1500 Requests/Sec。
“队列控制器”这一部分是核心,它要控制队列读取,更新MySQL主表与增量表,更新搜索引擎数据存储层Tokyo Tyrant,准实时(1分钟内)完成更新Sphinx增量索引,定期合并Sphinx索引。我预计在这周写出beta版。
图示说明:
1、搜索查询接口:
①、Web应用服务器通过HTTP POST/GET方式,将搜索关键字等条件,传递给搜索引擎服务器的search.php接口;
②③、search.php通过Sphinx的API(我根据最新的Sphinx 0.9.9-rc1 API,改写了一个C语言的PHP扩展sphinx.so),查询Sphinx索引服务,取得满足查询条件的搜索引擎唯一ID(15位搜索唯一ID:前5位类别ID+后10位原数据表主键ID)列表;
④⑤、search.php将这些ID号作为key,通过Memcache协议一次性从Tokyo Tyrant中mget取回ID号对应的文本数据。
⑥⑦、search.php将搜索结果集,按查询条件,进行摘要和关键字高亮显示处理,以JSON格式或XML格式返回给Web应用服务器。
2、索引更新接口:
⑴、Web应用服务器通过HTTP POST/GET方式,将要增加、删除、更新的内容告知搜索服务器的update.php接口;
⑵、update.php将接收到的信息处理后,写入TT高速队列(我基于Tokyo Tyrant做的一个队列系统);
注:这两步的速度可达到1500次请求/秒以上,可应对6000万PV的搜索索引更新调用。
3、搜索索引与数据存储控制:
㈠、“队列控制器”守护进程从TT高速队列中循环读取信息(每次50条,直到末尾);
㈡、“队列控制器”将读取出的信息写入搜索引擎数据存储层Tokyo Tyrant;
㈢、“队列控制器”将读取出的信息异步写入MySQL主表(这张主表按500万条记录进行分区,仅作为数据永久性备份用);
㈣、“队列控制器”将读取出的信息写入MySQL增量表;
㈤、“队列控制器”在1分钟内,触发Sphinx更新增量索引,Sphinx的indexer会将MySQL增量表作为数据源,建立增量索引。Sphinx的增量索引和作为数据源的MySQL增量表成对应关系;
㈥、“队列控制器”每间隔3小时,短暂停止从TT高速队列中读取信息,并触发Sphinx将增量索引合并入主索引(这个过程非常快),同时清空MySQL增量表(保证了MySQL增量表的记录数始终只有几千条至几十万条,大大加快Sphinx增量索引更新速度),然后恢复从TT高速队列中取出数据,写入MySQL增量表。
本架构使用的开源软件:
1、Sphinx 0.9.9-rc1
2、Tokyo Tyrant 1.1.9
3、MySQL 5.1.30
4、Nginx 0.7.22
5、PHP 5.2.6
本架构自主研发的程序:
1、搜索查询接口(search.php)
2、索引更新接口(update.php)
3、队列控制器
4、Sphinx 0.9.9-rc1 API的PHP扩展(sphinx.so)
5、基于Tokyo Tyrant的高速队列系统
附1:MySQL FullText、Lucene搜索、Sphinx搜索的第三方对比结果:
1、查询速度:
MySQL FullText最慢,Lucene、Sphinx查询速度不相上下,Sphinx稍占优势。
2、建索引速度:
Sphinx建索引速度是最快的,比Lucene快9倍以上。因此,Sphinx非常适合做准实时搜索引擎。
分享到:
相关推荐
在IT行业中,构建一个能处理亿级数据的高并发通用搜索引擎架构是一项极具挑战性的任务。这类系统需要在海量数据的基础上提供快速、准确的搜索服务,同时还需要具备良好的扩展性和稳定性,以应对高并发访问。本篇文章...
前公司的分类信息搜索基于此架构,效果明显,甚至将很大一部分带Where条件的MySQL SQL查询,都改用了Sphinx+MySQL搜索。但是,这套架构仍存在局限:一是MySQL本身的并发能力有限,在200~300个并发连接下,查询和...
垂直搜索引擎是相对于通用搜索引擎而言的,它们针对特定领域或主题,如科技、医疗、法律等,提供更为专业和精确的搜索结果。以下是这篇论文可能涉及的主要知识点: 1. **搜索引擎基本概念**:首先,论文会介绍搜索...
《一种通用Cache的设计,实现和在天网搜索引擎中的应用》 本文主要探讨了在面对海量信息的万维网环境中,如何通过优化缓存技术来提升搜索引擎的性能和效率。缓存技术是解决大数据访问速度问题的关键,对于搜索引擎...
考虑到搜索引擎可能面临大量的并发请求,开发者需要关注性能优化和并发处理。这可能涉及到异步编程、缓存策略以及负载均衡等技术。 八、安全性与隐私保护 搜索引擎还应考虑数据的安全性和用户隐私。这可能包括对...
电影垂直搜索引擎是一种针对电影领域的特定信息检索工具,旨在解决通用搜索引擎在电影信息搜索上的不足,如信息量过大、查询精度低和深度不足等问题。该文提出了一种以Elastic Search(ES)为核心的服务端系统设计...
相比于通用搜索引擎,垂直搜索引擎更加专注于某一类信息,例如科技文章、医疗数据、法律文档等,提供更精确、更专业的搜索结果。SOPI系统可能包含以下几个核心知识点: 1. **数据采集**:垂直搜索引擎首先需要对...
与通用搜索引擎不同,垂直搜索引擎更加专注于某个狭窄的领域,如医疗健康、法律咨询、旅游预订等。 ##### 1.2 垂直搜索引擎的分类 根据应用领域的不同,垂直搜索引擎可以分为以下几类: - **政府相关的垂直搜索...
天网搜索作为一款大规模通用型中文搜索引擎,其集成框架结构的设计尤为关键。该框架旨在通过优化系统架构,提升检索效率和效果。天网采用了分布式架构,能够有效处理海量数据,同时确保系统的稳定性和可扩展性。这种...
微服务架构成为应对高并发流量的关键,包括数据库、缓存、消息队列等PaaS服务,以及SpringCloud和Dubbo等微服务框架,帮助实现快速迭代和高并发处理能力。 3. **数据架构**:在大数据和人工智能时代,数据成为核心...
1. **背景**:在快速发展的数字时代,电影爱好者对电影信息的需求日益增长,传统的通用搜索引擎可能无法满足用户对电影数据的精确和深度检索。NotOnlyFilm电影垂直搜索引擎的出现,旨在提供专门针对电影领域的高效、...
- **扩展性**:设计时考虑系统横向扩展,以便应对高并发和大数据量的挑战。 通过这个通用搜索系统的搭建,你可以快速地在你的SpringBoot应用中集成一个高效、灵活的全文搜索引擎,为用户提供快速、精准的搜索体验...
【C++服务器引擎的核心知识点】 C++服务器引擎是企业级应用...总的来说,这个C++服务器引擎集成了多种高级编程技术和最佳实践,旨在提供一个高效、灵活且易于扩展的企业级解决方案,满足现代互联网服务的高并发需求。
第十代架构:引入NoSQL数据库和搜索引擎 在第十代架构中,按照业务板块划分成不同的应用代码使单个应用职责清晰,相互应用独立升级迭代应用之间涉及公共配置。分布式配置中心zookeeper来解决。 第十一代架构:把大...
业务架构中,计算逐渐围绕数据库进行,以满足高并发和复杂业务需求。例如,MVCC(多版本并发控制)在并发处理中起到关键作用,而分层架构允许各层组件的灵活插拔,提供了更多的选择,同时加快了系统演进的速度。数据...
9. **搜索引擎优化**:为了提高网站的可见性,需要考虑SEO(搜索引擎优化),包括元标签设置、关键词优化、网站速度提升等。 10. **性能优化**:通过缓存技术、负载均衡、CDN内容分发网络等手段,提高网站响应速度...
《概要设计说明书1》详述了一个综合性的图书管理系统的设计,涵盖了从系统架构到接口设计,再到数据结构和运行设计等多个关键方面。该系统旨在提供PC端和微信端的图书管理服务,支持管理员操作和用户交互,利用了...