你的位置:首页 > 软件开发 > 数据库 > [深入浅出Sphinx]Sphinx的工作原理

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

发布时间:2016-04-18 14:00:04
What/Sphinx是什么定义Sphinx是一个全文检索引擎。特性索引和性能优异易于集成SQL和易于通过分布式搜索进行扩展高速的索引建立(在当代CPU上,峰值性能可达到10 ~ 15MB/秒)高性能的搜索 (在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次 ...

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

What/Sphinx是什么

定义

Sphinx是一个全文检索引擎。

特性

  • 索引和性能优异
  • 易于集成SQL
  • 易于通过分布式搜索进行扩展
  • 高速的索引建立(在当代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服务器间的情况。

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

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录