搜索大数据库

时间:2010-02-16 08:33:21

标签: php mysql

我有一个数据库,它将URL保存在一个表中(以及有关URL的其他许多细节)。我有另一个表存储字符串,我将用它来执行每个链接上的搜索。我的数据库很大,我期待链接表中至少有500万个条目。

与用户通信的应用程序是用PHP编写的。我需要一些建议,我可以搜索所有模式的所有链接(n X m次搜索),同时不会导致服务器上的高负载,也不会失去速度。我希望它以高速和低资源运行。如果你有任何提示,伪代码的建议,他们都欢迎。

现在我不知道是否使用SQL命令来执行这些搜索并从PHP获得一些帮助,或者在PHP中完全执行它。

4 个答案:

答案 0 :(得分:0)

首先,我建议您重新考虑布局。对每个用户运行此查询似乎有点不必要,而是尝试创建一个结果表,在该结果表中,您只需插入运行那些查询的结果以及每次模式更改时的结果。

否则,请确保在所需字段上设置索引(全文)。对于查询本身,您可以加入表:

SELECT
    yourFieldsHere
FROM
    theUrlTable AS tu
JOIN
    thePatternTable AS tp ON tu.link LIKE CONCAT('%', tp.pattern, '%');

答案 1 :(得分:0)

我会说你非常希望在SQL代码中这样做,而不是PHP代码。搜索URL的字符串将是一个很长的操作,所以也许某种形式的散列会很好。我之前看到有人使用Zobrist散列的变体(谷歌会带来一大堆结果)。

希望这有帮助,

答案 2 :(得分:0)

在数据库中尽可能多地进行搜索。如果你最终得到一个nxm结果集,并且从至少500万次点击开始,这就是很多数据要反复地在线上(或套接字,但是你连接到数据库)只是为了结束每次扔掉它(很多?)。即使数据库的本机搜索功能(“匹配”,正则表达式,全文等等)不能完成任务,在将不需要的行发送到客户端(您的代码)之前剔除它们仍然是有用的

答案 3 :(得分:0)

您必须在数据库中优化表格。使用md5哈希。使用md5的新列将使用索引和更快找到的文本。

但如果您使用LIKE'%text%',则无效。

您可以使用Sphinx或Lucene。

相关问题