基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计

基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计

ID:18538783

大小:88.50 KB

页数:7页

时间:2018-09-19

基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计_第1页
基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计_第2页
基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计_第3页
基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计_第4页
基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计_第5页
资源描述:

《基于sphinx+mysql的千万级数据全文检索(搜索引擎)架构设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、[文章作者:张宴本文版本:v1.0最后修改:2008.07.27转载请注明原文链接:http://blog.s135.com/post/360/]  前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。  在DELLPowerEdge6850服务器(四颗64位InterXeonMP7110N处理器/8GB内存)、RedHatAS4Linux操作系统、MySQL5.1.26、MyISAM存储引擎、key_buffer=1024M环境下实测,单表1000万条记录的数据量(这张MySQL表拥有int、date

2、time、varchar、text等类型的10多个字段,只有主键,无其它索引),用主键(PRIMARYKEY)作为WHERE条件进行SQL查询,速度非常之快,只耗费0.01秒。  出自俄罗斯的开源全文搜索引擎软件Sphinx,单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。  基于以上几点,我设计出了这套搜索引擎架构。在生产环境运行了一周,效果非常不错。有时间我会专

3、为配合Sphinx搜索引擎,开发一个逻辑简单、速度快、占用内存低、非表锁的MySQL存储引擎插件,用来代替MyISAM引擎,以解决MyISAM存储引擎在频繁更新操作时的锁表延迟问题。另外,分布式搜索技术上已无任何问题。  一、搜索引擎架构设计:  1、搜索引擎架构图:    2、搜索引擎架构设计思路:  (1)、调用方式最简化:  尽量方便前端Web工程师,只需要一条简单的SQL语句“SELECT...FROMmyisam_tableJOINsphinx_tableON(sphinx_table.sphinx_id=myisam_table.id)WHEREquery=

4、'...';”即可实现高效搜索。  (2)、创建索引、查询速度快:  ①、SphinxSearch是由俄罗斯人AndrewAksyonoff开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。  Sphinx的特征:  •Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)  •高性能搜索(在2-4GB的文本上搜索,平均0.1秒内获得结果)  •高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)  •支持分布式检索  •支持基于短语和基于统计的复合结果排序机制  •支持任意数量的文件字段(数值

5、属性或全文检索属性)  •支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)  •支持作为Mysql的存储引擎  ②、通过国外《HighPerformanceMySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT...FROM...WHEREid=...”的SQL语句(其中id为PRIMARYKEY),每秒钟能够处理10000次以上的查询,而普通的SELECT查询每秒只能处理几十次到几百次:    ③、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段,用sphinx建立搜索索引。根据关键字、时间、类别、

6、范围等信息查询一下sphinx,sphinx只会将查询结果的ID号等非文本信息告诉我们。要显示title、body等信息,还需要根据此ID号去查询MySQL数据库,或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎,将MySQL与Sphinx结合起来,是一种便捷的方法。  创建一张Sphinx类型表,将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样,对于MyISAM表来所,只相当于一个WHEREid=...的主键查询,WHERE后的条件都交给Sphinx去处理,可以充分发挥两者的优势,实现高速搜索查询。

7、  (3)、按服务类型进行分离:  为了保证数据的一致性,我在配置Sphinx读取索引源的MySQL数据库时,进行了锁表。Sphinx读取索引源的过程会耗费一定时间,由于MyISAM存储引擎的读锁和写锁是互斥的,为了避免写操作被长时间阻塞,导致数据库同步落后跟不上,我将提供“搜索查询服务”的和提供“索引源服务”的MySQL数据库进行了分开。监听3306端口的MySQL提供“搜索查询服务”,监听3406端口的MySQL提供“索引源服务”。  (4)、“主索引+增量索引”更新方式:  一般网站的特征:信息发布较为频繁;刚发布完的信息被编辑、修

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。