狮身人面像建筑指数改善

时间:2010-09-06 11:14:13

标签: mysql sphinx indexing

嘿伙计们,我对狮身人面像有疑问。我使用Sphinx索引我的网站的全文搜索,它就像一个梦想。此时,为我的所有数据库创建索引大约需要30分钟。这很好,因为我每小时只运行一次索引脚本。

但数据库正在迅速变大,很快我担心数据库会如此之大,以至于无法在1小时内完成这个过程。当然我每2小时只运行一次,但这并不理想。

现在我的问题:每次脚本运行时sphinx是重建整个索引,还是仅添加最近添加到数据库中的最新项目(自上次运行索引以来)?< / p>

我的感觉是,它完全重建了它。

如果这是真的,是否也可以只有已经没有的物品?这会使索引时间缩短很多吗?

2 个答案:

答案 0 :(得分:2)

请参阅Delta索引更新:http://sphinxsearch.com/docs/current.html#delta-updates

我们的想法是维护两个指标:主要 delta 。您只需要将新添加/更新内容的索引构建到 delta 索引中,并定期合并回 main 索引。

答案 1 :(得分:0)

拆分索引

如果您可以轻松识别新的/更新的行,那么

main和delta是最常规的。

如果不拆分可以让你同时重新索引许多“部件”。

索引为180M(随机更新),其中我每小时平均有5K新行。

我的解决方案是

22个部分索引(因为服务器中有24个核心) 20个部分指数等于 2“delta”指数

通过脚本我使用此规则计算每个部分的开始和结束ID

last delta =从今天创建的第一个ID开始 其他delta =从昨天创建的第一个id开始,今天创建第一个id

对于部分索引,它基本上基于

  • START位置-1 *((昨天创建的第一个ID)/ 20)
  • 结束位置*((昨天创建的第一个ID)/ 20)

最后一个delta在几秒钟后重建, 20个第一个区块在10分钟内建成

之前,使用monolitic版本,整个索引在4小时内重建(但只有90M行和sphinx 0.9.9)