3

我正在尝试绘制网站的链接结构,以便我可以模拟给定域上的页面如何相互链接。注意我没有绘制指向不在根域上的站点的链接。

显然,该图的大小可能相当大。我想要执行的主要查询之一是计算有多少页面直接链接到给定的 url。我想对整个图表(不寒而栗)运行它,这样我最终得到一个 url 列表和指向该 url 的传入链接的计数。

我知道一种流行的方法是通过某种地图减少 - 我可能最终还是会这样做 - 但是我需要能够(接近)实时查看此报告,这通常不是地图减少友好。

我已经快速浏览了 neo4j 和 OrientDb。虽然这两个都可以模拟我想要的关系,但我不清楚我是否可以查询它们来生成我想要的报告。在这一点上,我不致力于任何特别的技术。

任何帮助将不胜感激。谢谢,保罗

4

4 回答 4

3

OrientDB和 Neo4J都支持将蓝图作为通用 API 来进行图操作,如遍历、计数等。

如果我很好地理解了您的用例,您的图表看起来很简单:您有一个“URL”顶点,它通过一种边缘“链接”相互链接。

要对图执行操作,请查看Gremlin

于 2011-08-04T05:12:23.947 回答
1

你可以看看structr它是在Neo4j之上运行的开源 CMS,并且具有这些类型的页面间链接。

要获取指向页面的链接数量,您只需迭代当前页面节点的传入 LINKS_TO 链接。

您的查询的用例是什么?流行的页面列表?所以它只包含前 n 个页面?然后,您可能会尝试从图形的随机位置开始,并行遍历与当前节点的传入 LINKS_TO 关系并将它们放入排序结构中,因此您始终从前 20 个左右的顶部页面节点开始/继续已经有最多数量的传入链接(直到它们完成)。

Marko Rodriguez 在Gremlin文档中有一些类似的“页面排名”示例。他还有几篇博客文章谈到了这一点。

于 2011-08-05T07:58:50.867 回答
0

那么使用 Neo4J,您将无法跨服务器拆分图表来分配负载。您可以复制数据库以分发计算,但是更新会很慢(因为您必须复制更新)。我将通过更新每个节点的入站链接计数来解决这个问题,因为新关系被添加为节点的属性。Neo4J 具有出色的写入性能。当然,您不需要保留此信息,因为直接关系检索起来很便宜(您不会获得所有相关节点的集合,只是一个迭代器)。

于 2011-08-03T23:17:03.920 回答
0

您还应该看看一个高度可扩展的图形数据库产品,例如 InfiniteGraph。如果您通过电子邮件向他们的技术支持发送电子邮件,我认为他们将能够向您指出一些示例代码,这些代码可以完成您在此处描述的大部分内容。

于 2011-08-05T22:31:46.580 回答