到今天为止校内论坛(Discuz)上的主题数量已经到达了40w,所有回复约500W。随着数据量的增大,DZ自带的站内搜索给数据库的带来的压力越来越大,甚至会导致数据库停止服务(MyISAM在SLOW Query和update并发问题)。取代站内搜索,我们使用了google的自定义搜索服务,google的速度非常快,但是对于论坛来说,Google不能返回实时的搜索结果,而且也无法定制搜索(如安装标题、作者、内容)。
所以,我们将尝试使用sphinx来解决这个问题。先看看sphinx是怎样工作的:
- sphinx有两个主要进程indexer和searchd。indexer,正如其名,她的任务是从数据库(或者其他的数据源)收集原始的数据,然后建立相应的索引。searchd则是通过读取indexer建立的索引来响应客户端的请求。如果用图书馆来打比方的话,一个是按照索书号整理数目的工作人员,一个是帮你从书架上取书的人。
- 要让sphinx为你工作的话,需要做几件事(在配置文件中完成):
1) 告诉sphinx,数据源在哪儿(配置source,对应MySQL的话,就是填写其主机名、登录用户、密码等)
2) 建立“索引任务”。告诉indexer针对数据源的哪一部分建立索引,建立索引时数据源的编码、最小索引长度等细节信息 - 执行indexer,完成前面配置文件中的“索引任务”;启动searchd服务。
这样你的应用就可以通过sphinx提供的API来搜索数据库中的数据了,sphinx会为你返回对应数据的主键。
Leave a Reply