【问题标题】:Titan + d3 for computer network visualisationTitan + d3 用于计算机网络可视化
【发布时间】:2013-12-13 01:21:20
【问题描述】:

在过去的几周里,我一直在使用 Titan 进行试验,希望得到一些关于前进方向的建议,以及一些具体的问题。该项目的目的是将日志数据存储在 Cassandra 集群上(对于这个问题,让我们使用 Web 流量的示例)并在 Titan 图中表示关系。所有节点都被建模为具有实体值和类型(例如“google.com”、“主机名”),并且边具有标签(例如“连接”)以及关系的几个属性(时间戳、流长度等在)。

一旦这些数据存储在 cassandra 中并表示为 Titan 图,我计划使用 d3 代码生成可视化。在隧道的尽头,我希望能够构建大规模、交互式、复杂的图网络,如下所示:http://goo.gl/CVEd55

我目前的设置如下:

  • 将日志文件转换为 vertices.csvedges.csv 文件以供 Gremlin 加载的 python 脚本
  • Titan Server 0.4(使用 CassandraThrift 作为存储后端) - 将转换后的数据加载到 Titan 的 gremlin 脚本
  • 使用 NetworkX 打开 RexPro 连接的 Python 脚本,允许分析师输入自定义 Gremlin 查询,以 JSON 格式输出结果
  • 使用生成的 JSON 和 d3 将查询结果显示为图形的本地 Web 前端

理想情况下,作为测试基础案例,我希望用户能够在 Web 前端输入 Gremlin 查询,并被定向到包含结果的交互式 d3 图的页面。

我的具体问题如下:

  1. 为边分配属性的过程是什么?我找不到帮助我使用上面列出的模型表示图形的示例代码。

  2. 我将数据加载到 Titan 的 gremlin 脚本使用 bg.commit() 创建批处理图,稍后在 RexPro 连接 conn= RexProConnection('localhost,8184,'bg') 中引用该批处理图。这最初是有效的,但是在更改我的加载脚本、清除 Gremlin 中的图形然后重新加载后,由于图形 bg 显然不存在,无法打开 RexPro 连接。 Titan中更新图的过程是什么?大概使用相同的图运行加载脚本两次只会将节点/顶点添加到现有的图,所以我将如何在每次更新模型时生成具有相同名称的新图,并让 RexPro 能够引用它运行查询时?

  3. 扩展界面以允许分析师将 SQL 查询输入前端,使用 RexPro 以与所述方式类似的方式访问图表,这有多容易?

为这篇长文道歉,但如果有人能分享他们的专业知识,将不胜感激!

【问题讨论】:

    标签: graph cassandra visualization titan rexster


    【解决方案1】:

    对于 d3 可视化,您可以使用力有向图。它们有几种变体。

    关系图 https://vida.io/documents/qZ5SJdRJfj3XmSXYJ

    强制布局树 https://vida.io/documents/sy7vzWW7BJEvKdZeL

    如果您的网络包含大量节点和边,则需要在可视化之前对数据进行聚类。您可以使用 Gephi、NodeXL 等工具来执行集群。然后使用聚类数据构建力导向可视化。

    【讨论】:

      【解决方案2】:

      将属性分配给边的过程是什么?

      该过程与向顶点添加属性相同。获取Edge 实例然后执行:

      Edge e = g.addEdge(v1,v2,'label')
      e.setProperty('weight',0.1d)
      

      至于:

      在 Titan 中更新图的过程是什么?大概使用相同的图运行加载脚本两次只会将节点/顶点添加到现有的图,所以我将如何在每次更新模型时生成具有相同名称的新图,并让 RexPro 能够引用它运行查询时?

      您不希望在加载后引用 BatchGraph,因为 limitations 附带会阻止您查询。听起来您应该只在rexster.xml 中配置“yourgraph”,当您通过脚本加载时,只需将您的rexster.xml 配置Graph 包装在您的代码中,然后对其执行加载操作。当您要查询它时,只需引用“yourgraph”而不是“bg”即可。

      conn = RexProConnection('localhost,8184,'yourgraph')
      

      扩展界面以允许分析师将 SQL 查询输入前端,使用 RexPro 以与描述的方式类似的方式访问图表,这有多容易?

      很难说这是否“容易”,因为这取决于技术以外的因素。我会说可以构建一个接受 Gremlin 查询的接口(您编写的 SQL,但我假设您的意思是 Gremlin),将它们传递给 Rexster 并返回答案。你如何处理这个答案取决于你,但就 Rexster 的作用而言,我不明白为什么会有问题。

      【讨论】:

      • 嗨斯蒂芬,感谢您的回复!边缘解释的属性非常有用。至于批处理图 - 我目前在 Gremlin 加载脚本中有一些代码,它创建了一个图 g,然后是一个使用 g 的批处理图。所有数据加载都是使用 bg 函数完成的,但在我的 Python NetworkX 可视化脚本中,查询是使用 g 完成的。这似乎工作正常。我是否正确地说,一旦您从正常的批处理图创建批处理图,更新对 g 的引用也会更新 bg?
      • 继续我的最后一条评论:如果我的第三个问题让您有些困惑,我们深表歉意。我的意思是我已经有了一个界面,可以让用户在 Web 前端输入 Gremlin 查询,以便根据查询生成图表。我通过建立 RexPro 连接并传递查询来完成此操作。事实上,我正在寻找的是允许可能不熟悉 Gremlin 的分析师能够编写简单的查询以以类似方式返回数据的东西。所以无论是 CQL、SPARQL 还是类似的。再次欢呼。
      • 如果您创建 g 而不在 rexster.xml 中定义它,它将在该 RexPro 会话之外不可用(我假设您正在通过 RexPro 使用会话通信)。如果没问题,那么是的,您应该能够重新使用 g 引用(不要使用 bg 进行查询,因为它无法正常工作。
      • 我猜可以通过 SPARQL,但您需要编写某种自定义函数来处理它。换句话说,您必须编写一个 Rexster 知道的函数,例如 executeSparql,然后当用户输入 SPARQL 查询时,您必须将该查询包装在该函数中。我认为这会奏效,但从未尝试过这样的事情。
      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2016-01-22
      • 1970-01-01
      相关资源
      最近更新 更多