在MySQL数据库中查找文本内容引用

时间:2010-08-09 13:32:58

标签: php mysql algorithm optimization

有一个网站包含几十个文本片段,每个片段可能都有链接,我需要在片段之间建立连接。片段存储在数据库中,数据库布局如下:

snippet:id主键,title varchar(255),url varchar(400),正文 参考:snippet_id,crc32_sum 反向链接:snippet_id,links_to

添加新代码段的过程:

  1. 清理url,生成其crc32 sum并查找引用表中包含crc32_sum = new urls crc32 sum的所有条目。如果有这样的记录,请将它们添加到反向链接,其中snippet_id是条目,其中包含新的网址crc32 sum和links_to - 新的代码段

  2. 从新片段文本中获取所有链接,清理它们,计算它们的crc32总和并将其全部放入引用中,其中snippet_id是新片段的id,而crc32 sum是找到的链接的总和

  3. 使用PHP完成清理URL和链接抓取,crc32在MySQL中运行。

    我可以以某种方式优化此过程吗?我在MySQL中添加了索引,试图在请求中尽可能多地放入crc32,但仍然很慢:(

1 个答案:

答案 0 :(得分:0)

我不确定这里到底有什么缓慢,所以我只是建议另一种存储数据的方法。

片段:id,title,url,text

链接:fromid,tourl,toid

我不会在这里模拟哈希索引以简化方案,也因为MySQL可以很好地索引字符串。如果需要,可以使用md5索引(二进制形式)模拟散列。

因此,当您插入新代码段时,请执行以下操作:

将新的剪切插入数据库并获取last_insert_id()。在 links 表中搜索条目,其中 toid = 0且 tourl = snippet.url 。使用新的 toid 值在 links 表中找到更新。这些是我们代码段的反向链接。

从代码段中提取链接并迭代代码段表,其中 url = extracted_link 。将所需条目插入 links 表。

这就是全部。如果这将是缓慢的,我们将需要更多的数据:这部分是什么部分是缓慢的,什么是“慢”等。

在我的原理图链接表中包含链接和反向链接。是否足以满足您的需求?