图数据库计算直接关系

时间:2011-08-03 18:41:31

标签: database graph neo4j orientdb

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

显然,这张图的尺寸可能很大。我想要执行的一个主要查询是计算直接链接到给定URL的页面数。我想对整个图表(颤抖)运行这个,这样我最终会得到一个网址列表以及该网址的传入链接数。

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

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

非常感谢任何帮助。 谢谢, 保罗

4 个答案:

答案 0 :(得分:3)

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

如果我已经很好地理解了您的用例,那么您的图表看起来非常简单:您有一个“URL”顶点,它使用一种Edge“链接”相互链接。

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

答案 1 :(得分:1)

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

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

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

Marko Rodriguez在Gremlin文档中有一些类似的“页面排名”示例。他也谈了几个blog posts

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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