图形数据库用于计算直接关系

3
我正在尝试绘制网站的链接结构,以便模拟给定域上的页面如何相互链接。请注意,我不会绘制到根域之外的站点的链接。
显然,这个图可能很大。我想执行的主要查询之一是计算直接链接到给定URL的页面数。我希望对整个图运行此操作(颤抖),以便最终得到一个URL列表和该URL的传入链接计数。
我知道实现这个的一种流行方法是通过某种类型的MapReduce - 我可能仍然会去那里 - 但是我需要能够在(几乎)实时中查看此报告,这通常不适用于MapReduce。
我已经快速查看了neo4j和OrientDb。虽然这两者都可以模拟我想要的关系,但不清楚是否可以查询它们来生成我想要的报告。目前,我没有承诺任何特定的技术。
非常感谢您的帮助。 保罗
4个回答

3

无论是OrientDB还是Neo4J都支持Blueprints作为通用API,以进行图形操作,如遍历、计数等。

如果我理解你的用例很好,你的图似乎非常简单:你有一个"URL"顶点,它们通过一种类型的边缘"链接"相互连接。

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


谢谢Lvca。蓝图和Gremlin的内容正是我需要的指引。 - Paul

1

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

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

你的查询用例是什么?一个受欢迎的页面列表?那么它只会包含前n个页面吗?你可以尝试从图形的随机位置开始遍历传入LINKS_TO关系到您当前节点的并行,并将它们放入排序结构中,这样您总是以已经拥有最高数量的传入链接的前20个或更多的顶级页面节点开始/继续(直到完成)。

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


0

使用Neo4J时,您将无法将图形跨多个服务器拆分以分配负载。您可以复制数据库以分配计算,但是更新会很慢(因为您必须复制更新)。我建议通过将每个节点的入站链接计数更新为新关系的属性来解决此问题。Neo4J具有出色的写入性能。当然,您不需要持久化此信息,因为直接关系很容易检索(您只需获得所有相关节点的集合即可迭代器)。


遍历数据库中(多或少)所有关系并不便宜,因此在我看来,对每个节点进行计数是可行的方法。 - nawroth

0

你应该看一下高度可扩展的图数据库产品,例如InfiniteGraph。如果你向他们的技术支持发送电子邮件,我想他们将能够为你提供一些示例代码,可以完成你在这里描述的大部分功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接