首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重新索引运行时读取sphinx文件的一致版本

如何在重新索引运行时读取sphinx文件的一致版本
EN

Stack Overflow用户
提问于 2013-08-06 15:43:31
回答 1查看 425关注 0票数 0

当我试图备份sphinx索引文件时,备份脚本出现了间歇性问题。备份命令或多或少只是/var/lib/sphinxsearch/data中所有文件的一个/var/lib/sphinxsearch/data命令,有一些排除模式(spltmp等.)

但我遇到的问题是,我们运行几乎连续的重新索引,这意味着tar是操作符的文件不断地与新版本一起旋转。我有一个解决这个问题的计划,就是使用狮身人面像锁文件:

  • 对于每个索引:
    • 获取.spl文件的锁(希望防止重新索引并发运行)
    • 添加相关文件(.spa.spd.sph.spi.spk.spm.spp.sps)
    • 释放.spl文件的锁

我担心的是,我似乎找不到任何关于锁文件在狮身人面像中的行为的详细文档。这将是一个在较低水平上与狮身人面像的并发性交互的工具,我看到了许多潜在的陷阱(并发性让我害怕)。我在想,如果:

  1. 有什么地方我可以得到一个全面的描述锁文件如何在斯芬克斯?
  2. 我备份狮身人面像的计划是正确的吗?我环顾了谷歌,找不到比这更好的方法了,但是有人知道更好的方法。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 16:14:56

AFAIK‘锁文件’-只测试是否存在。文件存在时,searchd正在积极地为索引提供服务。文件不存在,索引是安全的重新创建或删除等。

如果锁文件存在,indexer将拒绝重新索引索引。

但是如果您指定--旋转,它将创建一个全新版本的索引(使用.new )。(在文件名中),它不会关心锁文件是否存在,因为它没有触及存在的索引。

完成后向搜索发出信号。然后,searchd将删除活动索引,重命名索引文件,并为新版本提供服务(这样就不会中断服务--它还会保持锁文件的位置)。

因此,停止索引器(假设您使用--旋转)的唯一方法是创建indexname.new.spl --我认为这可能有效--但从未尝试过。我想它不会注意到如果你咨询锁定了什么东西。

一个更好,但更狡猾的方法,以获得一致的备份,可能是拦截信号从索引器到搜索。如果备份正在进行,请先暂停直到备份完成,然后将消息发送给searchd。

(但是,要使索引器向您的拦截器发送消息,可能需要做一些工作,必须创建一个配置文件,并带有一个假的pid文件。所以这是拦截器的pid而不是搜索)

当然,更大的问题是,如果您的索引可以如此容易地重新创建(您经常重述它们),那么为什么还要支持它们呢?如果迷失了,就可以重新创造。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18084674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档