2012-07-07 66 views
0

我试图在网站上实现一个狮身人面像搜索服务器。该网站将用于内部追踪。狮身人面像实时更新属性

该数据库定义了一个状态,我已将其配置为sphinx中的一个属性。我需要这个实时更新而没有任何滞后。我也想使用磁盘索引,因此可以很容易地对索引进行定期更新,并避免使用SphinxQL。

我发现这可以通过sphinx API的UpdateAttribute方法来实现。 我想知道的是,如果可以从MySQL触发器调用UpdateAttribute()?我以为我可以有一个PHP脚本,它将获取请求中的所需输入,然后更新索引。请建议可行的实施方式,因为我还没有找到任何可行的方法。

如果您有任何其他实现搜索的方式,以便实时更新属性,请让我知道。

谢谢。

+0

您使用的是SphinxSE存储引擎吗?还是一个独立的服务器守护进程?林不知道Id建议任何情况下的触发器,但如果它的守护进程,那么肯定不会。即使你使用PHP和Sphinx守护进程,你也可能会看到30毫秒的延迟。你能解释为什么这是不可接受的吗? – carpii 2012-07-10 11:27:40

+0

@carpii不使用SphinxSE。数据库在MySQL中使用InnoDB。 “我不知道Id为两种情况都推荐一个触发器,但如果它是一个守护进程,那么肯定不会。” - 没有得到这个。你能否详细说明你提到的两个案例以及相关的建议。我想通过sys_exec和curl调用一个php脚本来实现这一点。然后脚本完成使用sphinxAPI更新索引的工作。为什么滞后会如此之高?还有另一种做同样事情的方法吗?开放给所有的建议,所以请在最后question.thnx – kapad 2012-07-11 16:09:32

+0

SphinxSE是一个MySQL存储引擎,在那里你可以直接从MySQL查询Sphinx。另一种方法是运行searchd deamon,并使用API​​(PHP或其他)查​​询/更新Sphinx。听起来像你;重新使用守护进程/ API方法。我指的是30ms的延迟,假设你在单独的服务器上运行Sphinx守护进程,它的主观性,但是合理估计你在从PHP发布MySQL更新后能够多快地更新Sphinx。 – carpii 2012-07-15 00:30:05

回答

0

UpdateAttribute是正确的方法。

IMO可以在使用MySQL用户定义函数的MySQL触发器中调用此方法。但是,我认为这不是一个好的解决方案,因为这样的功能将非常复杂,并且会非常缓慢地降低mysql的更新速度。

一个更好的解决方案发布到sphinxforums。其使用的齿轮人员和现有的UDFs存在。 (在技术上为狮身人面像C API编写UDF更好,但这更简单),请参阅here

+0

你是否可以直接从MySQL调用UpdateAttribute()?怎么样?由于这个函数是在Sphinx的PHP API中定义的,我认为它必须从PHP本身调用。你能否扩展一些为什么它会减慢更新?谢谢 – kapad 2012-07-11 16:12:58

+0

要直接从MySQL使用UpdateAttribute,您必须使用C API。 这样的函数会减慢mysql更新查询的速度,因为它必须在每次更新时连接到sphinx。 – 2012-07-14 06:18:08

+0

如何使用C API?更重要的是,MySQL如何使用它?据我所知,我需要一些这方面的UDF的狮身人面像,因为没有它自己的UDF – kapad 2012-07-27 16:36:55