• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >运营技巧 > MySQL中使用Sphinx实现多线程搜索的方法

MySQL中使用Sphinx实现多线程搜索的方法

作者:查字典编辑 字体:[增加 减小] 来源:互联网

查字典编辑向大家介绍了MySQL中使用Sphinx实现多线程搜索的方法,自学教程,网站运营教程等相关知识,希望对您有所帮助

这篇文章主要介绍了在MySQL中使用Sphinx实现多线程搜索的方法,修改Sphinx的搜索引擎配置即可,需要的朋友可以参考下

MySQL、Sphinx及许多数据库和搜索引擎中的查询是单线程的。比如说,在一台32个CPU核心、16个磁盘的R910服务器上执行一个查询,它最多只会用到一个核心和一个磁盘。没错,只会使用一个。

如果查询是CPU密集型作业,那么会使用大约3%的整机CPU能力(以上述32核机器为例)。如果是磁盘密集型,则大约会使用6%的整机IO能力(也是与上例同样的配置,16个磁盘组成RAID10或RAID0)。

我再换个说法吧。如果你在一台单核单磁盘的机器上执行了某个查询,花了10秒,那么把同样的查询放到一台32核16磁盘的机器上去跑,同样需要10秒,不会有丝毫改善。

你早就知道这一点了,对吧?那么,我的问题是有没有办法可以改善呢?

如果是Sphinx,太棒了,答案是有!而且不需要花上太多的工夫。你甚至不需要修改应用和数据库,只需要稍微改下Sphinx的配置。

计划

首先,我来说明一下我们的目标。

Sphinx本身就支持分布式搜索,在很久以前就已经朝着水平扩展的目标来设计。如果索引在一台机器上放不下,可以让多台机器分别对不同的部分进行索引,设置一个聚合节点,负责从应用接收请求,然后把请求再同时发给所有的数据节点,最后将它们返回的结果合并起来,返回给应用。在应用看起来,就好像只有一台服务器在为它服务。

好,下面你猜怎么着?哈,我们可以把这个功能应用到单台机器上,让我们的查询快上n多倍。而且,现在Sphinx已经支持这种做法了,所以我们根本不用再假装查询哪些远程节点。

还有另外一个好处,配置分布式搜索以后,索引是可以并行建的!

还是有一点需要注意,虽然这种做法可以加速绝大多数的查询,但还是有一些例外的情况。因为,并行的查询结果仍然需要合并起来,而这个合并过程是单线程的。而且,合并包括一些CPU密集的操作,如分级、排序,甚至用GROUP BY进行COUNT,如果数据量很大,合并过程就会变成瓶颈。

要确认这一点也很简单,只要查看Sphinx的查询日志,看看每个查询匹配的记录数有多少,我们就心里有数了。

执行

假设在服务器上一个索引配置如下 (很多细节都省略了):

代码如下:

source src1

{

type = mysql

sql_query = SELECT id, text FROM table

}

index idx1

{

type = plain

source = src1

}

searchd

{

dist_threads = 0 # default

}

现在我们使用有3个CPU核心和磁盘的机器来做这个索引--就是这个idx1.下面是我们更改的配置文件 :

代码如下:

source src1

{

type = mysql

sql_query = SELECT id, text FROM table

}

source src1p0 : src1

{

sql_query = SELECT id, text FROM table WHERE id % 3 = 0;

}

source src1p1 : src1

{

sql_query = SELECT id, text FROM table WHERE id % 3 = 1;

}

source src1p2 : src1

{

sql_query = SELECT id, text FROM table WHERE id % 3 = 2;

}

index idx1_template

{

type = plain

source = src1

}

index idx1p0 : idx1_template

{

source = src0

}

index idx1p1 : idx1_template

{

source = src1

}

index idx1p2 : idx1_template

{

source = src2

}

index idx1

{

type = distributed

local = idx1p0

local = idx1p1

local = idx1p2

}

searchd

{

dist_threads = 3

}

做完这些后,你需要重建索引. 但是现在idx1p0到idx1p2的索引indexer命令可以同步进行.

另外,用不同的操作来分离数据不是最好的办法, 你可以在MYSQL中用一个辅助表来区分它们的范围, 配合 sql_query_range使用或是别的什么, 具体根据你的数据来决定.

写在最后

我一直都很喜欢 Sphinx,Sphinx可以如此容易的扩展到你所需要的足够多的机器上,并且这种方式在很多年前就已经在被使用了。然后,我想,我并没有和我往常一样,利用这个特性来使得在一台机器上的查询变得更快。嗯,这并不是在说它很慢或者其实什么,只是,查询永远不会太快,不是吗?

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL中使用Sphinx实现多线程搜索的方法

相关文章

  • 如何让你的网站网页更加吸引人?增强网页设计吸引力的方法
  • 做网络营销怎么正确定位
  • 刚刚起步的新站怎么做SEO?新建网站轻松搞定SEO的技巧
  • 地方网站未来靠哪些行业赚钱
  • SEO优化的根本和搜索引擎优化道德
  • 浅谈初学者在进行网站优化时必须进行思考的几个问题
  • 不同的网站快照现象要区别对待
  • 如何利用网盘赚钱?在网上赚钱的技巧
  • 怎么兼顾SEO优化和网站用户体验
  • 企业网站在日常维护中应注意哪些问题呢?

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 影响微信公众号排名的因素和排名解决方案
    • SEO最容易陷入的6大误区
    • SEO讲究思维的探索
    • 在网易蜂巢的容器中创建自定义镜像和推送本地镜像的教程
    • 2016年站长转型应该做什么类型的网站?
    • 运营内容与传播:一个 95 后的创意,机智得不要不要的
    • 使用模板进行建站所需要注意的几个问题汇总
    • 听Zero谈他的挖词与排名操作经验
    • 网站修改TDK会降权吗?事实证明修改TDK并不一定会使网站降权
    • 大型电子商务网站的SEO优化的技巧分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有