如何将Sphinx配置成缓存服务器
程序员文章站
2022-06-05 20:03:53
...
大家都知道Sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。 先来了解下Sphinx的使用的文件,Sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl
大家都知道Sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。
先来了解下Sphinx的使用的文件,Sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl。
- sph:头文件,保存的是系统的配置文件。
- spi:保存WordId及指向此WordId对应的文档信息在spd文件的指针, spi文件在检索程序启动时完全加载入内存。 spi文件是分块的,块内排序,块之间也排序。分块的目的应该是为了快速检索到WordId, 因为spi中的WordId是变长压缩的,索引需要先在块级别做二分定位,再在快内解压缩查找。
- spa:存储DocInfo的文件,检索程序启动时会把此文件加载如内存,sphinx可以指定DocInfo的存储方式:
- inline:存储到spd文件中。
- extern:单独存储,就会生成spa文件。
- spd:文档列表。
- spp:关键字所在位置列表。
- spm:在DocInfo中,有一种特殊的属性,叫MVA,多值属性。 Sphinx对此属性特殊处理,需要存储在spm文件中。 检索程序启动时会把此文件加载如内存。 此属性在DocInfo对应位置存储其在此文件中的字节偏移量。
- spk:killlist
- spl:索引锁
通过介绍可以得知Sphinx存储的文档的属性,在0.98之前的版本是不存储的,我们是不是可以利用这些数据作为缓存使用呢,根据DocID获取文档的信息。
通过hack搜索服务添加SEARCHD_COMMAND_DOCINFO指令,客户端API添加GetDocinfo函数可以达到预期的效果。
php示例代码:
require 'sphinxapi.php'; $cl = new SphinxClient (); $cl->SetServer(); $res = $cl->GetDocinfo(1, 'singer'); print_r($res);
结果如下:
Array ( [singer_id] => 1 [singer_name] => 阿牛 [cate_id] => 1 [tag_ids] => Array ( [0] => 110 [1] => 114 [2] => 127 ) [song_number] => 137 [album_number] => 14 )
Patch文件 : https://gist.github.com/2251422
参考文章
- sphinx简析
- sphinx的spx文件格式
原文地址:如何将Sphinx配置成缓存服务器, 感谢原作者分享。
推荐阅读
-
使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法
-
linux下通过Squid反向代理搭建CDN缓存服务器的配置方法
-
Nginx服务器作反向代理时的缓存配置要点解析
-
Nginx服务器上搭建图片缓存服务的基本配置解析
-
Nginx服务器中强制使用缓存的配置及缓存优先级的讲解
-
Linux下Varnish缓存服务器的安装与配置教程
-
如何将 Nginx 配置为Web服务器的方法
-
IIS服务器下安装配置XCache缓存器方法及XCache下载
-
window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置
-
带你轻松配置linux下高速缓存DNS服务器