【问题标题】:Graph Database to Count Direct Relations图形数据库计算直接关系
【发布时间】:2011-08-03 18:41:30
【问题描述】:

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

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

我知道一种流行的方法是通过某种 map reduce - 我最终可能仍会采用这种方式 - 但是我需要能够(近)实时查看此报告,这不是' t 通常映射 reduce 友好。

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

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

【问题讨论】:

    标签: database graph neo4j orientdb


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢Lvca。蓝图和 Gremlin 的东西正是我所追求的。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 迭代(或多或少)数据库中的所有关系并不便宜,因此对每个节点进行计数将是他们走向恕我直言的方式。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 2010-09-10
        相关资源
        最近更新 更多