如何为搜索引擎设计数据库架构?

时间:2011-03-27 05:37:33

标签: database search

我正在使用curl,libxml2和mysql在C中编写一个小型搜索引擎。基本计划是使用curl抓取页面,使用libxml2解析它们,然后遍历DOM并查找所有链接。然后遍历其中的每一个,并重复,同时更新维护URL之间关系的SQL数据库。

我的问题是:如何才能最好地代表网址之间的关系?

4 个答案:

答案 0 :(得分:7)

为什么不使用这些示例列的基本网址表(即www.google.com/)和连接表:

  • 起始页面ID(来自网址表)
  • 结束页面ID(来自网址表)
  • 将url的尾随目录作为另外两列中的字符串

这将允许您加入某些网址并选择您想要的信息。

您的解决方案似乎更适合非关系型数据存储,例如列存储。

大多数搜索引擎索引不存储在关系数据库中,而是存储在内存中以最小化检索时间。

答案 1 :(得分:3)

向表中添加两个字段 - 'id'和'parent_id'。

id - URL的唯一标识符 parent_id - URL的

之间的链接

答案 2 :(得分:2)

如果您希望为每个URL创建一个条目,则应创建另一个映射关系的表。

然后查找URL表以查看它是否存在。如果没有创建它。

关系表有

SourceUrlId,
UrlId

SourceUrlId是页面,UrlId是它指向的url。这样,您可以为同一个URL设置多个关系,并且您不需要在Url表中为该URL的每个链接都有一个新条目。也意味着只存储您存储的任何其他信息的1份。

答案 3 :(得分:2)

为什么您对表示页面图感兴趣?

如果你想计算排名,那么最好有一个更简洁有效的表示(例如,如果你想计算类似于PageRank的东西,那就是matricial形式)。