[深入浅出Sphinx]Sphinx的工作原理

What/Sphinx是什么

定义

Sphinx是一个全文检索引擎。

特性

  • 索引和性能优异
  • 易于集成SQL和XML数据源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口
  • 易于通过分布式搜索进行扩展
  • 高速的索引建立(在当代CPU上,峰值性能可达到10 ~ 15MB/秒)
  • 高性能的搜索 (在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次查询)

Why/为什么使用Sphinx

遇到的使用场景

遇到一个类似这样的需求:用户可以通过文章标题和文章搜索到一片文章的内容,而文章的标题和文章的内容分别保存在不同的库,而且是跨机房的。

可选方案

A、直接在数据库实现跨库LIKE查询

优点:简单操作

缺点:效率较低,会造成较大的网络开销

B、结合Sphinx中文分词搜索引擎

优点:效率较高,具有较高的扩展性

缺点:不负责数据存储

使用Sphinx搜索引擎对数据做索引,数据一次性加载进来,然后做了所以之后保存在内存。这样用户进行搜索的时候就只需要在Sphinx服务器上检索数据即可。而且,Sphinx没有MySQL的伴随机磁盘I/O的缺陷,性能更佳。

其他典型使用场景

1、快速、高效、可扩展和核心的全文检索

  • 数据量大的时候,比MyISAM和InnoDB都要快。
  • 能对多个源表的混合数据创建索引,不限于单个表上的字段。
  • 能将来自多个索引的搜索结果进行整合。
  • 能根据属性上的附加条件对全文搜索进行优化。

2、高效地使用WHERE子句和LIMIT字句

当在多个WHERE条件做SELECT查询时,索引选择性较差或者根本没有索引支持的字段,性能较差。sphinx可以对关键字做索引。区别是,MySQL中,是内部引擎决定使用索引还是全扫描,而sphinx是让你自己选择使用哪一种访问方法。因为sphinx是把数据保存到RAM中,所以sphinx不会做太多的I/O操作。而mysql有一种叫半随机I/O磁盘读,把记录一行一行地读到排序缓冲区里,然后再进行排序,最后丢弃其中的绝大多数行。所以sphinx使用了更少的内存和磁盘I/O。

3、优化GROUP BY查询

在sphinx中的排序和分组都是用固定的内存,它的效率比类似数据集全部可以放在RAM的MySQL查询要稍微高些。

4、并行地产生结果集

sphinx可以让你从相同数据中同时产生几份结果,同样是使用固定量的内存。作为对比,传统SQL方法要么运行两个查询,要么对每个搜索结果集创建一个临时表。而sphinx用一个multi-query机制来完成这项任务。不是一个接一个地发起查询,而是把几个查询做成一个批处理,然后在一个请求里提交。

5、向上扩展和向外扩展

  • 向上扩展:增加CPU/内核、扩展磁盘I/O
  • 向外扩展:多个机器,即分布式sphinx

6、聚合分片数据

适合用在将数据分布在不同物理MySQL服务器间的情况。
例子:有一个1TB大小的表,其中有10亿篇文章,通过用户ID分片到10个MySQL服务器上,在单个用户的查询下当然很快,如果需要实现一个归档分页功能,展示某个用户的所有朋友发表的文章。那么就要同事访问多台MySQL服务器了。这样会很慢。而sphinx只需要创建几个实例,在每个表里映射出经常访问的文章属性,然后就可以进行分页查询了,总共就三行代码的配置。

How/如何使用Sphinx

Sphinx工作流程图

流程图解释

Database:数据源,是Sphinx做索引的数据来源。因为Sphinx是无关存储引擎、数据库的,所以数据源可以是MySQL、PostgreSQL、XML等数据。

Indexer:索引程序,从数据源中获取数据,并将数据生成全文索引。可以根据需求,定期运行Indexer达到定时更新索引的需求。

Searchd:Searchd直接与客户端程序进行对话,并使用Indexer程序构建好的索引来快速地处理搜索查询。

APP:客户端程序。接收来自用户输入的搜索字符串,发送查询给Searchd程序并显示返回结果。

Sphinx的工作原理

Sphinx的整个工作流程就是Indexer程序到数据库里面提取数据,对数据进行分词,然后根据生成的分词生成单个或多个索引,并将它们传递给searchd程序。然后客户端可以通过API调用进行搜索。

时间: 2024-11-07 09:40:57

[深入浅出Sphinx]Sphinx的工作原理的相关文章

sphinx续4-coreseek的工作原理

原文地址:http://blog.itpub.net/29806344/viewspace-1399621/ 在分析sphix原理之前,我先澄清一下为什么经常出现coreseek这个词? 因为sphinx默认不支持中文索引及检索,而coreseek基于sphinx开发了coreseek全文检索服务器,它提供了为sphinx设计的中文分词包libmmseg包含mmseg中文分词,是目前用的最多的sphinx中文检索.     在没有sphinx之前,mysql数据库要对海量的文章中的词进行全文索引

[搜索引擎]Sphinx的介绍和原理探索

What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于通过分布式搜索进行扩展 高速的索引建立(在当代CPU上,峰值性能可达到10 ~ 15MB/秒) 高性能的搜索 (在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次查询) Why/为什么使用Sphinx 遇到的使用场景 遇到一个类似这样的需求:用户可以通过文章标题和文章搜索到一片文

深入浅出剖析Elasticsearch的工作原理

随着日志量的增加,es在不停的调整,结构层面的冷热数据分离.master和client节点的分离并引入部落节点,es集群层面的index优化.flush优化.merge优化.内存熔断优化,系统层面的GC.文件描述符.进程数.关闭交换分区调整等等,其实es优化是一个法无定法的事儿,并不是死板的调固定参数,而是要不停的去试各种参数值在自己的业务场景下哪个表现最好,但是总结起来,首先了解了es的数据写入和读取过程,才知道如何下手,我们做的所有调优都是为了更快的索引速度.更快更大数据量的搜索性能.更稳定

cookie、Session工作原理

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择.二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览

kerberos工作原理

最近调研了kerberos.看了网上学多关于kerberos的文章,我认为这篇文章比较好. http://blog.csdn.net/gracexu/article/details/1707032 这篇文章对麻省理工的论文进行翻译.该论文以四幕话剧的形式缓缓道来,有点像<研究之美>,通过两个人的头脑风暴讲解kerberos的原理. 一.使用kerberos进行验证的原因 1. 可靠 Hadoop 本身并没有认证功能和创建用户组功能,使用依靠外围的认证系统 高效 2. Kerberos使用对称钥

前端必读:浏览器内部工作原理

前端必读:浏览器内部工作原理 作者: Tali Garsiel  发布时间: 2012-02-09 14:32  阅读: 56974 次  推荐: 88   原文链接   [收藏] 目录 一.介绍 二.渲染引擎 三.解析与DOM树构建 四.渲染树构建 五.布局 六.绘制 七.动态变化 八.渲染引擎的线程 九.CSS2可视模型 英文原文:How Browsers Work: Behind the Scenes of Modern Web Browsers 一.介绍 浏览器可以被认为是使用最广泛的软

浏览器的工作原理解析

PART1 有关浏览器的内核 一.Trident内核,代表产品IE Trident内核又称为IE内核.是微软开发的一种排版引擎.1997年与IE4一起诞生.虽然它相对于其它浏览器核心还比较落后,但trident一直在被不断地更新和完善.而且除IE外,许多产品都在使用Trident核心,比如Windows的HELP程序.RealPlayer.Windows Media Player.Windows Live Messager.Outlook Express等. 使用此内核的其它浏览器有:IE.傲游

浏览器内部工作原理

转:http://kb.cnblogs.com/page/129756/#chapter9 目录 一.介绍 二.渲染引擎 三.解析与DOM树构建 四.渲染树构建 五.布局 六.绘制 七.动态变化 八.渲染引擎的线程 九.CSS2可视模型 英文原文:How Browsers Work: Behind the Scenes of Modern Web Browsers 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到g

一致性hash算法的工作原理

1.一致性hash算法的工作原理 首先我们有一个hash函数H,可以通过数据的key值计算出一个数字型的hash值.然后我们将整个hash环的范围定义为[1,L]这个区间,我们将刚才算出的hash值对L进行取余,就能算出一个key值在这个环上的位置.而每一台真实服务器结点就会负责[1-L]之间的某个区间的数据.如上图,就是一个五个结点的hash环. 上面hash环的L值为1000,然后我们对ABCDE 5个点分别进行hash运算,H(A) mod L = 7, H(B) mod L = 234,