데이터 베이스 MySQL 튜토리얼 如何将Sphinx配置成缓存服务器

如何将Sphinx配置成缓存服务器

Jun 07, 2016 pm 04:28 PM
sphinx 어떻게 섬기는 사람 알다 은닉처 구성

大家都知道Sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。 先来了解下Sphinx的使用的文件,Sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl

大家都知道Sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。

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文件格式
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP를 사용한 IP 프록시 서버 구축을 위한 모범 사례 가이드 PHP를 사용한 IP 프록시 서버 구축을 위한 모범 사례 가이드 Mar 11, 2024 am 08:36 AM

PHP를 사용한 IP 프록시 서버 구축을 위한 모범 사례 가이드

Linux Bashrc 이해: 기능, 구성 및 사용법 Linux Bashrc 이해: 기능, 구성 및 사용법 Mar 20, 2024 pm 03:30 PM

Linux Bashrc 이해: 기능, 구성 및 사용법

Dnsmasq를 DHCP 릴레이 서버로 구성하는 방법 Dnsmasq를 DHCP 릴레이 서버로 구성하는 방법 Mar 21, 2024 am 08:50 AM

Dnsmasq를 DHCP 릴레이 서버로 구성하는 방법

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책 에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책 Mar 13, 2024 pm 04:40 PM

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? Mar 28, 2024 pm 02:39 PM

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까?

PHP 개발의 캐싱 메커니즘 및 응용 실습 PHP 개발의 캐싱 메커니즘 및 응용 실습 May 09, 2024 pm 01:30 PM

PHP 개발의 캐싱 메커니즘 및 응용 실습

Golang 서버의 장점과 활용성에 대한 자세한 설명 Golang 서버의 장점과 활용성에 대한 자세한 설명 Mar 20, 2024 pm 01:51 PM

Golang 서버의 장점과 활용성에 대한 자세한 설명

Linux 시스템에서 FTPS를 구성하고 설치하는 방법 Linux 시스템에서 FTPS를 구성하고 설치하는 방법 Mar 20, 2024 pm 02:03 PM

Linux 시스템에서 FTPS를 구성하고 설치하는 방법

See all articles